SQL練習室
← SQLガイド

SQLのSELECT文とは?基本構文と使い方をPostgreSQLで解説

SQLのSELECT文は、テーブルからデータを検索するための基本命令です。SELECTで取得する列を選び、FROMで参照するテーブルを指定します。ここではPostgreSQL公式ドキュメントに沿って、列の選び方、別名、重複の除き方を解説します。

SELECTの基本構文

sql
SELECT column_name, another_column
FROM table_name;

SELECT文で列を指定する

SELECTの直後には、結果に表示したい列名をカンマ区切りで書きます。*を指定すると入力テーブルの全列を取得でき、動作確認や一時的な調査には便利です。実務では必要な列を明示したほうが結果の意味が伝わり、テーブルへの列追加の影響も受けにくくなります。

sql
SELECT *
FROM employees;

SELECT name, salary
FROM employees;

ASで列に別名を付ける

列や計算式の後ろにASを書くと、結果の列名を別名に変更できます。ASキーワードは省略でき、salary annual_salaryのように空白区切りで書いても同じ意味になりますが、読みやすさのためASを書くのが一般的です。空白や大文字小文字を区別した別名を使いたい場合は、"Annual Salary"のようにダブルクォートで囲みます。

sql
SELECT
  name,
  salary,
  salary * 12 AS annual_salary
FROM employees;

SELECT DISTINCTで重複行を除く

SELECT DISTINCT departmentのように書くと、SELECTリスト全体の値が重複する行を1行にまとめられます。複数列を指定した場合は、その列の組み合わせで重複が判定されます。単に全列の重複を消すのではなく、何を一意にしたいかをSELECTリストで決めることが重要です。

sql
SELECT DISTINCT department
FROM employees;

SELECTでよくある間違い

同じSELECTリストの別名を、別の式から参照できない

ASで付けた別名は、SELECTリスト全体が確定した後に決まる名前です。そのため同じSELECT文の中で、別の式からその別名を参照することはできません。annual_salaryという別名を付けた式の結果を、同じSELECTリスト内の別の列でannual_salaryとして使おうとするとエラーになります。同じ計算式をもう一度書くか、サブクエリやCTEに分けて別名を確定させてから参照します。

sql
-- エラーになる例
SELECT
  salary * 12 AS annual_salary,
  annual_salary + 100000 AS annual_salary_with_bonus
FROM employees;

-- 計算式を書き直す
SELECT
  salary * 12 AS annual_salary,
  salary * 12 + 100000 AS annual_salary_with_bonus
FROM employees;

実際に1問解いてみる

SELECT *で全列を取得する

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

テーブル

読み込み中…

実行結果

関連構文

SELECTについてよくある質問

SELECT * は使ってはいけませんか?
学習中の確認や一時的な調査には便利です。ただし本番のSQLでは必要な列を明示すると、意図が伝わりやすく、列追加による結果形式の変化も避けやすくなります。
SELECT文だけで計算できますか?
できます。PostgreSQLではSELECT 1 + 2; のようにFROMを省略し、式や関数の結果だけを取得することもできます。

参考文献

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