【SQL】よく使う基本コマンド・キーワード25選!意味と役割を簡単解説 + 実践例

Linux

データベースから情報を取得したり、データを整理・分析したりするために不可欠な言語、それがSQL(Structured Query Language)です。Web開発、データ分析、インフラ管理など、ITの様々な分野で活用されています。

SQLを使いこなす第一歩は、基本的なコマンド(キーワードや句)の意味と役割を理解することです。今回は、データベース操作で頻繁に使われる重要なSQLキーワードをピックアップし、それぞれの役割を分かりやすく解説します。さらに、これらのキーワードをどのように組み合わせて使うのか、具体的な実践例もご紹介します。SQLを学び始めた方や、基本を再確認したい方のためのリファレンスとしてご活用ください。

データ取得の基本

まずは、データベースから情報を取得(検索)するための最も基本的な要素です。

  • SELECT: データベースから取得したいデータ(列)を指定します。SELECT * はすべての列を選択することを意味します。
  • FROM: データを取得する対象のテーブルを指定します。
  • WHERE: テーブルから取得する行を特定の条件で絞り込みます(フィルタリング)。
  • AS: 取得結果の列名やテーブル名に別名(エイリアス)を付けます。これにより、出力の可読性を高めたり、複雑なクエリを簡潔にしたりできます。
  • ORDER BY: 取得した結果セットを、指定した列の値に基づいて並べ替えます(ソート)。昇順(ASC)または降順(DESC)を指定できます。
  • LIMIT: 取得する行数を制限します。大量のデータから一部だけを取得したい場合に便利です。(データベース製品によっては TOP など異なる構文の場合もあります)

テーブルの結合

リレーショナルデータベースの強力な機能の一つが、複数のテーブルを関連付けて情報を取得することです。

  • JOIN: 2つ以上のテーブルを、共通の列(キー)に基づいて結合します。INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN など、様々な結合方法があります。

条件の組み合わせと比較

WHERE句などで、より複雑な条件を指定するために使います。

  • AND: 複数の条件を組み合わせ、その全てが真(true)である場合にのみ行を取得します。
  • OR: 複数の条件を組み合わせ、そのうち少なくとも一つが真(true)である場合に行を取得します。
  • IN: WHERE句などで、列の値が指定した複数の値のいずれかに一致するかどうかをチェックします。WHERE column_name IN (value1, value2, ...) のように使います。
  • IS NULL: 列の値がNULL(空、値が存在しない)かどうかをチェックします。IS NOT NULL でNULLでないことをチェックします。
  • LIKE: WHERE句などで、指定したパターンに文字列が一致するかどうかを検索します。%(任意の0文字以上の文字列)や _(任意の一文字)といったワイルドカードと組み合わせて使います。

条件分岐

SQL文の中で、条件に応じた処理を行うために使います。

  • CASE: SQLステートメント内で条件に基づいたロジックを作成します。CASE WHEN condition THEN result ... ELSE default_result END のように記述し、IF-THEN-ELSEのような処理を実現します。

データの集計とグループ化

特定の条件でデータをまとめたり、集計したりする際に使用します。

  • GROUP BY: 指定した列の値が同じ行をグループ化し、集計関数(後述)などを適用して、グループごとの要約行を生成します。
  • HAVING: GROUP BY句でグループ化された結果に対して、さらに条件を指定して絞り込みます。WHERE句はグループ化前の行をフィルタリングするのに対し、HAVING句はグループ化後の結果をフィルタリングします。

集計関数

SELECT句や HAVING句などで、一連の値に対して計算を行い、単一の結果を返す関数です。GROUP BY と組み合わせて使われることが多いです。

  • COUNT: 条件に一致する行の数を返しますCOUNT(*) は全行数、COUNT(column_name) はその列でNULLでない値の数を返します。
  • SUM: 数値型の列の合計値を計算します。
  • AVG: 数値型の列の平均値を計算します。
  • MIN: 指定した列の最小値を返します
  • MAX: 指定した列の最大値を返します

データ定義

データベースの構造(テーブルなど)を定義・変更・削除するためのコマンドです。

  • CREATE: データベース内に新しいテーブル、ビュー、その他のオブジェクトを作成します。(CREATE TABLE, CREATE VIEW など)
  • ALTER TABLE: 既存のテーブルの構造(列の追加・削除・変更など)を修正します。
  • DROP: 既存のテーブルやその他のデータベースオブジェクトを削除します。(DROP TABLE, DROP VIEW など)

データ操作

テーブル内のデータを追加、変更、削除するためのコマンドです。

  • INSERT INTO: テーブルに新しい行(データ)を追加します。
  • UPDATE: テーブル内の既存の行のデータを修正します。
  • DELETE: テーブルから行を削除します。

トランザクション制御

一連のデータベース操作を一つの処理単位(トランザクション)として管理するためのコマンドです。データの整合性を保つために重要です。

  • COMMIT: トランザクション内で行われた変更を確定し、データベースに永続的に保存します。
  • ROLLBACK: トランザクション内で行われた変更を取り消し、トランザクション開始前の状態に戻します

SQLコマンドの組み合わせ実践例

