はじめに
本記事では、SQL命令を基本構文と具体例を挙げて説明します。
もし、間違っている内容があったり、改善点があればコメントいただけると幸いです。
追記・修正に伴い、それぞれの内容が独立した記事になる可能性があることをご了承ください。
SQL命令とは
SQL(Structured Query Language)を構成する、データベースを操作する具体的な処理を行うための命令(コマンド)群のことです。
SQL命令は、役割に応じて以下の3種類に分類されます。
- データ定義言語(DDL: Data Definition Language)
- データ操作言語(DML: Data Manipulation Language)
- データ制御言語(DCL: Data Control Language)
上記のSQL命令を順を追って説明していきます。
1. データ定義言語(DDL: Data Definition Language)
DDLは、データベースを構成するデータ構造(スキーマ)を定義、作成する言語です。
スキーマとは、データの論理的な構造の定義のことで、そこで定義されたテーブルやインデックス、ビューといった具体的なデータのことをオブジェクトと呼びます。
DDLには以下の4種類の命令があります。
- CREATE(作成)
- ALTER(変更)
- DROP(削除)
- TRUNCATE(テーブル内の全レコードを削除)
CREATE(作成)
CREATE TABLE [テーブル名] ( [カラム定義], ... );
CREATE TABLE users (
-- ユーザーID(主キー)
id BIGINT UNSIGNED NOT_NULL PRIMARY KEY,
-- ユーザー名
name VARCHAR(255) NOT_NULL,
...
);
ALTER(変更)
ALTER TABLE [テーブル名] ADD [カラム定義];
ALTER TABLE users ADD COLUMN email VARCHAR(255) NOT_NULL UNIQUE;
DROP(削除)
DROP TABLE [テーブル名];
DROP TABLE users;
TRUNCATE(テーブル内の全レコードを削除)
※truncate 切り詰める、切り捨てるという意味、DDLにおいてはテーブル内のデータを切り捨てる(一括削除)という意味になる
TRUNCATE TABLE [テーブル名];
TRUNCATE TABLE users;
2. データ操作言語(DML: Data Manipulation Language)
DDLで定義したデータに対して、操作を行うための言語です。
以下の4種類の命令があります。
- SELECT(抽出)
- INSERT(挿入)
- UPDATE(更新)
- DELETE(削除)
SELECTはSQL命令の中でも最も重要で複雑な命令です。SELECTについては個別に章を作成します。
SELECT(抽出)
SELECT [カラム名] FROM [テーブル名] [条件句(WHERE句など)];
SELECT * FROM users;
INSERT(挿入)
INSERT INTO [テーブル名]([カラム1], ...) VALUES([値1], ...);
カラムとカラムに対応する値の順番を一致させる(カラム1 = 値1)
INSERT INTO users(id, name, email, ...) VALUES(3, 'カズキ', test@example.com, ...);
UPDATE(更新)
UPDATE [テーブル名] SET [カラム1 = 値1], ... [条件句(WHERE句など)];
UPDATE users SET name = 'タロウ', email = 'taro@taro.com', WHERE id = 5;
DELETE(削除)
DELETE FROM [テーブル名] [条件句];
DELETE FROM users WHERE id = 5;
user_idを外部キーに設定され「ON DELETE CASCADE」が定義されていると、指定のidを含むレコードがすべて削除される
3. データ制御言語(DCL: Data Control Language)
データベース内のデータへのアクセス権限を管理したり、一連のデータ変更処理を確定、破棄するための言語です。
SQLにおいて一連のデータ変更処理のことをトランザクションと呼びます。
以下はトランザクションの一例です。
-- Aさんの口座から1万円引き出す
UPDATE 口座 SET 残高 = 残高 - 10000 WHERE 口座番号 = Aさんの口座番号;
-- Bさんの口座に1万円入金する
UPDATE 口座 SET 残高 = 残高 + 10000 WHERE 口座番号 = Bさんの口座番号;
振込処理は「引き出し」と「入金」が必ずセットで行われなければ成立しません。
このように、トランザクションはそれ以上分割不可能な一連の処理という意味をもち、すべての命令が実行されるか、あるいは全く実行されないかのどちらかの結果となり、
途中で止まることはない性質(原子性)をもちます。
DCLの命令は以下の4種類です。
- GRANT(ユーザーやロールへの権限の付与)
- REVOKE(ユーザーやロールの権限の剥奪)
- COMMIT(トランザクションの確定)
- ROLLBACK(トランザクションの破棄)
GRANT(ユーザーやロールへの権限の付与)
GRANT [権限1], ... ON [オブジェクト名] TO [ユーザー名1], ...;
GRANT SELECT ON users TO user_1;
REVOKE(ユーザーやロールの権限の剥奪)
REVOKE [権限1], ... ON [オブジェクト名] FROM [ユーザー名1], ...;
REVOKE SELECT ON employees FROM user_1;
COMMIT(トランザクションの確定)
COMMIT;
※COMMITは基本的にオプションはつけないが、DBMS(MySQLなど)ごとにオプションが用意されていることがある。
-- データの更新(成功)
COMMIT;
ROLLBACK(トランザクションの破棄)
ROLLBACK;
-- データの更新(失敗)
ROLLBACK;
参考文献
「これだけは押さえておきたい最短SQL入門」 松田達也 インプレス 2021年