スポンサーリンク

【応用情報技術者試験】データベースを学ぼう!     ~第5章~SQL① 基本的なSELECT文

SQLと関係演算:抽出・結合・集計を整理 データベース

SELECT文は、表から必要な列を選び、条件に合う行を取り出すSQLです。この章では、取得する列・絞り込む行・表示順を分けて考え、DISTINCTとJOINまで確認します。例は学習用の架空データです。

同じ商品表で結果を追う

product_idnamecategoryprice
1ノート文具200
2ペン文具100
3マグ雑貨500
4ケース雑貨NULL

product_idは主キー、priceはNULLを許す数値列とします。SELECT * は全列、SELECT name, price は指定した2列を返します。

SELECT name, price
FROM products
WHERE price >= 200
ORDER BY price DESC, product_id ASC;

結果は「マグ・500」「ノート・200」の順です。WHEREで行を絞り、SELECTで必要な列を選び、ORDER BYで順序を指定します。priceがNULLの行は、この比較では条件が真にならないため残りません。

WHEREの条件を使い分ける

書き方意味
category = '文具'文字列は単一引用符で囲む
price BETWEEN 100 AND 200両端を含む範囲
category IN ('文具', '雑貨')列挙した値のいずれかに一致
name LIKE 'ノ%'「ノ」で始まる文字列。%は任意の長さ、_は1文字
price IS NULL値がNULLかを調べる

NULLは「0」や空文字と同じではありません。= NULLではなくIS NULLを使います。ANDはORより先に結び付くため、条件をまとめたい部分には括弧を付けましょう。文字列比較やLIKEの大文字・小文字の扱いはDBMSと照合順序にも依存します。

ORDER BYと件数制限の注意

ASCは昇順、DESCは降順です。ORDER BYがなければ結果の順序は保証されません。同じ価格の行も一定の順にしたいときは、主キーなどを追加の並べ替え条件にします。NULLが先か後かという既定値はDBMSにより異なります。

LIMITはPostgreSQLやMySQLなどで使う件数制限の構文です。他製品ではFETCH FIRSTやTOPなどを使う場合があります。LIMIT 10だけでは「価格上位10件」にはならず、目的のORDER BYも必要です。識別子の引用方法にも製品差があります。

集計問い合わせではORDER BY SUM(amount) DESCのように集計式で並べ替えることもできます。「ORDER BYに集計関数は使えない」とは覚えないでください。

DISTINCTは選んだ列の組で重複を除く

SELECT DISTINCT category
FROM products;

この例では文具・雑貨の2種類になります。DISTINCT category, priceなら、カテゴリーと価格の組合せで重複を判断します。NULL同士も重複除去では同じものとして扱います。COUNT(DISTINCT price)は、NULLを除いた異なる価格の数を数える点に注意します。

JOINは結合条件に合う行を組み合わせる

SELECT p.name, c.category_name
FROM products p
INNER JOIN categories c
  ON p.category_id = c.category_id;

この例は、productsにcategory_id列、categoriesにcategory_idとcategory_name列がある別の設計を想定しています。INNER JOINは一致する組、LEFT JOINは左側に対応先がない行も残します。右側に複数の一致行があれば結果は増えます。

カンマで表を列挙しWHEREで内部結合条件を書く形式も有効です。JOIN … ONは結合と絞り込みを読み分けやすくしますが、記法だけで速度の優劣は決まりません。外部結合ではONとWHEREに置く条件の違いにも注意します。

確認問題

priceがNULLの行を検索するとき、WHERE price = NULLでよいでしょうか?

解答・解説を見る

いいえ。WHERE price IS NULLを使います。通常の等号比較ではNULLを含む比較が真になりません。

SQLをnoteの例題で復習する

基礎を確認したら、無料noteのSELECT・JOIN・GROUP BY・サブクエリの解説で、条件の読み取りとSQLの組み立てを復習できます。

無料note:SQL頻出ポイントをまとめて学ぶ

資格・目的別のnote教材ナビから、ほかの分野も選べます。

参考資料

PostgreSQL:FROM・WHERE・GROUP BY・HAVING / ORDER BY / 副問い合わせの条件式

次の章:SQL② グループ集計・副問い合わせ

コメント