SQLのSELECT文とは?基本構文と使い方をPostgreSQLで解説
SQLのSELECT文は、テーブルからデータを検索するための基本命令です。SELECTで取得する列を選び、FROMで参照するテーブルを指定します。ここではPostgreSQL公式ドキュメントに沿って、列の選び方、別名、重複の除き方を解説します。
SELECTの基本構文
SELECT column_name, another_column
FROM table_name;SELECT文で列を指定する
SELECTの直後には、結果に表示したい列名をカンマ区切りで書きます。*を指定すると入力テーブルの全列を取得でき、動作確認や一時的な調査には便利です。実務では必要な列を明示したほうが結果の意味が伝わり、テーブルへの列追加の影響も受けにくくなります。
SELECT *
FROM employees;
SELECT name, salary
FROM employees;ASで列に別名を付ける
列や計算式の後ろにASを書くと、結果の列名を別名に変更できます。ASキーワードは省略でき、salary annual_salaryのように空白区切りで書いても同じ意味になりますが、読みやすさのためASを書くのが一般的です。空白や大文字小文字を区別した別名を使いたい場合は、"Annual Salary"のようにダブルクォートで囲みます。
SELECT
name,
salary,
salary * 12 AS annual_salary
FROM employees;SELECT DISTINCTで重複行を除く
SELECT DISTINCT departmentのように書くと、SELECTリスト全体の値が重複する行を1行にまとめられます。複数列を指定した場合は、その列の組み合わせで重複が判定されます。単に全列の重複を消すのではなく、何を一意にしたいかをSELECTリストで決めることが重要です。
SELECT DISTINCT department
FROM employees;SELECTでよくある間違い
同じSELECTリストの別名を、別の式から参照できない
ASで付けた別名は、SELECTリスト全体が確定した後に決まる名前です。そのため同じSELECT文の中で、別の式からその別名を参照することはできません。annual_salaryという別名を付けた式の結果を、同じSELECTリスト内の別の列でannual_salaryとして使おうとするとエラーになります。同じ計算式をもう一度書くか、サブクエリやCTEに分けて別名を確定させてから参照します。
-- エラーになる例
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公式ドキュメントを参照し、初めて学ぶ人向けに日本語で整理しています。
- PostgreSQL公式:選択リスト — 列の指定、列ラベル、DISTINCTの仕様