SELECT
| 対応: | SQL-92(1992) |
|---|
テーブルから行・列を取得する最も基本的なSQL文です。データベースに対する問い合わせ(クエリ)の起点となります。
構文
指定した列を取得します。
SELECT 列名1, 列名2 FROM テーブル名;
すべての列を取得します。
SELECT * FROM テーブル名;
列に別名(エイリアス)を付けて取得します。
SELECT 列名 AS 別名 FROM テーブル名;
重複行を除外して取得します。
SELECT DISTINCT 列名 FROM テーブル名;
構文一覧
| 構文 | 概要 |
|---|---|
| SELECT 列名 | 指定した列のデータを取得します。複数列はカンマで区切ります。 |
| SELECT * | テーブルのすべての列を取得します。本番コードでは必要な列を明示的に指定することを推奨します。 |
| AS 別名 | 取得した列または式に任意の別名を付けます。結果セットの列ヘッダーに反映されます。 |
| DISTINCT | 重複する行を除外して一意な値のみを取得します。 |
サンプルコード
以下の『employees』テーブルを例に説明します。
社員テーブルから氏名と部署を取得します。
sample_select.sql
SELECT name, department FROM employees;
+----------+--------------------+ | name | department | +----------+--------------------+ | 桐生一馬 | 堂島組 | | 真島吾朗 | 真島組 | | 秋山駿 | スカイファイナンス | +----------+--------------------+ 3 rows in set
社員テーブルのすべての列を取得します。
sample_select.sql
SELECT * FROM employees;
+----+----------+--------------------+--------+ | id | name | department | salary | +----+----------+--------------------+--------+ | 1 | 桐生一馬 | 堂島組 | 300000 | | 2 | 真島吾朗 | 真島組 | 280000 | | 3 | 秋山駿 | スカイファイナンス | 320000 | +----+----------+--------------------+--------+ 3 rows in set
列に別名を付けて取得します。
sample_select.sql
SELECT name AS 氏名, salary AS 月給 FROM employees;
+----------+--------+ | 氏名 | 月給 | +----------+--------+ | 桐生一馬 | 300000 | | 真島吾朗 | 280000 | | 秋山駿 | 320000 | +----------+--------+ 3 rows in set
部署名の重複を除外して一覧を取得します。
sample_select.sql
SELECT DISTINCT department FROM employees;
+--------------------+ | department | +--------------------+ | 堂島組 | | 真島組 | | スカイファイナンス | +--------------------+ 3 rows in set
計算式にも別名を付けられます。
sample_select.sql
SELECT name, salary * 12 AS 年収 FROM employees;
+----------+---------+ | name | 年収 | +----------+---------+ | 桐生一馬 | 3600000 | | 真島吾朗 | 3360000 | | 秋山駿 | 3840000 | +----------+---------+ 3 rows in set
データベース別の書き方
『SELECT』『AS』『DISTINCT』の基本構文は主要なデータベースで共通して使用できます。
SELECT name AS 氏名, salary AS 月給 FROM employees; SELECT DISTINCT department FROM employees;
PostgreSQL では『DISTINCT ON (列名)』で、指定した列の値ごとに最初の1行だけを取得できます。
部署ごとに給与が最も高い社員を1人ずつ取得します。
SELECT DISTINCT ON (department) name, department, salary FROM employees ORDER BY department, salary DESC;
概要
『SELECT』はSQLの中で最も頻繁に使用される命令で、テーブルからデータを読み取ります。取得する列を明示的に指定することで、ネットワーク転送量を削減しパフォーマンスを向上させることができます。
『AS』による別名は日本語でも使用可能ですが、プログラムからカラム名で参照する場合はスペースを含む名前には注意が必要です。スペースを含む場合はバッククォート(MySQL)またはダブルクォート(標準SQL)で囲みます。
MySQL(バッククォート)
SELECT name AS `氏 名` FROM employees;
標準SQL / PostgreSQL(ダブルクォート)
SELECT name AS "氏 名" FROM employees;
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。