ここでは、上記のキーワードを実際にどのように組み合わせて使うのか、いくつかの例を見ていきましょう。(テーブル名や列名は架空のものです)

例1:商品データの検索と絞り込み

目的: products テーブルから、カテゴリが ‘Electronics’ で、かつ価格 (price) が50,000円より高い商品を検索し、価格の高い順に最大5件まで、商品名 (product_name) と価格を表示する。

SELECT
    product_name,
    price
FROM
    products
WHERE
    category = 'Electronics' AND price > 50000
ORDER BY
    price DESC
LIMIT 5;
  • SELECT で表示する列を指定し、FROM で対象テーブルを指定します。
  • WHERE句で categoryprice の条件を AND で繋ぎ、両方を満たす行に絞り込みます。
  • ORDER BY price DESC で結果を価格の降順(高い順)に並べ替えます。
  • LIMIT 5 で最終的な結果を上位5行に制限します。

例2:ユーザーごとの注文回数を集計し、条件で絞り込む

目的: users テーブルと orders テーブルを結合し、各ユーザー (user_name) の注文回数をカウントし、注文回数が3回以上のユーザーとその注文回数を、回数が多い順に表示する。

SELECT
    U.user_name AS UserName,
    COUNT(O.order_id) AS OrderCount
FROM
    users U
JOIN
    orders O ON U.user_id = O.user_id
GROUP BY
    U.user_id, U.user_name -- ユーザー名を表示するため、GROUP BY に含める(DBによってはuser_idだけでも可)
HAVING
    COUNT(O.order_id) >= 3
ORDER BY
    OrderCount DESC;
  • SELECT でユーザー名と注文回数を表示します。可読性のため AS で別名を付けています。集計関数 COUNT で注文IDを数えています。
  • FROMJOINusers テーブル (別名 U) と orders テーブル (別名 O) を user_id で結合します。
  • GROUP BY でユーザーごとにグループ化します。
  • HAVING句で、グループ化された結果(ユーザーごとの注文回数)が3回以上という条件で絞り込みます。
  • ORDER BY OrderCount DESC で注文回数が多い順に並べ替えます。

例3:基本的なデータ操作(追加、更新、削除)

目的: users テーブルに新しいユーザーを追加し、その後そのユーザーの名前を更新し、最終的にそのユーザーを削除する一連の操作を行う。

-- 新しいユーザーを追加
INSERT INTO users (user_id, user_name, registration_date)
VALUES (101, 'Temporary User', '2025-04-06'); -- 例として現在の日付

-- ユーザーID 101 のユーザー名を更新
UPDATE users
SET user_name = 'Updated User Name'
WHERE user_id = 101;

-- ユーザーID 101 のユーザーを削除
DELETE FROM users
WHERE user_id = 101;
  • INSERT INTO ... VALUES で新しい行を追加します。列名と値の順序を対応させます。
  • UPDATE ... SET ... WHERE で特定の行(WHERE user_id = 101)の特定の列(user_name)の値を更新します。WHERE を省略するとテーブル全体の行が更新されてしまうため注意が必要です。
  • DELETE FROM ... WHERE で特定の行(WHERE user_id = 101)を削除します。WHERE を省略するとテーブル全体の行が削除されてしまうため注意が必要です。
  • (注意: これらの操作を実際に行う場合は、COMMITROLLBACK を使ったトランザクション管理を適切に行うことが推奨されます)

例4:条件に応じたラベル付け

目的: products テーブルの価格 (price) に応じて、高価格か標準価格かのラベル (PriceCategory) を付けた結果を表示する。

SELECT
    product_name,
    price,
    CASE
        WHEN price > 100000 THEN 'High Price'
        WHEN price > 30000 THEN 'Mid Price' -- 例として中価格帯も追加
        ELSE 'Standard Price'
    END AS PriceCategory
FROM
    products;
  • SELECT句の中で CASE式を使用しています。
  • WHEN price > 100000 THEN 'High Price' のように、条件 (WHEN) とその条件が真の場合の値 (THEN) を記述します。複数の WHEN を記述できます。
  • ELSE 'Standard Price' で、いずれの WHEN 条件にも一致しなかった場合のデフォルト値を指定します。
  • ENDCASE式を終了し、AS PriceCategory でこの結果列に別名を付けています。

まとめ

今回は、SQLでよく使われる基本的なコマンド・キーワードとその実践的な組み合わせ例をご紹介しました。

  • データ取得: SELECT, FROM, WHERE, JOIN, ORDER BY, LIMIT
  • 条件指定: AND, OR, IN, IS NULL, LIKE, CASE
  • 集計・グループ化: GROUP BY, HAVING, COUNT, SUM, AVG, MIN, MAX
  • データ定義: CREATE, ALTER TABLE, DROP
  • データ操作: INSERT INTO, UPDATE, DELETE
  • トランザクション: COMMIT, ROLLBACK

これらの要素を理解し、目的に応じて組み合わせることで、様々なデータベース操作が可能になります。最初は難しく感じるかもしれませんが、実際にSQLを書いて試してみることが、スキル習得の一番の近道です。

この記事が、あなたのSQL学習の助けとなれば幸いです。

最後までお読みいただき、ありがとうございました。

コメント

タイトルとURLをコピーしました