| 命令文 | 説明 | 使用例 |
|---|---|---|
| SELECT … FROM … | テーブルからデータを選択する基本的なクエリ | SELECT * FROM users; → usersテーブルの全ての列を取得する。 |
| SELECT … FROM … WHERE … | 条件に一致するデータを選択するクエリ | SELECT name FROM users WHERE age > 30; → 30歳以上のname列のデータを取得する。 |
| SELECT COUNT(…) FROM … | 特定の列のレコード数を取得するクエリ | SELECT COUNT(*) FROM users; → usersテーブルの全てのレコード数をカウントする。 |
| SELECT COUNT(…) FROM … WHERE … | 条件に一致するレコード数を取得 | SELECT COUNT(*) FROM users WHERE age > 30; → 30歳以上のユーザーの数をカウントする。 |
| ORDER BY … | データを指定した列で並べ替える | SELECT * FROM users ORDER BY age DESC; → 年齢の降順でユーザーを並べ替える。 |
| GROUP BY … | データを指定した列でグループ化する | SELECT age, COUNT(*) FROM users GROUP BY age; → 年齢ごとのユーザー数を取得する。 |
| INSERT INTO … VALUES … | テーブルに新しいデータを挿入する | INSERT INTO users (name, age) VALUES (‘John’, 25); → usersテーブルに新しいユーザーを挿入する。 |
| UPDATE … SET … WHERE … | 既存のデータを更新する | UPDATE users SET age = 26 WHERE name = ‘John’; → Johnの年齢を26歳に更新する。 |
| DELETE FROM … WHERE … | 条件に一致するデータを削除する | DELETE FROM users WHERE age < 18; → 18歳未満のユーザーを削除する。 |
| INNER JOIN … ON … | 両方のテーブルで一致するデータを結合 | SELECT users.name, orders.amount FROM users INNER JOIN orders ON users.id = orders.user_id; → usersテーブルとordersテーブルを結合し、ユーザー名と注文額を取得する。 |
| LEFT JOIN … ON … | 左のテーブルの全てのデータと、右で一致するデータを結合 | SELECT users.name, orders.amount FROM users LEFT JOIN orders ON users.id = orders.user_id; → 全てのユーザーとその注文額を取得、注文がない場合はNULLになる。 |
| RIGHT JOIN … ON … | 右のテーブルの全てのデータと、左で一致するデータを結合 | SELECT users.name, orders.amount FROM users RIGHT JOIN orders ON users.id = orders.user_id; → 全ての注文とそれに関連するユーザーを取得、ユーザーがない場合はNULLになる。 |
その他
| 命令文 | 説明 | 使用例 |
|---|---|---|
| DISTINCT | 重複するデータを排除して一意のデータを取得 | SELECT DISTINCT age FROM users; → 重複する年齢を排除して、一意の年齢だけを取得する。 |
| LIMIT | 取得するデータの行数を制限 | SELECT * FROM users LIMIT 5; → 5行のデータを取得する。 |
| HAVING | GROUP BY で集約されたデータに条件を付ける | SELECT age, COUNT(*) FROM users GROUP BY age HAVING COUNT(*) > 2; → 2人以上のユーザーがいる年齢のみを表示。 |
| AS | 列やテーブルに別名を付ける | SELECT name AS username FROM users; → name列にusernameという別名を付けて表示する。 |
| BETWEEN | 範囲を指定してデータを取得する | SELECT * FROM users WHERE age BETWEEN 20 AND 30; → 年齢が20〜30のユーザーを取得する。 |
| IN | 指定した値のリストに含まれるデータを取得 | SELECT * FROM users WHERE age IN (25, 30, 35); → 25, 30, 35歳のユーザーを取得する。 |
| LIKE | 部分一致するデータを取得する | SELECT * FROM users WHERE name LIKE ‘J%’; → Jで始まる名前のユーザーを取得する。 |
| IS NULL | NULL 値を持つデータを取得する | SELECT * FROM users WHERE email IS NULL; → email がNULLのユーザーを取得する。 |
| IS NOT NULL | NULL ではないデータを取得する | SELECT * FROM users WHERE email IS NOT NULL; → email が NULL ではないユーザーを取得する。 |
| UNION | 複数のクエリ結果を統合して取得する | SELECT name FROM users UNION SELECT name FROM employees; → users と employees の両方から一意の名前を取得する。 |
| UNION ALL | 重複を許可してクエリ結果を統合する | SELECT name FROM users UNION ALL SELECT name FROM employees; → users と employees の両方から名前を重複を含めて取得する。 |
| EXISTS | サブクエリの結果が存在するか確認する | SELECT * FROM users WHERE EXISTS (SELECT 1 FROM orders WHERE users.id = orders.user_id); → 注文があるユーザーのみを取得する。 |
| NOT EXISTS | サブクエリの結果が存在しない場合のデータを取得 | SELECT * FROM users WHERE NOT EXISTS (SELECT 1 FROM orders WHERE users.id = orders.user_id); → 注文がないユーザーを取得する。 |
| CREATE TABLE | 新しいテーブルを作成する | CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(100), age INT); → usersテーブルを作成する。 |
| ALTER TABLE | 既存のテーブルに変更を加える | ALTER TABLE users ADD email VARCHAR(255); → usersテーブルに email 列を追加する。 |
| DROP TABLE | テーブルを削除する | DROP TABLE users; → usersテーブルを削除する。 |
| TRUNCATE TABLE | テーブル内の全てのデータを削除する(構造は保持) | TRUNCATE TABLE users; → usersテーブルの全データを削除する。 |
| CREATE INDEX | インデックスを作成して検索を高速化する | CREATE INDEX idx_users_name ON users(name); → usersテーブルのname列にインデックスを作成する。 |
| DROP INDEX | インデックスを削除する | DROP INDEX idx_users_name ON users; → usersテーブルのname列に作成されたインデックスを削除する。 |
| CASE | 条件に基づいて値を返す | SELECT name, CASE WHEN age > 30 THEN ‘senior’ ELSE ‘junior’ END AS rank FROM users; → 年齢が30以上のユーザーをsenior、それ以下をjuniorとして取得する。 |