SQL SELECT文詳解
SQLのSELECT文は、
データベースからデータを抽出するための基本的なデータ操作言語(DML)ステートメントです。テーブルの行と列を指定し、条件を付加することで、必要なデータだけを抽出できます。この記事では、SELECT文の構文、様々な関数の使い方、集合演算、副問合せ、そして具体的な使用例を解説します。
SELECT文の基本構文
SELECT文の基本的な構文は以下の通りです。
sql
SELECT 列名1, 列名2, ...
FROM テーブル名
WHERE 条件式
GROUP BY グループ化列
HAVING 集計条件
ORDER BY ソート列
LIMIT 行数
SELECT句: 抽出する列を指定します。``を指定すると、全ての列が抽出されます。
FROM句: データを抽出するテーブルを指定します。
WHERE句: 抽出するデータの条件を指定します。
GROUP BY句: データをグループ化します。
HAVING句: グループ化されたデータに対する条件を指定します。
ORDER BY句: 抽出されたデータをソートします。
LIMIT句: 抽出する行数を制限します。(My
SQL,Postgre
SQLなど一部DBMSのみ)
これらの句は、必要に応じて組み合わせて使用します。全ての句が必ずしも必要というわけではありません。例えば、全ての行を抽出したい場合は、WHERE句、GROUP BY句、HAVING句、ORDER BY句、LIMIT句を省略できます。
関数
SELECT文では、様々な関数を用いてデータの加工や集計を行うことができます。主な関数には以下の種類があります。
単一行関数
単一行関数は、1つの行に対して1つの値を返す関数です。
文字関数: 文字列を操作する関数です。`LOWER()`(小文字変換), `UPPER()`(大文字変換), `INITCAP()`(先頭大文字変換), `CONCAT()`(文字列結合), `SUBSTR()`(部分文字列抽出), `LENGTH()`(文字列長取得), `TRIM()`(空白削除), `REPLACE()`(文字列置換)などがあります。DBMSによって利用可能な関数が異なる場合があります。
数値関数: 数値を操作する関数です。`ROUND()`(四捨五入), `TRUNC()`(切り捨て), `MOD()`(剰余)などがあります。
日付関数: 日付を操作する関数です。DBMSによって関数の種類や使用方法が大きく異なります。
データ型変換関数: データ型を変換する関数です。DBMSによって利用可能な関数が異なります。
グループ関数
グループ関数は、複数の行をグループ化し、そのグループに対して1つの値を返す関数です。`AVG()`(平均値), `MAX()`(最大値), `MIN()`(最小値), `SUM()`(合計値), `COUNT()`(行数)などがあります。`COUNT()`はNULL値も含めた行数を返し、`COUNT(列名)`はNULL値を除外した行数を返します。`GROUP BY`句と併用して使用します。
集合演算
複数のSELECT文の結果を結合することができます。`UNION` (和集合), `UNION ALL` (重複ありの和集合), `INTERSECT` (積集合), `EXCEPT` / `MINUS` (差集合) などの演算子を使用します。使用する演算子やその動作はDBMSによって異なる場合があります。
副問合せ
SELECT文の中に別のSELECT文を埋め込むことができます。副問合せは、`FROM`句、`WHERE`句、`HAVING`句で使用できます。`IN`演算子や`EXISTS`演算子と組み合わせて使用することで、複雑な条件を表現できます。相関副問合せは、主問合せの行ごとに副問合せが実行されるため、パフォーマンスに影響することがあります。
JOIN句
複数のテーブルからデータを抽出する際に使用します。内部結合、外部結合など、様々な種類があります。内部結合には等価結合、非等価結合、自然結合などがあります。外部結合には、左側外部結合、右側外部結合、完全外部結合があります。JOIN句の使い方もDBMSによって異なる場合があります。
WHERE句
抽出するデータの条件を指定します。`=`(等号), `!=` (不等号), `>`(より大きい), `<`(より小さい), `>=`(以上), `<=`(以下), `LIKE`(部分一致), `BETWEEN`(範囲指定), `IN`(集合指定), `IS NULL`(NULL値チェック)などの演算子を使用できます。
ORDER BY句
抽出されたデータをソートします。列名と昇順(`ASC`)または降順(`DESC`)を指定します。NULL値の扱いはDBMSによって異なる場合があります。
GROUP BY句とHAVING句
`GROUP BY`句でデータをグループ化し、`HAVING`句でグループ化されたデータに対する条件を指定します。`HAVING`句ではグループ関数を使用できますが、`WHERE`句では使用できません。
サンプル
以下は、簡単なSELECT文の例です。
sql
SELECT
FROM products;
SELECT product_name, price
FROM products;
SELECT
FROM products
WHERE price > 1000;
SELECT category, COUNT() AS num_products
FROM products
GROUP BY category;
まとめ
SELECT文は、
データベース操作の基本であり、様々な関数や句を組み合わせることで、複雑なデータ抽出を行うことができます。しかし、DBMSによって構文や関数の種類、動作が異なる場合があるため、使用するDBMSのマニュアルを参照しながら利用する必要があります。この記事が、
SQLのSELECT文を理解する上で役立つことを願っています。