Menu
Coddy logo textTech

SQL チートシート

最終更新

データの問い合わせ (SELECT)

SQL の中核: 1 つまたは複数のテーブルから行を読み取ります。

操作構文
すべての列を選択SELECT * FROM users;
特定の列を選択SELECT id, name FROM users;
列名を変更 (別名)SELECT name AS full_name FROM users;
重複しない値SELECT DISTINCT country FROM users;
行数を制限SELECT * FROM users LIMIT 10;
スキップしてから制限 (ページング)SELECT * FROM users LIMIT 10 OFFSET 20;
行数をカウントSELECT COUNT(*) FROM users;

行の絞り込み (WHERE)

クエリが返す行を絞り込みます。

操作構文
等価 / 比較WHERE age >= 18
複数条件WHERE age >= 18 AND country = 'US'
いずれかの条件WHERE role = 'admin' OR role = 'owner'
集合に含まれるWHERE country IN ('US', 'CA', 'MX')
範囲内WHERE price BETWEEN 10 AND 50
パターンマッチWHERE email LIKE '%@gmail.com'
null かどうかWHERE deleted_at IS NULL
否定WHERE status NOT IN ('archived')

並べ替えとグループ化

操作構文
昇順で並べ替え (既定)ORDER BY created_at
降順で並べ替えORDER BY created_at DESC
複数列で並べ替えORDER BY country, name DESC
行をグループ化SELECT country, COUNT(*) FROM users GROUP BY country;
グループを絞り込みGROUP BY country HAVING COUNT(*) > 100

結合 (JOIN)

一致する列を基準に、2 つのテーブルの行を結合します。

結合の種類返す内容構文
INNER JOIN両方のテーブルで一致する行のみFROM orders o INNER JOIN users u ON o.user_id = u.id
LEFT JOIN左側の全行 + 一致 (一致がなければ null)FROM users u LEFT JOIN orders o ON o.user_id = u.id
RIGHT JOIN右側の全行 + 一致FROM orders o RIGHT JOIN users u ON o.user_id = u.id
FULL OUTER JOIN両側のすべての行FROM a FULL OUTER JOIN b ON a.id = b.a_id
CROSS JOINすべての組み合わせ (直積)FROM sizes CROSS JOIN colors
自己結合テーブルを自分自身と結合FROM employees e JOIN employees m ON e.manager_id = m.id

集計関数

行のグループ全体から単一の値を計算します。

関数機能
COUNT(*)行数
COUNT(col)null でない値の数
SUM(col)数値列の合計
AVG(col)平均値
MIN(col) / MAX(col)最小値 / 最大値
STRING_AGG(col, ',')値を連結 (Postgres、MySQL では GROUP_CONCAT)

ウィンドウ関数

複数の行をまとめてしまわずに、その行の集合に対して計算します。

関数構文
行番号ROW_NUMBER() OVER (ORDER BY score DESC)
ランク (順位に飛びあり)RANK() OVER (PARTITION BY country ORDER BY score DESC)
連続ランクDENSE_RANK() OVER (ORDER BY score DESC)
累計SUM(amount) OVER (ORDER BY created_at)
前後の行LAG(score) OVER (ORDER BY date), LEAD(score) OVER (...)

データの変更 (INSERT, UPDATE, DELETE)

操作構文
行を挿入INSERT INTO users (name, email) VALUES ('Ada', 'ada@x.com');
複数行を挿入INSERT INTO users (name) VALUES ('Ada'), ('Alan');
行を更新UPDATE users SET active = true WHERE id = 1;
行を削除DELETE FROM users WHERE active = false;
アップサート (Postgres/SQLite)INSERT ... ON CONFLICT (email) DO UPDATE SET name = EXCLUDED.name;

テーブルの定義 (DDL)

操作構文
テーブルを作成CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT NOT NULL);
列を追加ALTER TABLE users ADD COLUMN age INTEGER;
列を削除ALTER TABLE users DROP COLUMN age;
テーブルを削除DROP TABLE users;
インデックスを作成CREATE INDEX idx_users_email ON users (email);
外部キーFOREIGN KEY (user_id) REFERENCES users (id)

よく使う SQL のステートメント、句、結合を 1 ページにまとめました。この SQL チートシートは、リレーショナルデータの問い合わせと変更のためのクイックリファレンスです。SELECT 句、4 種類の JOIN、集計、そしてテーブルの作成・更新に使う DDL と DML を収録しています。

ここで紹介する構文は標準の ANSI SQL で、特記がない限り PostgreSQL、MySQL、SQLite、SQL Server で動作します。必要なものをコピーするか、SQL プレイグラウンドですべてのクエリをその場で試してみてください。データベースのインストールは不要です。

SQL チートシート よくある質問

この SQL チートシートは無料ですか?
はい。この SQL チートシートは完全に無料で、登録も不要です。ブックマークしておけば、句や結合、関数を調べたいときにいつでも戻ってこられます。
MySQL、PostgreSQL、SQLite で動きますか?
ほとんどの場合、動きます。ここで紹介している SELECTWHEREJOINGROUP BY、DDL の構文は標準の ANSI SQL で、MySQL、PostgreSQL、SQLite、SQL Server で同じように動作します。いくつかの高度な機能は方言によって異なり、アップサートと文字列の集計が代表例です。該当する行ではその違いを注記しています。
INNER JOIN と LEFT JOIN の違いは何ですか?
INNER JOIN は両方のテーブルで一致する行のみを返します。LEFT JOIN は左側 (最初) のテーブルのすべての行を返し、右側のテーブルに一致がない場合は右側の列を NULL で埋めます。注文のないユーザーがいてもすべてのユーザーを取得したいときに便利です。
これらの SQL コマンドをオンラインで練習できますか?
はい。SQL プレイグラウンドを開けば、このチートシートのどのクエリも、ブラウザ上で本物のデータベースに対して実行できます。インストールは不要です。体系的に学びたいときは、Coddy の無料インタラクティブ SQL コースが、SELECT から結合、ウィンドウ関数まで段階的に導いてくれます。
このチートシートは初心者に向いていますか?
はい。最もよく使う操作 (問い合わせと絞り込み) から高度なもの (ウィンドウ関数) へと並べてあるので、初日から上のセクションを使い、残りには慣れながら進めます。
Coddy programming languages illustration

CoddyでSQLを学ぼう

始める