究極の SQL チートシート:コマンド、結合(Join)、関数の完全リファレンス
SQL(Structured Query Language)は、リレーショナルデータベースを管理および操作するための標準言語です。MySQL、PostgreSQL、SQL Server、SQLite のいずれを使用していても、これらのコアコマンドはデータベース操作の基盤となります。
このチートシートを、一般的な SQL 構文とベストプラクティスのクイックリファレンスとして活用してください。
1. 基本的なデータ取得
最も一般的な SQL タスクは、テーブルからデータを取得することです。
| コマンド | 説明 | 例 |
|---|---|---|
SELECT |
取得する列を指定する | SELECT name, age |
FROM |
取得元のテーブルを指定する | FROM users |
WHERE |
条件に基づいて結果セットをフィルタリングする | WHERE age > 18 |
ORDER BY |
結果セットをソートする (ASC または DESC) | ORDER BY created_at DESC |
LIMIT |
返される行数を制限する | LIMIT 10 |
DISTINCT |
重複を除いた一意の値のみを返す | SELECT DISTINCT city |
クエリ例:
SELECT name, email
FROM users
WHERE country = 'JP'
ORDER BY name ASC
LIMIT 5;
2. SQL 結合 (Joins):データの組み合わせ
結合を使用すると、関連する列に基づいて複数のテーブルからデータを取得できます。
- INNER JOIN (内部結合):両方のテーブルに一致がある場合に行を返します。
- LEFT (OUTER) JOIN (左外部結合):左側のテーブルのすべての行と、右側のテーブルの一致する行を返します。
- RIGHT (OUTER) JOIN (右外部結合):右側のテーブルのすべての行と、左側のテーブルの一致する行を返します。
- FULL (OUTER) JOIN (完全外部結合):いずれかのテーブルに一致がある場合に行を返します。
結合の例:
SELECT orders.id, users.name
FROM orders
INNER JOIN users ON orders.user_id = users.id;
3. 集計とグループ化
集計関数は、一連の値に対して計算を実行し、単一の値を返します。
| 関数 | 説明 |
|---|---|
COUNT() |
行数を返す |
SUM() |
数値列の合計を返す |
AVG() |
平均値を返す |
MIN() |
最小値を返す |
MAX() |
最大値を返す |
GROUP BY と HAVING:
GROUP BY は集計関数とともに使用され、1 つ以上の列で結果セットをグループ化します。HAVING はグループをフィルタリングするために使用されます。
SELECT department, COUNT(*)
FROM employees
GROUP BY department
HAVING COUNT(*) > 5;
4. データ操作 (DML)
データの追加、更新、削除のためのコマンド。
- INSERT:新しい行を追加する。
INSERT INTO users (name, email) VALUES ('山田 太郎', '[email protected]'); - UPDATE:既存の行を修正する。
UPDATE users SET email = '[email protected]' WHERE id = 1; - DELETE:行を削除する。
DELETE FROM users WHERE id = 1;
5. スキーマ定義 (DDL)
データベース構造を定義および管理するためのコマンド。
- CREATE TABLE:新しいテーブルを作成する。
CREATE TABLE products ( id INT PRIMARY KEY, name VARCHAR(100), price DECIMAL(10, 2) ); - ALTER TABLE:既存のテーブル構造を修正する(列の追加/削除)。
ALTER TABLE users ADD last_login TIMESTAMP; - DROP TABLE:テーブルとそのすべてのデータを削除する。
DROP TABLE temp_data; - Indexes (インデックス):データ取得を高速化するために使用される。
CREATE INDEX idx_user_email ON users(email);
よくある質問 (FAQ)
Q: SQL と NoSQL のどちらを選ぶべきですか?
A: データが構造化されており、複雑な結合が必要で、ACID コンプライアンスが優先される場合は SQL(リレーショナル)を使用してください。非構造化データ、高い拡張性の要件、およびスキーマが頻繁に変更される迅速な開発サイクルの場合は NoSQL(非リレーショナル)を使用してください。
Q: データベース設計のベストプラクティスは何ですか?
A:
- 正規化 (Normalization):データの冗余を減らす。
- 命名規則:一貫性のある、小文字でアンダースコア区切りの名前を使用する。
- 主キー:すべてのテーブルに一意の識別子が必要。
- インデックスを賢く使用する:読み取りは速くなりますが、書き込みは遅くなります。
Q: SQL インジェクションとは何ですか?どのように防げますか?
A: SQL インジェクションは、攻撃者が悪意のある SQL ステートメントを実行できる脆弱性です。防止策:ユーザー入力をクエリに直接連結しないでください。プログラミング言語のデータベースドライバーが提供する プリペアドステートメント(パラメータ化されたクエリ)を使用してください。
Q: SQL のパフォーマンスを最適化するにはどうすればよいですか?
A:
SELECT *を避け、必要な列のみを取得する。EXPLAINを使用してクエリ実行プランを分析する。WHEREおよびJOIN句で使用される列に適切なインデックスを作成する。JOINの方が効率的な場合は、サブクエリの使用を避ける。
Tool3M の関連ツール
- SQL フォーマッタ:SQL クエリを整理してフォーマットし、可読性を高めます。
- JSON から CSV へ変換:データベースのエクスポート結果を JSON と CSV 形式間で変換します。