
SQLコマンド一覧
SQL一覧表コマンド
SQLのコマンドを表にしてコマンド、目的、使用状況の例、実行例をまとめています。
SQLコマンド一覧
このページはSQLのコマンドを使用状況と具体例をまとめています
レベル1:【初心者の基礎】データベースとの対話をはじめよう (CRUD操作)
データベース操作の根幹をなす、データの作成(Create)、読み取り(Read)、更新(Update)、削除(Delete)です。これらを総称してCRUDと呼びます。
コマンド | 目的 | 使用状況の具体例 | 実践コード例(Employees テーブルを想定) |
---|---|---|---|
SELECT |
データの読み取り (Read) | 「最新の顧客リストを画面に表示したい」「特定の商品の在庫数を確認したい」 といった、DBから情報を閲覧する最も基本的な場面。 | SELECT employee_id, name, salary FROM Employees; |
INSERT |
データの作成 (Create) | 「新しい会員が登録されたので、顧客テーブルに追加したい」「Webフォームから送信された問い合わせ内容をDBに保存したい」 といった場面。 | INSERT INTO Employees (employee_id, name, salary) VALUES ('E001', '田中 太郎', 300000); |
UPDATE |
データの更新 (Update) | 「顧客の住所が変更になったので登録情報を更新したい」「商品の価格改定に伴い、マスターデータを一括で変更したい」 といった場面。 | UPDATE Employees SET salary = 320000 WHERE employee_id = 'E001'; |
DELETE |
データの削除 (Delete) | 「退会したユーザーの情報を削除したい」「古くなったログデータを削除してDBを整理したい」 といった場面。 | DELETE FROM Employees WHERE employee_id = 'E001'; |
レベル2:【中級者へのステップアップ】欲しいデータを自在に絞り込む・並べ替える
大量のデータの中から、本当に必要な情報だけを効率的に取り出すテクニックです。
コマンド / 句 | 目的 | 使用状況の具体例 | 実践コード例 |
---|---|---|---|
WHERE |
条件による絞り込み | 「営業部の社員だけをリストアップしたい」「在庫が10個未満の商品を抽出したい」 など、特定の条件に合致するデータだけを見たい場面。 | SELECT * FROM Employees WHERE department_id = 20; |
LIKE |
あいまい検索 | 「顧客の名前がうろ覚えでも検索できるようにしたい」「商品名に'Pro'が含まれるモデルを全てリストアップしたい」 といった場面。 | SELECT * FROM Employees WHERE name LIKE '田中%'; |
IN |
複数条件の指定 | 「東京、神奈川、埼玉在住の顧客を一度に検索したい」「特定の複数の商品IDの情報をまとめて取得したい」 といった場面。 | SELECT * FROM Employees WHERE department_id IN (10, 30); |
BETWEEN |
範囲指定 | 「今月の売上データを抽出したい(日付の範囲指定)」「価格が5,000円から10,000円の間の商品を探したい」 といった場面。 | SELECT * FROM Employees WHERE hire_date BETWEEN '2020-04-01' AND '2021-03-31'; |
ORDER BY |
結果の並べ替え | 「商品を価格が安い順に表示したい」「会員を登録日が新しい順に並べ替えたい」 といった、結果を見やすく整理したい場面。 | SELECT * FROM Employees ORDER BY salary DESC; |
LIMIT |
取得件数の制限 | 「売上ランキングのトップ10を表示したい」「最新のブログ記事を5件だけトップページに表示したい」 といった場面。 | SELECT * FROM Employees ORDER BY salary DESC LIMIT 10; |
AS (エイリアス) |
列名やテーブル名に別名をつける | 「英語の列名を日本語にしてレポートを作成したい」「長いテーブル名を短くしてクエリを書きやすくしたい」 といった場面。 | SELECT name AS "社員名", salary AS "月給" FROM Employees; |
レベル3:【実践的なデータ集計・分析】データをグループ化して洞察を得る
個々のデータから、ビジネスに役立つ「意味のある情報」を引き出すためのテクニックです。
コマンド / 関数 | 目的 | 使用状況の具体例 | 実践コード例 |
---|---|---|---|
COUNT |
行数を数える | 「サイトの総会員数を知りたい」「条件に合致する注文件数が何件あるかを確認したい」 といった、データの「個数」「件数」を把握したい場面。 | SELECT COUNT(*) FROM Employees WHERE department_id = 10; |
集計関数 | グループ全体の値を計算 | 「全社員の平均給与や総人件費を算出したい」「最高/最低販売価格を知りたい」 といった、データの全体像を把握したい場面。 | SELECT AVG(salary), SUM(salary), MAX(salary) FROM Employees; |
GROUP BY |
指定した列でデータをグループ化 | 「各部署の人件費を計算したい」「月別の売上レポートを作成したい」「各商品のカテゴリ別在庫数を知りたい」 といった、データを特定のカテゴリで集計・分析する場面。 | SELECT department_id, COUNT(*) AS num_employees FROM Employees GROUP BY department_id; |
HAVING |
GROUP BY の結果をさらに絞り込む |
「社員が10人以上いる部署だけをリストアップしたい」「平均注文額が5,000円以上の優良顧客を抽出したい」 といった、集計結果に対する条件指定。 | SELECT department_id, AVG(salary) FROM Employees GROUP BY department_id HAVING AVG(salary) >= 350000; |
レベル4:【プロレベルへの入り口】複数テーブルの結合と複雑なクエリ
正規化によって分割されたテーブルを自在に組み合わせ、より複雑な要求に応えるためのコマンドです。
コマンド / 句 | 目的 | 使用状況の具体例 | 実践コード例 |
---|---|---|---|
INNER JOIN |
内部結合(両テーブルに存在するデータのみ) | 「社員情報と部署情報を紐づけて、誰がどの部署にいるかの一覧表を作りたい」 といった、2つの情報が揃っているデータだけを結合する場面。 | SELECT e.name, d.department_name FROM Employees e JOIN Departments d ON e.department_id = d.department_id; |
LEFT JOIN |
左外部結合(左テーブルを基準に結合) | 「全社員の一覧と、彼らがリーダーを務めるプロジェクト名を表示したい(プロジェクトリーダーでない社員もリストに含める)」 といった場面。 | SELECT e.name, p.project_name FROM Employees e LEFT JOIN Projects p ON e.employee_id = p.leader_id; |
RIGHT JOIN |
右外部結合(右テーブルを基準に結合) | 「全ての部署名と、そこに所属する社員の一覧を表示したい(社員が一人もいない部署もリストに含める)」 という場面。LEFT JOIN の左右を入れ替えるのと同じだが、思考の流れでこちらが自然な場合もある。 |
SELECT d.department_name, e.name FROM Employees e RIGHT JOIN Departments d ON e.department_id = d.department_id; |
サブクエリ | クエリの中のクエリ | 「全社の平均給与よりも高い給与をもらっている社員をリストアップしたい」 といった、あるクエリの結果を別のクエリの条件として使いたい場面。 | SELECT name FROM Employees WHERE salary > (SELECT AVG(salary) FROM Employees); |
CASE 式 |
条件に応じた値の分岐 | 「年齢に応じて年代(20代, 30代...)を付与したい」「売上実績に応じて評価ランク(S, A, B...)を付けて表示したい」 といった場面。 | SELECT name, CASE WHEN salary >= 500000 THEN 'ハイレベル' ELSE '通常' END AS rank FROM Employees; |
UNION |
クエリ結果の合体 | 「東京本社の社員と大阪支社の社員(別のテーブルで管理)の名簿を一つにまとめたい」 といった、複数のテーブルから同じ形式の結果を縦に連結したい場面。 | SELECT name FROM Tokyo_Employees UNION SELECT name FROM Osaka_Employees; |
レベル5:【プロの実践・管理】データの品質と性能、安全性を高める
データベース自体の品質を維持し、安全に運用するためのコマンドです。
コマンド / 概念 | 目的 | 使用状況の具体例 | 実践コード例 |
---|---|---|---|
制約 (Constraints) | データ品質の維持 | 「会員IDの重複登録を防ぎたい」「必須項目(名前など)が空欄で登録されないようにしたい」 といった、不正なデータ混入を防ぐルール設定。 | CREATE TABLE Departments ( department_id INT PRIMARY KEY, name VARCHAR(255) NOT NULL UNIQUE ); |
インデックス (Index) | 検索速度の向上 | 「数百万件の顧客データから名前で高速に検索できるようにしたい」「よく検索条件になる列のパフォーマンスを改善したい」 といった場面。 | CREATE INDEX idx_name ON Employees(name); |
トランザクション | 処理の安全性を確保 | 「銀行振込(A口座から減らしB口座に増やす)のように、一連の処理が絶対に成功するか失敗するかのどちらかであることを保証したい」 場面。 | BEGIN; UPDATE Accounts SET balance = balance - 10000; UPDATE Accounts SET balance = balance + 10000; COMMIT; |
ビュー (View) | 仮想的なテーブル | 「個人情報など特定の列を隠した状態で、一部のユーザーにデータへのアクセスを許可したい」「複雑な集計クエリを毎回書かずに済むようにしたい」 場面。 | CREATE VIEW High_Salary_Employees AS SELECT name, department FROM Employees WHERE salary >= 500000; |