SQLで「~以外」を指定するには、NOT(否定)とサブクエリの組み合わせ
  • facebookページ
  • twitterページ
  • 2020.09.28

    SQLで「~以外」を指定するには、NOT(否定)とサブクエリの組み合わせ

    SQLで「以外」の条件を指定する方法をまとめています。

    SQLで「以外」を指定するサンプルコード

    SQLで~以外を抽出するにはいくつか方法があります。NOT(否定)を組み合わせるものが多いので、コードを見て直感的に条件が読み取れないケースもあります。バグが発生しやすいので注意しましょう。

    指定条件以外を指定するには「<>」か「!=」

    単一の指定条件以外を指定するには、演算子に<>もしくは、!=を使用します。以下のサンプルは、departments(部署)テーブルから、dept_no(部署番号)がd009以外を抽出します。

    指定した条件以外を抽出するには、WHERE条件式にNOTで否定

    複数の条件に合致したデータ以外を抽出するには、ANDやORで接続した条件にNOTをつけます。以下は、deprtments(部署)テーブルから、dept_noがd005、またはdept_nameがSalesのデータ以外を抽出します。言い換えると、dept_noがd005以外でかつ、dept_nameがSales以外のデータを抽出します。

    【関連記事】
    【SQL】論理否定を知る。NOTの作用と使い方についてカンタン解説

    あいまい指定した条件以外を抽出するには、「NOT LIKE」

    あいまい検索したデータ以外を抽出するには、NOT LIKEを使用します。以下のサンプルでは、ワイルドカード指定で%ma%に合致するもの以外を抽出します。「Marketing」や「Human Resources」などdept_nameにmaを含むデータが除外されています。

    【関連記事】
    【SQL】LIKEの否定検索「NOT LIKE句」について、コードを交えながら具体的に解説。

    指定集団を除外して抽出するには、「NOT IN」

    複雑な条件を指定して、それ以外を抽出するにはNOT INとサブクエリを組み合わせます。NOT INとサブクエリの組み合わせは、クエリが遅くなりやすいので注意が必要です。

    【関連記事】
    SQL not in データの除外指定 NULLや複数カラムを扱う方法 

    存在しているもの以外を抽出するには、「NOT exists」

    2テーブルを比較して、片方にしかデータが存在しないものだけを抽出するには、NOT existsを使用します。以下のサンプルでは、employees(社員)テーブルから、対応するtitles(肩書)テーブルを参照し、肩書が「Staff」以外のデータを抽出します。

    【関連記事】
    SQL not exists サンプルコード 2テーブルの片方にしかないデータを抽出 

    まとめ

    ポテパンダの一言メモ
    • 「~以外」を指定するには、NOT IN、NOT LIKE、NOT existsなどがある
    • NOTを使うことで、条件が直感的にわかりにくくなり、バグにつながるケースもある。
    • サブクエリを利用する場合は、クエリが遅くなるケースがあるので注意


    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE