SQLのNOT IN句とは?指定した複数の値に該当しないデータを取得するNOT IN句の使い方
NOT IN句は、指定した複数の値に該当しないデータを取得する際に使用する命令です。
本記事では、NOT IN句とは何か、また、NOT IN句の具体的な使い方、NOT IN句使用時の注意点について解説します。
1.NOT IN句とは
NOT IN句は、指定した複数の値に該当しないデータを取得する際に使用するクエリです。
IN句とNOT IN句どちらも、主に複数の条件を指定して検索を行う場合に使用するクエリですが、IN句が指定した複数の値に該当するデータを取得する際に使用するクエリであるのに対し、NOT IN句は指定した複数の値に該当しないデータを取得する際に使用するクエリとなります。
SQLで指定した複数の値に該当しないデータを取得する際、NOT IN句を使用せずにデータ抽出する場合、例えば以下の通りとなります。
例)ユーザー(user)テーブルの中から名前(name)が「山田」か「佐藤」を含まないデータを取得する場合
SELECT * FROM user WHERE NOT (name = ‛山田‛ OR name = ‛佐藤‛);
これでも対象のデータは抽出できますが、指定する要素数が増えるにつれ条件文が冗長化してしまいます。ここで複数の条件指定をより短い条件文でまとめて行うために用いるのがNOT IN句となります。
2.NOT IN句の使い方
それでは実際にNOT IN句を使ってみましょう。SQLで指定した複数の値に該当しないデータを取得する際、NOT IN句を使用してデータ抽出する場合、以下の通りとなります。
例)ユーザー(user)テーブルの中から名前(name)が「山田」か「佐藤」を含まないデータを取得する場合[NOT IN句を使用する場合]
SELECT * FROM user WHERE name NOT IN(‛山田‛, ‛佐藤‛);
上記の通り、NOT IN句を使用しない場合と比較すると、条件文が短くなっています。「“山田“, “佐藤“, “田中“…」と指定する要素数が増えるにつれ、NOT IN句を使用しない場合と比較した時の条件文の短さはより顕著になっていきます。
3.NOT IN句使用時の注意点
NOT IN句を使用する際、注意すべき点があります。
・指定した複数の値にnullが含まれる場合
例えば以下のようなクエリを実行したとします。
SELECT * FROM user WHERE name NOT IN(‛山田‛, ‛佐藤‛, null);
上記のクエリ実行結果として、nameカラムにおいて、「山田」と「佐藤」を含まない、また、nullではないデータが取得できそうに思えますが、実際の結果としては何も取得できません。NOT IN句で指定した値にnullが含まれる場合、何も取得できなくなるということを覚えておきましょう。
・NOT IN句使用時の処理速度について
もう一度NOT IN句を使用した場合のクエリ例を見てみましょう。
例)ユーザー(user)テーブルの中から名前(name)が「山田」か「佐藤」を含まないデータを取得する場合[NOT IN句を使用する場合]
SELECT * FROM user WHERE name NOT IN(‛山田‛, ‛佐藤‛);
上記の例では、「山田」と「佐藤」を含まないレコード全てを取得することが可能となります。ただし、膨大なレコード数を管理している状況下では、NOT IN句を用いた処理は重たくなってしまいます。これは内部でデータの全検索を行っているためです。
レコード数が多い中でNOT IN句を使用する際はこうした点に注意しましょう。
4.まとめ
以上、NOT IN句とは何か、また、NOT IN句の具体的な使い方、NOT IN句使用時の注意点について解説してきました。
指定した複数の値に該当しないデータを取得する際は是非使ってみてください。
コメント