IN の使い方
候補のどれかに一致する
書き方
列 IN (値, 値, …) 列 IN (SELECT …)
OR を並べる代わりに使えます。NOT IN は候補に NULL があると何も返らない点に注意。
よく使うオプション
| オプション | 意味 |
|---|---|
IN (値, 値, …) | 候補のどれかと等しい |
NOT IN (…) | 候補のどれとも等しくない |
IN (SELECT …) | 副問い合わせの結果を候補にする |
例
SELECT name FROM employees WHERE dept_id IN (1, 3);
部署 1 か 3 の社員を出します。dept_id = 1 OR dept_id = 3 と同じ意味です。
SELECT id, status FROM orders WHERE status IN ('new', 'paid', 'sent');状態が 3 つのどれかの注文を出します。OR を並べるより短く書けます。
SELECT name FROM customers WHERE id IN (SELECT customer_id FROM orders WHERE total >= 10000);
1 万円以上の注文をしたことのある客を出します。候補を別の問い合わせで作れます。
SELECT name FROM customers WHERE city NOT IN ('東京', '大阪');東京でも大阪でもない町の客を出します。
よくある間違い・注意
- NOT IN の候補に NULL が 1 つでもあると、1 行も返りません。副問い合わせで NULL が出そうなときは NOT EXISTS を使います。
- city が NULL の行は、IN にも NOT IN にも合いません。
実際に打って練習する
SQL コースの Lv10「候補から選ぶ IN」で覚えます。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。
Lv1〜3 は、登録不要・無料で遊べます(それより先はブロンズ以上のプランで遊べます)。