SQL練習室
← SQLガイド

SQLのSELECT文とは?列の選び方を元の表と実行結果で解説

SELECTは、表から見たいデータを取り出すSQLです。たとえば社員の表から、名前だけを表示したり、名前と月給を並べたりできます。小さな表を使って、SQLを書くと何が表示されるのかを見ていきましょう。

例で使う表

employeesは社員の情報を保存した表(テーブル)です。横の1行が社員1人分、縦の列が名前や月給といった項目です。このページでは、次の3人をすべての例で使います。結果表の行の並びは一例です。SQLで並び順を指定しない場合、表示順が変わることがあります。

employees:社員の一覧(salaryは月給・円)
id(社員ID)name(名前)department(部署)salary(月給)
1青木営業300000
2北野開発400000
3中央営業350000

SELECTの基本構文

sql
SELECT name
FROM employees;

SELECTとFROMで社員名だけを取り出す

社員の名前だけを見たいときは、SELECTの後ろにname、FROMの後ろにemployeesと書きます。SELECTは「どの列を表示するか」、FROMは「どの表から取り出すか」です。元の表のname列が取り出され、3人の名前が表示されます。末尾のセミコロン(;)はSQL文の終わりを示します。

sql
SELECT name
FROM employees;
実行結果
name
青木
北野
中央

複数の列をカンマで並べる

名前と月給を一緒に見たいときは、name, salaryのように列名をカンマで区切ります。結果の列はSELECTに書いた順に並びます。この例では左が名前、右が月給です。社員は3人のままで、表示する列が1つから2つに増えます。

sql
SELECT name, salary
FROM employees;
実行結果
namesalary
青木300000
北野400000
中央350000

SELECT *で全列を表示する

列を1つずつ書く代わりに*を書くと、表の全列を表示できます。この表ではid・name・department・salaryの4列です。まず表にどんなデータがあるかを確認するときに使えます。

sql
SELECT *
FROM employees;
実行結果
idnamedepartmentsalary
1青木営業300000
2北野開発400000
3中央営業350000

ASで結果の列名を変える

salaryを「月給」と表示したいときは、salary AS "月給"と書きます。ASの後ろが結果の列名です。下の例では見出しだけが変わり、金額は変わりません。元のemployeesの列名もsalaryのままです。

sql
SELECT name, salary AS "月給"
FROM employees;
実行結果
name月給
青木300000
北野400000
中央350000

SELECTに計算式を書いて12か月分の給与を求める

SELECTには列名だけでなく計算式も書けます。salary * 12は月給を12倍する式です。ここでは毎月同じ月給とし、賞与を含まない12か月分の給与を求めます。青木さんは300000 × 12で3600000円です。ASで計算結果の列に名前を付けています。

sql
SELECT name, salary * 12 AS "12か月分の給与"
FROM employees;
実行結果
name12か月分の給与
青木3600000
北野4800000
中央4200000

部署だけを表示すると同じ値もそのまま出る

部署の一覧を作る前に、department列だけを取り出してみます。青木さんと中央さんはどちらも営業なので、営業が2回表示されます。通常のSELECTは、表示する値が同じでも社員それぞれの行を残します。

sql
SELECT department
FROM employees;
実行結果
department
営業
開発
営業

DISTINCTで部署の重複を除く

どんな部署があるかを知りたいときは、SELECTの直後にDISTINCTを付けます。前の結果に2回出ていた営業が1行にまとまり、営業と開発の2行になります。社員データを削除する処理ではなく、検索結果の重複を除く指定です。

sql
SELECT DISTINCT department
FROM employees;
実行結果
department
営業
開発

実際に1問解いてみる

SELECT *で全列を取得する

usersテーブルの全列を取得してください。

テーブル

読み込み中…

実行結果

関連構文

SELECTについてよくある質問

SELECT *と列名の指定はどう使い分けますか?
表の中身をひとまず確認するならSELECT *が便利です。使う列が決まっている処理では列名を書いておくと、表に列が増えても結果の列構成が変わりません。
DISTINCTで複数の列を指定するとどうなりますか?
指定した列の組み合わせが同じ行を1行にまとめます。たとえばdepartmentとnameを指定すると、この例は部署と名前の組み合わせがすべて違うため、3行のままです。

参考文献

内容はPostgreSQL公式ドキュメントを参照し、初めて学ぶ人向けに日本語で整理しています。