本記事の内容
PostgreSQLのSELECT文で使用する基本的な構文を紹介します。
その他の構文については別記事にて紹介予定です。
※本記事はPostgreSQL 13を参考に記載しています。
※本記事はSQLを学んだことある人向けに、SQLの基本構文の早見表としてまとめています。構文の詳細は記載しておりませんのでご了承ください。
テーブルのデータを取得する(SELECT, FROM)
1テーブルの全カラムを表示
SELECT *
FROM [テーブル名]
*は全カラム取得を意味します。
[テーブル名]は適宜置き換えてください。
1テーブルの指定したカラムのみ表示
SELECT [カラム名1], [カラム名2]
FROM [テーブル名]
複数テーブルのデータを取得
SELECT *
FROM [テーブル名1] AS A
INNER JOIN [テーブル名2] AS B ON A.[カラム名1] = B.[カラム名1]
使用したい結合方法によって、INNER
の部分をLEFT
やRIGHT
等に変更してください。
条件を指定してデータを取得する(WHERE)
条件1つ
SELECT *
FROM [テーブル名]
WHERE [カラム1] = [条件]
条件複数
条件を複数指定する場合は、AND
やOR
でWHERE句に追加します。
全ての条件を満たすデータを抽出する場合はAND演算子を、
どれか一つでも満たすデータを抽出する場合はOR演算子を使用します。
AND演算子とOR演算子を併用することは可能です。
ただし、誤った順番や記載方法で使用すると、想定通りの結果が得られないことがあるので注意してください。
SELECT *
FROM [テーブル名]
WHERE [カラム1] = [値1]
AND [カラム2] = [値2]
SELECT *
FROM [テーブル名]
WHERE [カラム1] = [値1]
OR [カラム2] = [値2]
条件記載パターン
WHERE句の[カラム1] = [値1]の部分を適宜求めたい条件に合わせて、下記に修正してください。
※条件の書き方はほんの一部を記載しております。
[カラム1] <> [値1] -- 否定
[カラム1] IN ([値1], [値2]) --指定した値を含む
[カラム1] NOT IN ([値1], [値2]) --指定した値を含まない
[カラム1] IS NULL -- NULL値のもの
[カラム1] IS NOT NULL -- NULLでないもの
グループ化してデータを取得する(GROUP BY, HAVING)
GROUP BY
GROUP BYを使用することで、FROM句で取得したテーブルのうち重複したデータをまとめたり、集約関数を使用することができます。
GROUP BYを使用した際にはSELECT句には集約関数内のカラムを除き、GROUP BY句で使用しているカラム以外のカラムを指定するとエラーが発生するので注意してください。
SELECT [カラム1], [カラム2]
FROM [テーブル名]
GROUP BY [カラム1], [カラム2]
[カラム1]、[カラム2]に紐づく[カラム3]の数を出力。
SELECT [カラム1], [カラム2], COUNT([カラム3])
FROM [テーブル名]
GROUP BY [カラム1], [カラム2]
HAVING
HAVINGでGROUP BYでまとめたデータに対して、絞り込みを行うことができます。
SELECT [カラム1], [カラム2]
FROM [テーブル名]
GROUP BY [カラム1], [カラム2]
HAVING SUM([カラム3]) > 10
※SUM(… > 10の部分は指定したい条件に合わせて適宜修正してください。
HAVINGとWHEREの違い
HAVINGとWHEREはデータを条件で絞り込むという点では、変わりはありません。
では、何が違うのかというと処理のタイミングです。WHEREはFROM句で取得したデータに絞り込みをするのに対し、HAVINGはGROUP BYでまとめたデータにて絞り込みを行います。どちらで条件を絞り込むかによって結果が代わることがあるので注意しましょう。
データ件数を指定して取得する(LIMIT)
LIMITの後に数値を設定することで、指定した件数にてデータを取得できます。(SQL ServerのTOPと同じですが、LIMITはSELECT句内ではなく最後に記載します。)
SELECT *
FROM [テーブル名]
LIMIT 100
上記の例では100件のデータを取得します。