SELECT (SQL)

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句: 抽出する行数を制限します。(MySQL,PostgreSQLなど一部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文を理解する上で役立つことを願っています。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。