SQLの基礎についてまとめています。


SQLの基礎 大きく分けてDDLとDML、DCLがある
SQLには、DML、DDL、DCLの3種類があります。
DMLはselectやupdateなどのデータを操作するSQL、DDLは、データの構造を定義するcreate tableなどのSQL、DCLはデータ制御用のGRANTやROLL BACKなどのSQLです。
【関連記事】
▶SQLとはどういうもの? 独自拡張と標準SQLの大きな違いって、何?
DDLのサンプルコード
DDLは、データベースの「枠」を作るためのSQLと言って良いでしょう。主にデータベース管理者が扱うSQLです。
以下は、MySQLでテーブルを作成するcreate tableを実行して、employees_copyというテーブルを作成した例です。descはテーブルの詳細を表示するコマンドです。
- CREATE TABLE `employees_copy` (
- `emp_no` int(11) NOT NULL,
- `birth_date` date NOT NULL,
- `first_name` varchar(14) NOT NULL,
- `last_name` varchar(16) NOT NULL,
- `gender` enum('M','F') NOT NULL,
- `hire_date` date NOT NULL,
- PRIMARY KEY (emp_no)
- );
- Query OK, 0 rows affected, 1 warning (0.03 sec)
- mysql> desc employees_copy;
- +------------+---------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +------------+---------------+------+-----+---------+-------+
- | emp_no | int | NO | PRI | NULL | |
- | birth_date | date | NO | | NULL | |
- | first_name | varchar(14) | NO | | NULL | |
- | last_name | varchar(16) | NO | | NULL | |
- | gender | enum('M','F') | NO | | NULL | |
- | hire_date | date | NO | | NULL | |
- +------------+---------------+------+-----+---------+-------+
- 6 rows in set (0.01 sec)
【関連記事】
▶MySQLのcreate tableサンプルコード集 カラム定義を自動出力する方法は?
基礎的な4種類のSQL(DML)
SQLと言えば、もっとも馴染みがあるのがselect、update、insert、deleteの4SQLでしょう。以下、MySQLで動作するサンプルコードです。
【関連記事】
▶SQL文一覧 基本4大ステートメントのサンプルコード集
select文のサンプルコード
selectは、指定した条件でデータを取得するSQLです。下記のSQLは、employees(社員)テーブルから、birth_date(誕生日)が1960年1月1日以降のデータを10件取得します。
- mysql> select * from employees where birth_date > '1960-01-01' limit 10;
- +--------+------------+------------+-------------+--------+------------+
- | emp_no | birth_date | first_name | last_name | gender | hire_date |
- +--------+------------+------------+-------------+--------+------------+
- | 10002 | 1964-06-02 | Bezalel | Simmel | F | 1985-11-21 |
- | 10010 | 1963-06-01 | Duangkaew | Piveteau | F | 1989-08-24 |
- | 10012 | 1960-10-04 | Patricio | Bridgland | M | 1992-12-18 |
- | 10013 | 1963-06-07 | Eberhardt | Terkki | M | 1985-10-20 |
- | 10016 | 1961-05-02 | Kazuhito | Cappelletti | M | 1995-01-27 |
- | 10021 | 1960-02-20 | Ramzi | Erde | M | 1988-02-10 |
- | 10027 | 1962-07-10 | Divier | Reistad | F | 1989-07-07 |
- | 10028 | 1963-11-26 | Domenick | Tempesti | M | 1991-10-22 |
- | 10032 | 1960-08-09 | Jeong | Reistad | F | 1990-06-20 |
- | 10034 | 1962-12-29 | Bader | Swan | M | 1988-09-21 |
- +--------+------------+------------+-------------+--------+------------+
- 10 rows in set (0.01 sec)
insert文のサンプルコード
insertは、指定した値でレコードを挿入するSQLです。下記は、employees_copyテーブルに、指定した値でレコードを1件挿入し、select文で挿入したレコードを表示しています。
- mysql> insert into employees_copy
- (emp_no, birth_date, first_name, last_name, gender, hire_date )
- values ( '555555', '2008-10-10', 'Taro', 'Yamada', 'M', '2020-04-01' );
- Query OK, 1 row affected (0.04 sec)
- mysql> select * from employees_copy;
- +--------+------------+------------+-----------+--------+------------+
- | emp_no | birth_date | first_name | last_name | gender | hire_date |
- +--------+------------+------------+-----------+--------+------------+
- | 555555 | 2008-10-10 | Taro | Yamada | M | 2020-04-01 |
- +--------+------------+------------+-----------+--------+------------+
- 1 row in set (0.00 sec)
update文のサンプルコード
updateは、指定した値でレコードを更新するSQLです。下記は、employees_copyテーブルのemp_no=55555のレコードのlast_name(姓名の姓)を”Tanaka”に更新するSQLです。
更新後、現在のレコードをselect文で表示しています。
- mysql> update employees_copy set last_name='Tanaka' where emp_no='555555';
- Query OK, 1 row affected (0.01 sec)
- Rows matched: 1 Changed: 1 Warnings: 0
- mysql> select * from employees_copy;
- +--------+------------+------------+-----------+--------+------------+
- | emp_no | birth_date | first_name | last_name | gender | hire_date |
- +--------+------------+------------+-----------+--------+------------+
- | 555555 | 2008-10-10 | Taro | Tanaka | M | 2020-04-01 |
- +--------+------------+------------+-----------+--------+------------+
- 1 row in set (0.00 sec)
delete文のサンプルコード
deleteは指定した条件でレコードを削除するSQLです。
下記は、emp_no=555555のレコードを削除し、select文でデータが削除されたことを確認しています。
- mysql> delete from employees_copy where emp_no='555555';
- Query OK, 1 row affected (0.01 sec)
- mysql> select * from employees_copy;
- Empty set (0.00 sec)
まとめ

- SQLの基礎は、DDLとDML
- DDLはcreate tableなど、データベースの枠を作成するSQL
- DMLは、データ操作SQL。代表的なのは、select、insert、update、delete