SQLにおけるSELECT文の完全かつ包括的な解説
SQL(Structured Query Language)は、データベース管理システムにおいてデータの操作を行うための標準的な言語です。その中でも、データを取得するために最も頻繁に使用される命令がSELECT
文です。この記事では、SELECT
文を用いてデータを取得する方法について、基本的な構文から高度な使用法まで詳細に解説します。

1. SELECT
文の基本構文
SELECT
文は、データベースから指定したデータを抽出するための命令です。最も基本的な構文は以下の通りです。
sqlSELECT 列名1, 列名2, ..., 列名N
FROM テーブル名;
この基本構文により、指定したテーブルから列を選択して、対応するデータを返すことができます。例えば、以下のSQLクエリは、employees
というテーブルからname
とsalary
の列を取得します。
sqlSELECT name, salary
FROM employees;
これにより、employees
テーブルに格納されたname
およびsalary
のデータがすべて表示されます。
2. SELECT *
の使用
SELECT
文で列名を指定する代わりに、アスタリスク(*
)を使用すると、テーブル内のすべての列を選択できます。
sqlSELECT *
FROM employees;
このクエリは、employees
テーブル内のすべての列を返しますが、必要な列だけを選択する方がパフォーマンスや可読性の観点からは推奨されます。
3. WHERE句によるフィルタリング
WHERE
句を使うことで、指定した条件に合致するデータのみを取得することができます。例えば、salary
が50000以上の社員のデータを取得する場合は次のように記述します。
sqlSELECT name, salary
FROM employees
WHERE salary >= 50000;
WHERE
句では、さまざまな比較演算子(=
, !=
, >
, <
, >=
, <=
など)や論理演算子(AND
, OR
, NOT
)を使用して複雑な条件を指定できます。
4. ORDER BY
での並び替え
データを取得した後、ORDER BY
句を使用して結果をソートすることができます。デフォルトでは昇順(ASC
)で並べ替えられますが、降順(DESC
)で並べ替えることも可能です。例えば、給与が高い順に社員を並べ替える場合、以下のように記述します。
sqlSELECT name, salary
FROM employees
ORDER BY salary DESC;
5. 複数列の並び替え
複数の列で並び替えを行いたい場合は、ORDER BY
句に複数の列を指定します。例えば、給与が同じ場合に名前のアルファベット順で並べ替えるには、次のように記述します。
sqlSELECT name, salary
FROM employees
ORDER BY salary DESC, name ASC;
6. LIMIT
で取得する行数を制限
取得する行数を制限したい場合は、LIMIT
句を使用します。例えば、最初の10行だけを取得したい場合、以下のように記述します。
sqlSELECT name, salary
FROM employees
LIMIT 10;
7. DISTINCT
で重複を除去
SELECT
文でデータを取得する際、同じ値が複数行にわたって表示されることがあります。DISTINCT
を使用すると、重複を排除した結果を取得することができます。例えば、異なる給与額を取得したい場合、次のように記述します。
sqlSELECT DISTINCT salary
FROM employees;
8. 集計関数の使用
SQLでは、集計関数を使用してデータを集約することができます。代表的な集計関数には、COUNT
, SUM
, AVG
, MAX
, MIN
などがあります。
-
COUNT: 行数をカウントします。
sqlSELECT COUNT(*) FROM employees;
-
SUM: 数値の合計を計算します。
sqlSELECT SUM(salary) FROM employees;
-
AVG: 数値の平均を計算します。
sqlSELECT AVG(salary) FROM employees;
-
MAX: 最大値を取得します。
sqlSELECT MAX(salary) FROM employees;
-
MIN: 最小値を取得します。
sqlSELECT MIN(salary) FROM employees;
9. GROUP BY
でデータをグループ化
GROUP BY
句を使用すると、指定した列を基にデータをグループ化することができます。集計関数と組み合わせて、グループごとの集計結果を得ることができます。例えば、部署ごとの平均給与を計算する場合は次のように記述します。
sqlSELECT department, AVG(salary)
FROM employees
GROUP BY department;
10. HAVING
句によるグループのフィルタリング
GROUP BY
でグループ化した後、HAVING
句を使ってグループごとの条件を指定することができます。例えば、平均給与が50000以上の部署のみを取得する場合は次のように記述します。
sqlSELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING AVG(salary) >= 50000;
11. JOIN
によるテーブルの結合
複数のテーブルからデータを取得する場合、JOIN
句を使用してテーブルを結合します。JOIN
には、INNER JOIN
, LEFT JOIN
, RIGHT JOIN
, FULL JOIN
などがあります。最も一般的なINNER JOIN
を使用した例を示します。
sqlSELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.department_id;
このクエリでは、employees
テーブルとdepartments
テーブルをdepartment_id
列で結合し、各社員の名前と所属部署名を取得しています。
12. サブクエリの使用
SQLでは、サブクエリを使ってクエリの中に別のクエリを埋め込むことができます。例えば、特定の社員が所属する部署の平均給与を取得する場合は、次のように記述します。
sqlSELECT name
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
このクエリでは、サブクエリを使って社員の平均給与を計算し、その給与よりも高い社員を選択しています。
結論
SELECT
文は、SQLにおける基本的かつ強力な命令であり、データベースから情報を取得する際に非常に重要な役割を果たします。基本的な使い方から高度なテクニックまで、この記事で紹介した内容を理解し、実践することで、SQLのスキルを深めることができるでしょう。データベース操作の効率化や高度なクエリ作成に役立つこと間違いありません。