SQL where句のサンプルコード集 ワイルドカードやサブクエリを使った複雑な条件指定
  • facebookページ
  • twitterページ
  • 2019.10.20

    SQL where句のサンプルコード集 ワイルドカードやサブクエリを使った複雑な条件指定

    SQLで条件を指定するwhere句。当ページでは、where句のサンプルコードを紹介しています。

    以下、データベースとして、MySQLのサンプルデータベースEmployeesを使っています。SQL実行結果の表示にはphpMyAdminを使用しています。

    SQL Where句の基本的な使い方


    select文、update文、insert文、delete文などの条件指定に使われます。

    上記のSQLは、employees(社員テーブル)から、emp_no(社員番号)が10001のデータを取得します。

    演算子には等号(=)のほか、不等号(<、>)、否定(not、!=)が使用可能です。

    実行するとこうなります。


    where句に指定する条件は、andとorで接続して、複数の条件を指定することができます。

    SQL Where句のサンプルコード集

    inで、含む・含まないを指定するサンプルコード

    対象のカラムの内容がリストに含まれていたらデータを取得する場合は、in句を使います。

    「カラム名 in (リスト内容1,リスト内容2,リスト内容3…)」と指定します。

    上記のSQLは、employees(社員テーブル)から、emp_no(社員番号)が10001、10002、10005、10007のものを取得します。

    実行するとこうなります。


    in句の指定には複数カラムの指定が可能。また、リストの代わりにサブクエリを指定することも可能です。

    【関連記事】
    SQL in句のサンプルコード集 複数カラムの指定方法とは?

    また、指定したリストを含まないデータのみ取得する場合は、not inを指定します。

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

    likeで、あいまい検索をするサンプルコード

    ワイルドカードを指定して、あいまい検索をおこなうにはlikeを使います。

    「like ‘X%’」などと指定します。文字列中の「%」「_」(アンダースコア)はワイルドカード文字で、複数指定可能です。

    上記SQLは、employees(社員テーブル)から、first_name(姓名の名)がAで始まり、last_name(姓名の姓)がSで始まらないデータを取得します。

    実行するとこうなります。


    likeを多用すると、条件次第でクエリのレスポンスが遅くなる(スロークエリ)ケースがあります。explain(実行計画)をチェックして、スロークエリにならないようチェックしましょう。

    【関連記事】
    sql likeを使ったサンプル集 likeは本当に遅いのか?

    betweenで、範囲指定をするサンプルコード

    「カラム名 between A and B」で、指定カラムの内容がA~Bの範囲のデータが取得できます。

    上記のSQLは、employees(社員テーブル)から、emp_no(社員番号)が20000~20050のデータを取得します。

    実行するとこうなります。


    betweenには、日付や文字列も指定可能です。betweenは、以上・以下(境界値を含む)指定になりますが、not inや、!=を組み合わせることで、「未満」「より大きい」を指定することも可能です。

    【関連記事】
    SQL betweenで範囲指定するサンプルコード 速度アップにもつながる?

    日付の条件を指定するサンプルコード

    MySQLの場合、日付指定は’YYYY-MM-DD’形式で可能です。

    上記SQLは、employees(社員テーブル)から、hire_date(雇用日)が1990年1月1日~1991年1月1日のデータを取得します。

    実行結果はこうなります。


    「’1990-01-01′ interval 1 year」指定で、日付から1年後を指定することも可能。1 yearの部分を変えることで、秒、分、時、日、週、月指定も可能です。

    なお、DBMSによっては、date_formatなどの日付関数を条件に組み合わせると速度が著しく低下する可能性があります。条件指定にdate_formatなどの関数を使う場合は、explain(実行計画)をチェックしておきましょう。

    【関連記事】
    SQL betweenで範囲指定するサンプルコード 速度アップにもつながる?

    条件にサブクエリを使うサンプルコード

    条件指定にサブクエリ(副問い合わせ)を使うこともできます。サブクエリとは、条件値を指定する箇所を別のクエリで置き換えたもののことを言います。

    下記例では、birth_date=以下の「( select min(birth_date) from employees b)」がサブクエリとなります。

    上記SQLは、employees(社員テーブル)から、birth_date(誕生日)が最も古い(min)データのfirst_name(姓名の名)、last_name(姓名の姓)、birth_date(誕生日)を取得します。

    実行するとこうなります。

    SQL実行結果

    サブクエリを条件に組み込む場合、existsやnot existsを使うことも可能です。

    【関連記事】
    【使いこなせる?】SQLのEXISTS文の使い方を初心者向けに解説

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

    サブクエリは複雑化すると、クエリのレスポンスが落ちるケースがあります。explain(実行計画)でチェックして、データ件数が多いテーブルにフルスキャンが起こるようなら、インデックス利用が可能なSQLに置き換えを検討しましょう。

    NULL判定をするサンプルコード

    指定カラムがNULLのデータを抽出したい場合、カラム名=NULLという条件指定ではデータ抽出ができません。そこで、IS NULLを使って条件指定します。

    上記SQLは、salaries(年収テーブル)から、salary(年収)がNULLのデータを取得します。

    NULL以外を指定する場合は、「IS NOT NULL」を指定します。

    【関連記事】
    SQL isnullの使い方 NULL判定やNULL置換の方法 case式でも対応可能

    まとめ

    ポテパンダの一言メモ
    • 「含む・含まない」条件はin句を使う
    • ワイルドカードでのあいまい検索はlikeを使う
    • 範囲指定条件はbetweenを使う
    • 日付の条件指定に関数を使うと、速度低下の可能性あり
    • サブクエリを条件に使うときはinやexistsと組み合わせる
    • NULL判定にはIS NULLを使う

    ポテパンが提供するサービスについて

    本メディア「ポテパンスタイル」を運営する株式会社ポテパンは、エンジニアキャリア領域で複数サービスを提供しています。

    ポテパンフリーランス

    ポテパンフリーランス

    フリーランスエンジニアの方に高単価案件をご紹介しております。弊社ではフリーランス案件を常時300件ほど保有しており、その中からあなたに適した案件をご案内いたします。また、これから独立してフリーランスになる方の無料個別相談も承っております。フリーランスになった後の案件獲得方法やお金面(税金や保険など)についてお答えいたします!フリーエンジニアになりたい方向けのコンテンツも盛りだくさんです。

    ポテパンキャリア

    ポテパンキャリア

    エンジニア職専門の転職エージェントです。ポテパンキャリアでは、技術のわかるエージェントがあなたの転職をサポートします。エージェント自身がエンジニアなので、あなたと同じ目線で仕事内容や今後のキャリアについて一緒に考えることができます。年収800万円以上のハイスペック転職をご希望の方は「ポテパンプロフェッショナル」もご用意しておりますのでご利用下さいませ。

    ポテパンキャンプ

    ポテパンキャンプ

    ポテパンキャンプでは、RubyにてゼロからオリジナルのECサイトを作り上げてる3ヶ月間の実践型カリキュラムを提供しております。すでに本スクールの卒業生は、エンジニア職として様々な企業様に就職しております。なお、本スクールは受講料25万円と他社スクールに比べ格安となっており、またポテパンからご紹介させていただいた企業へ就職が決まった場合は、全額キャッシュバックいたします。



    株式会社ポテパンは、企業とエンジニアの最適なマッチングを追求しています。気になるサービスがあれば、ぜひ覗いてみてください!

    ポテクラバナー ポテプロバナー

    この記事をシェア

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









    ABOUT US

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

    READ MORE

    ポテパンおすすめ案件