PostgreSQLでレコードを検索する
PostgreSQLでテーブルからレコードを抽出するときの,SQLの書き方です.
目次
- テーブルの全データを抽出する
- テーブルから一意なデータを抽出する
- テーブルから特定の列を抽出
- 条件をつけて絞り込む(WHERE句)
- 検索結果を並び替える(ORDER BY句)
- 条件分岐(CASE式)
- コメント
- 参考文献
テーブルの全データを抽出する
*
により全ての列を対象とします.
SELECT * FROM テーブル名; |
テーブルから一意なデータを抽出する
DISTINCT
キーワードを用います.
SELECT DISTINCT * FROM テーブル名; |
テーブルから特定の列を抽出
SELECT
句で列を指定します.
別名が不要であればAS 別名
は省略できます.
SELECT |
カラム名の代わりに定数を与えることもできます.
定数が文字列や日付の場合にはシングルクオーテーションで囲みます.
文字列定数はシングルクオーテーションで囲みますが,日本語で別名をつけるときはダブルクオーテーションで囲みます.
条件をつけて絞り込む(WHERE句)
FROM
句の直後に条件式をつなげて,レコードを絞り込みます.
SELECT |
算術演算子
加減乗除が行えますが,NULL
との演算結果はNULL
となります.
比較演算子
通常の比較演算子を使えます.
標準SQLでは等しくないことを表すのに<>
を使うとされています.(PostgreSQLで!=
は<>
に変換されて処理されます.)
NULL
値であるかどうかの判定はIS NULL
演算子やIS NOT NULL
演算子を使います.
例えば,あるカラムがNULL
値でないレコードだけ抽出したいのであれば,
WHERE カラム名 IS NOT NULL |
と書きます.
論理演算子
条件式の接続や否定はAND
・OR
・NOT
で行えます.
接続が連続する場合は括弧を使うべきですが,括弧がなかった場合,AND
演算子がOR
演算子より優先されます.
真理値についてSQLは3値論理になっており,「真」・「偽」に加えてNULL
による「不明」のケースが存在します.
真理表では「真となるか」が確定できるかどうかを見るます.
すなわち,「真かつ不明ならば不明」,「偽かつ不明ならば偽」,「真または不明ならば真」,「偽または不明ならば不明」です.
条件文により,SELECT
した結果は条件文が真となったものへと絞り込まれますが,真のケースでないものの中には偽のケースだけでなく,NULL
の影響を受けているケースがあるということに注意しなければなりません.
IN句
条件文で,1, 2, 3の中に含まれるなら,という書き方はIN
を使って
WHERE カラム IN (1, 2, 3) |
と書けます.
含まれない場合を条件にしたいならNOT IN
です.
特に,クエリの一部にクエリを埋め込んだサブクエリにすると,(つまり,
WHERE カラム IN サブクエリ |
という形にすると,)サブクエリにより得られたテーブルのカラムから条件を作ることができます.
検索結果を並び替える(ORDER BY句)
検索結果を並び替えるには,ORDER BY
句をSELECT
文の最後尾に配置します.
SELECT |
並べたカラムの順に優先されます.
デフォルトは昇順で,それを意味するASC
キーワードは省略可能です.
降順にするにはDESC
キーワードを用います.
絞り込みを行った後で並び替えが行われますから,ORDER BY
句ではカラムの別名を用いて指定することもできます.
SELECT
句に含まれていない列を指定することもできます.
NULL
を含むカラムがORDER BY
句で指定された場合,NULL
は最初か最後に集められます.
条件分岐(CASE式)
SELECT
句で条件分岐を行う場合,CASE
式を用います.
SELECT item_name, |
簡易的な構文として,
SELECT item_name, |
とも書けます.
コメント
別ファイルにSQLを書く場合などで,単行のコメントを書きたければ,--コメント
とします.
ブロックコメントは
/* |
です.
参考文献
SQLの方言に配慮しつつ,リレーショナルデータベースの操作を一から説明している入門書です.
- ミック (2016)「SQL」第2版,翔泳社.