【SQL】NOT IN句の使用方法

【SQL】NOT IN句の使用方法

山下 雅也

山下 雅也

開発エンジニア/エンジニア歴2年7ヶ月

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句使用時の注意点について解説してきました。

指定した複数の値に該当しないデータを取得する際は是非使ってみてください。

私たちは、全てのエンジニアに市場価値を高め自身の望む理想のキャリアを歩んでいただきたいと考えています。もし、今あなたが転職を検討しているのであればこちらの記事をご一読ください。理想のキャリアを実現するためのヒントが見つかるはずです。

『技術力』と『人間力』を高め市場価値の高いエンジニアを目指しませんか?

私たちは「技術力」だけでなく「人間力」の向上をもって遙かに高い水準の成果を出し、関わる全ての人々に感動を与え続ける集団でありたいと考えています。

高い水準で仕事を進めていただくためにも、弊社では次のような環境を用意しています。

  • 定年までIT業界で働くためのスキル(技術力、人間力)が身につく支援
  • 「給与が上がらない」を解消する6ヶ月に1度の明確な人事評価制度
  • 平均残業時間17時間!毎週の稼動確認を徹底しているから実現できる働きやすい環境

現在、株式会社ボールドでは「キャリア採用」のエントリーを受付中です。

まずは以下のボタンより弊社の紹介をご覧いただき、あなたの望むキャリアビジョンをエントリーフォームより詳しくお聞かせください。

コメント

公式アカウントLINE限定!ボールドの内定確率が分かる無料診断実施中
公式アカウントLINE限定!
ボールドの内定確率が分かる無料診断実施中