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