【SQL基礎】IN演算子による条件指定
本項では、IN演算子について説明していきます。
INの基本構文
IN演算子は、引数として渡した値のリストのいずれかと一致すればいいときに使用します。
リストとの比較なので、前回に説明したBETWEEN演算子と違い連続した値である必要はありません。
また、ここでは説明しませんが、後述します副問い合わせと組み合わせても使用できます。
構文は下記になります。
対象 IN (値1, 値2, 値3, … , 値n)
否定形の場合は下記になります。
対象 NOT IN (値1, 値2, 値3, … , 値n)
また、IN演算子は以下のように置き換えることもできます。
対象 = 値1 OR 対象 = 値2 OR 対象 = 値3 OR … OR 対象 = 値n
同じく、否定形の場合は下記になります。
対象 != 値1 OR 対象 != 値2 OR 対象 != 値3 OR … OR 対象 != 値n
補足として、MySQLではINに渡す値の数に制限はありませんが(SQL文自体のサイズ上限の影響は受ける)
ほかのDBでは、最大数が決まっているものがあるので大量な値を渡すときは注意が必要になります。
例えば、Oracleは1000個が最大です。
では、実際にやってみましょう。
使用するテーブルは引き続き下記になります。
まずは、IN演算子で住所が埼玉県と神奈川県の人のデータを抽出してみましょう。
SELECT * FROM teachers WHERE address IN ("埼玉県", "神奈川県");
住所が埼玉県と神奈川県の人のデータが抽出できました。
次に、NOTを付けて否定形でやってみます。
SELECT * FROM teachers WHERE address NOT IN ("埼玉県", "神奈川県");
住所が、埼玉県と神奈川県以外の人のデータが抽出できたことが確認できました
最後にNULLを渡すとどうなるか見てみましょう。
SELECT * FROM teachers WHERE age IN (25,NULL, 29);
25歳と29歳の人のデータが抽出されて、NULLの人のデータは抽出されませんでした。
このように、NULLの判定は、前々回にやった「IS NULL」「IS NOT NULL」でしか比較でないので注意しましょう。
今回の学習ポイント
・IN演算子は、引数で渡した値のいずれかと一致するかを比較できる。
・IN演算子ではNULLは比較できない。
練習問題
以下からダウンロード可能です。
また、ダウンロードしたら以下のようにしてworldcup2014データベースを作成し、インポートしてください。
※worldcup2014.zip解凍してできるworldcup2014.sqlファイルをCドライブ直下に配置した場合。 [sql] CREATE DATABASE worldcup2014;
use worldcup2014
source C:\worldcup2014.sql
[/sql]
2.IN演算子と算術演算子%(剰余)のみを使用して、身長(players.height)もしくは体重(players.weight)が偶数(値 % 2 = 0)の選手のデータのみ抽出してください。