コマンド道場
IN 述語難易度 ★★☆☆☆

文具と家電の商品を取り出す

分類(category)が「文具」または「家電」の商品を取り出してください。列は「商品名, 分類, 定価」の順、定価の高い順に並べ、同額のときは商品番号(shohin_id)の小さい順にしてください。

この書き方が使えない製品があります そのまま使える: PostgreSQL / MySQL / MariaDB / SQLite / SQL Server / Oracle Database

未確認: IBM Db2

製品ごとの対応表(実測)を見る

  • IN は OR の連なりと同じ意味です。値が増えても読みやすいのが利点です。
  • 文字列の比較で大文字小文字を区別するかは、製品と照合順序によって違います。英字の分類名を扱うときは注意してください。
● 起動中…

この問題で使えるテーブル(名前をタップすると入力できます)

10

NULL
🔑int不可
int不可
date不可
text不可
データを見る(先頭 5 行)
juchu_idkokyaku_idjuchu_onstatus
100112025-11-05done
100222025-11-18done
100312025-12-02done
100432025-12-09cancel
100542025-12-24done

17

NULL
🔑int不可
🔑int不可
int不可
int不可
numeric(10,0)不可
データを見る(先頭 5 行)
juchu_idgyo_noshohin_idsuryotanka
10011120180
10012230120
100214223800
100225118500
10031644200

5

NULL
🔑int不可
text不可
text
date不可
データを見る(先頭 5 行)
kokyaku_idkokyaku_nameprefcreated_on
1青葉工業東京都2024-05-10
2白樺物産大阪府2024-08-01
3黒松システム東京都2025-01-15
4赤坂商会NULL2025-03-20
5三田商事愛知県2025-06-01

7

NULL
🔑int不可
text不可
text不可
numeric(10,0)不可
データを見る(先頭 5 行)
shohin_idshohin_namecategoryprice
1ノート文具180
2ボールペン文具120
3付箋文具250
4デスクチェア家具24800
5書棚家具18500

解説

結論

WHERE category IN ('文具', '家電') と書きます。IN は「並べた値のどれかと等しい」という意味で、OR を連ねたものと同じ結果になります。

なぜ

条件に並べる値が 2 つのうちは OR でも大差ありませんが、5 つ 10 つと増えると OR は読みにくく、括弧の付け忘れ(AND と OR の優先順位の事故)も起きやすくなります。IN なら値の並びが 1 つの条件としてまとまるので、その事故が起きません。

なお IN の右側には副問い合わせも書けます(IN (SELECT ...))。そちらは「別の表にある値のどれかと一致する」という条件になり、使いどころが変わります。

よくある間違い

①IN の中をカンマではなく AND / OR でつなごうとする。②「〜以外」を書くつもりで NOT IN を使い、右側に NULL が混ざって 1 行も返らなくなる(NOT IN と NULL の関係は別トピックで扱います)。

根拠(一次情報)