sql >> データベース >  >> RDS >> Mysql

16の異なるクエリ例を使用したMySQLのWHERE条件

    この記事では、WHEREについて説明します。 句とMySQLでの使用方法。 SELECTの他に 、WHEREのスコープ 句にはUPDATEが含まれます およびDELETE ステートメント。 WHERE 句は、MySQLデータベースでの質の高い作業に不可欠です。そのため、現在の記事ではこの条項を扱い、その特徴的な機能について詳しく説明します。

    MySQLを扱う場合、ほとんどの場合、SELECTステートメントの条件節が必要です。このような句は選択基準を決定するため、必要なデータのみを取得します。

    MySQLのWHERE 句は、結果をフィルタリングするための最も便利な手段です。柔軟性があり、ユーザーはデータ選択のさまざまな条件を指定し、1つのステートメントで複数の条件を組み合わせることができます。日常の作業をさらに快適にするために、MySQLプロファイリングとクエリ最適化を利用することをお勧めします。

    コンテンツ

    • MySQLWHERE構文
    • MySQLでWHEREを使用する
    • 単一条件のクエリの例
    • 複数のWHERE条件
    • 場所と演算子
    • WHEREまたは演算子
    • OR条件でのANDの使用
    • オペレーター間の場所
    • WHERELIKE演算子
    • どこに似ていない例
    • WHEREIN演算子
    • 例ではない
    • WHEREISNULL演算子
    • WHERE ISNOTNULLの例
    • 存在しない場所
    • 存在する場所
    • 比較演算子でMySQLWHERE句を使用する
    • まとめ

    MySQLWHERE構文

    まず、WHEREの使用方法を詳しく見ていきましょう。 SELECTで 声明。基本的な構文は次のとおりです。

    SELECT column1, column2, ...
    FROM table_name
    WHERE condition;

    SELECT … FROM は、ターゲットとする列とテーブルを定義する標準ステートメントです。 WHERE キーワードは、データ選択基準を識別します。単一の値、値間の範囲、サブクエリ、および複数の条件が存在する可能性があります。

    クエリ条件を使用して作業を自動化します。ビジュアルの個別のタブでそれらを表示して視覚的に編集します MySQLクエリツール クエリを描画している場所。列の名前を入力したり、複雑なルールを覚えたりする必要はありません。リストから必要なデータを選択するだけで、結果を楽しむことができます。

    MySQLでのWHEREの使用

    SELECTを実行する場合、MySQLは次のように機能します。 WHEREを含むステートメント 条項:

    1. FROMを評価します ターゲットテーブルを識別する句。
    2. WHEREに進みます データ選択の基準を評価する句。
    3. SELECTを確認してください 取得する列を定義するステートメント。

    SELECT 多くの場合、ステートメントにはORDER BYが含まれます 結果を昇順または降順で並べ替える句。もしそうなら、MySQLは最終的にそれを評価します。

    MySQLの動作原理WHERE IFに似ています プログラミング言語の条件。提供する値をターゲットのMySQLテーブルの値と比較します。これらの値が一致すると、RDBMSはそれらのレコードをユーザーにフェッチします。

    WHEREの条件が 句はテキスト値であり、そのテキストを一重引用符で囲みます。ただし、数値に引用符は必要ありません。

    SELECT first_name, last_name, city 
    FROM Readers
    WHERE City = ‘Seattle’;
    
    SELECT * 
    FROM Readers
    WHERE CustomerID = 24;

    高度なMySQLフォーマッターを使用して、スクリプト機能をレベルアップします。これにより、コードを美化して、好きなように正確にコードを取得できます。

    それでは、WHEREの使用法を確認しましょう 句。それは多くの特定のケースを含みます。それらを探索する最良の方法は、実用的なMySQL WHEREを参照することです。 各シナリオの例。

    単一条件のクエリの例

    この句を使用する最も簡単なシナリオは、MySQL WHEREです。 データ選択のための単一の基準を持っています。ある会社が、カスタマーケア部門でサポートマネージャーとして働いている従業員のリストを取得したいとします。

    SELECT 
        last_name, 
        first_name, 
        job_title
    FROM
        employees
    WHERE
        jobtitle = 'Support';
    クエリは従業員からデータを取得します job_title の値に従って、レコードをテーブル化し、フィルタリングします。 桁。サポートマネージャーとして働くすべての従業員のすべての姓名のリストを返す必要があります。出力は以下のとおりです。

    last_name first_name job_title
    Fox メアリー サポート
    ジョン サポート
    ジョンソン スティーブ サポート
    ハドソン ダイアナ サポート
    ウィリアムズ ケイティ サポート
    ジェイク サポート

    :MySQL構文チェッカーを使用すると、コードを減らしてより多くのことを達成できます。 dbForge Studio for MySQLは、MySQLおよびMariaDBデータベースの開発、保守、および管理を容易にするために設計された機能豊富なIDEです。

    複数のWHERE条件

    上記の例は、MySQLのWHERE 句は、条件に一致するデータをもたらします。この場合、指定された役職を持つすべての従業員をフィルタリングしました。ただし、データを取得するには、多くの場合、いくつかの基準を設定する必要があります。それは実現可能です– MySQL WHEREを適用する必要があります 特定の演算子を使用– AND 演算子とOR オペレーター。

    どこと演算子

    前の例をもう少し複雑にしましょう。昨年採用されたサポート部門で働く従業員のリストが必要です。

    これを実現するために、2つの条件を設定し、それらをANDと統合します。 論理演算子:

    SELECT 
        last_name, 
        first_name, 
        job_title,
        hire_year
    FROM
        employees
    WHERE
        jobtitle = 'Support' AND 
        hire_year = 2021;

    出力:

    last_name first_name job_title hire_year
    Fox メアリー サポート 2021
    ジョン サポート 2021
    ジョンソン スティーブ サポート 2021

    コードの記述自体が、データベースの開発と管理に費やす合計時間の大部分を占めています。 dbForge Studio forMySQLに付属する洗練され最適化されたMySQLServerコードエディタを使用して、コーディング速度を2倍にします。

    WHEREOR演算子

    ORを使用する 論理演算子は、MySQL WHEREのいくつかの条件を処理するもう1つの方法です。 句。このクエリを送信すると、設定した基準に一致するデータが返されます。

    同社は、2つの都市からの常連客をチェックしたいと考えています。そのために、それらの都市を指定し、ORを使用します オペレーター。

    SELECT 
        lastName, 
        firstName, 
        city 
    FROM
        customers
    WHERE
        city = 'Seattle' OR 
        city = 'Bellevue';
    last_name first_name 都市
    アンダーソン メアリー シアトル
    ジョン シアトル
    トンプソン スティーブ ベルビュー
    スミス ダイアナ ベルビュー
    ウィリアムズ ケイティ シアトル
    ピーターズ ジェイク シアトル

    OR条件でのANDの使用

    MySQLでは、MySQLのWHERE AND ORを組み合わせることができます –両方の論理演算子を1つのステートメントに含めることができます。この場合、MySQLは一度に3つの条件をチェックします。

    たとえば、図書館は、2021年に図書館の常連の読者になった、または20冊以上の本を読んだベルビューに住む読者に関する情報を取得したいと考えています。

    この場合、MySQLのWHERE 文字列はより複雑になります。 ANDに合わせて整理するには &OR 条件については、括弧を使用して、MySQLがそれらを評価する方法を決定します。

    以下の例をご覧ください:

    SELECT *
    FROM readers
    WHERE (city = 'Bellevue' AND reg_year = '2020')
    OR (books_read > 20);

    出力:

    last_name first_name 都市 reg_year books_read
    アンダーソン メアリー シアトル 2021 25
    ジョーンズ クリス ベルビュー 2020 12
    トンプソン Lora シアトル 2020 35
    ファレル ブライアン ベルビュー 2021 48
    スミス ジェフ ベルビュー 2020 50
    ピーターズ アンナ ベルビュー 2020 10
    パターソン ジョン ベルビュー 2020 11

    この出力は、居住都市の状態+登録年に一致するいくつかの結果を示しています。また、20冊以上の本を読んだという2番目の条件に一致する結果も含まれています。

    オペレーター間の場所

    BETWEEN演算子を使用すると、より広い制限を設定できます。図書館が2019年、2020年、2021年に参加した読者のリストを取得したいとします。いくつかのクエリを送信したり、ANDを使用したりする代わりに、 演算子、WHEREの範囲を設定できます BETWEENを使用した条件 オペレーター。

    2019年から2022年の間に参加した読者のリストを取得するには、次のクエリを送信します。

    SELECT 
        last_Name, 
        first_Name, 
        reg_year
    FROM
        readers
    WHERE
        reg_year BETWEEN 2019 AND 2021
    ORDER BY reg_year;

    出力:

    last_name first_name reg_year
    アンダーソン メアリー 2019
    ジョーンズ クリス 2019
    トンプソン Lora 2019
    ファレル ブライアン 2019
    スミス ジェフ 2020
    ピーターズ アンナ 2020
    パターソン ジョン 2020
    ウィリアムズ マーク 2021
    Hiks アンドリュー 2021
    付与 バレンタイン 2021

    WHERELIKE演算子

    LIKE演算子を適用すると、WHERE句を使用して、特定のパターンを含む特定のレコードを選択できます。そのパターンを定義するために、パーセント記号(%)を使用して、任意の長さの1文字または複数の文字の文字列を置き換えます。

    MySQLの最も一般的なパターンSELECT WHERE LIKE 次のとおりです。

    WHERELIKE 'abc% ‘–「abc」で始まるすべての値を検索して返します

    WHERELIKE '%abc' –「abc」で終わるすべての値を検索して返します

    WHERELIKE '%abc%' –開始と終了の間の任意の場所に「abc」を持つ値を見つけて返します

    WHERE LIKEを見てみましょう 例。同社は、米国と英国から顧客のリストを取得したいと考えています。クエリは次のとおりです。

    SELECT ContactName, Country, City
    FROM Customers
    WHERE Country LIKE 'U%'
    ORDER BY ContactName;

    出力は次のとおりです。

    ContactName 都市
    ヘレンベネット 英国 カウズ
    Simon Crowther 英国 ロンドン
    ハリクマール 英国 ロンドン
    ハワードスナイダー 米国 Eugene
    Yoshi Latimer 米国 エルギン
    ジョンスティール 米国 ワラワラ
    Jaime Torres 米国 サンフランシスコ
    フランウィルソン 米国 ポートランド
    どこが好きではない例

    結果から一部のデータを除外する必要がある別のケースがあります。 MySQLのWHERE NOT LIKEを使用できます オペレーター。特定の文字を含まないデータを検索して返します。

    同社は、英国と米国を除くすべての国の顧客のリストを求めています。 WHERE NOT LIKEの構文 MySQLでは次のようになります:

    SELECT ContactName, Country, City
    FROM Customers
    WHERE Country NOT LIKE 'U%'
    ORDER BY Country;

    出力:

    JeanFresnière モントリオール コペンハーゲン ヘルシンキ
    ContactName 都市
    ローランドメンデル オーストリア グラーツ
    George Pipps オーストリア ザルツブルク
    キャサリンデューイ ベルギー ブリュッセル
    パスカルカートレイン ベルギー Charleroi
    エリザベスリンカーン カナダ ツァワッセン
    タンナムリヨシ カナダ バンクーバー
    カナダ
    Jytte Petersen デンマーク
    イプセン デンマーク オーフス
    Pirkko Koskitalo フィンランド オウル
    Matti Karttunen フィンランド
    アネットルーレット フランス トゥールーズ
    マリーベルトラン フランス パリ
    マリアアンダース ドイツ ベルリン
    ハンナムース ドイツ マンハイム
    どこで演算子

    INを使用する およびNOT IN キーワードは、行をフィルタリングし、厳密な基準に一致するデータの一部のみを取得するためのもう1つのオプションです。主な目的は、ORの数を減らすことです 1つのSELECTの句 声明。

    MySQL WHERE IN WHEREに指定した値を含む行にアピールします 調子。たとえば、ヨーロッパのいくつかの国に居住する顧客のリストを取得したいとします。 WHERE IN MySQLの構文は次のとおりです。

    SELECT ContactName, Country, City
    FROM Customers
    WHERE Country IN ('Belgium', 'France', 'Germany', 'UK')
    ORDER BY Country;

    検索条件を指定する値を括弧で囲んでいることに注意してください。テキスト値を操作する場合は、すべてを一重引用符で囲む必要があります。ただし、値と数値の場合は、一重引用符なしでリストします(例:(25、35、45))。

    上記のMySQLWHERE INの出力 SELECTの句 ステートメントは次のとおりです:

    MartineRancé Köln ミュンスター リタミュラー
    ContactName 都市
    キャサリンデューイ ベルギー ブリュッセル
    パスカルカートレイン ベルギー Charleroi
    FrédériqueCiteaux フランス ストラスブール
    ローレンスレビハンス フランス マルセイユ
    Janine Labrune フランス ナンテス
    フランス リール
    Alexander Feuer ドイツ ライプツィヒ
    Henriette Pfalzheim ドイツ
    ホルストクロス ドイツ Cunewalde
    Karin Josephs ドイツ
    ドイツ シュトゥットガルト
    トーマス・ハーディ 英国 ロンドン
    ビクトリアアシュワース 英国 ロンドン
    エリザベスブラウン 英国 マンチェスター
    アンデボン 英国 ロンドン
    例ではない場所

    反対のケースはMySQLWHERE NOT IN 句。これは、クエリが条件に指定された値を含む行を無視することを確認するために使用されます。上記の例では、ヨーロッパの4か国からの顧客をリクエストしました。 MySQLのWHERE NOT IN SELECT 同じリクエストをクエリすると、前に定義した4つを除き、他の国に居住するすべての顧客が返されます。

    SELECT ContactName, Country, City
    FROM Customers
    WHERE Country NOT IN ('Belgium', 'France', 'Germany', 'UK')
    ORDER BY Country;

    出力:

    ブエノスアイレス SergioGutiérrez ブエノスアイレス モントリオール MartineRancé
    ContactName 都市
    パトリシオシンプソン アルゼンチン
    アルゼンチン
    ブライアンシトー カナダ
    ローラスミス カナダ トロント
    ジェーングリーン カナダ トロント
    カナダ バンクーバー
    Alexander Feuer カナダ オーフス
    Paolo Accorti イタリア ローマ
    Giovanni Rovelli イタリア トリノ
    アンナモローニ イタリア Pavia

    [NOT] EXISTSの使用をお勧めします [NOT] IN以上 EXISTS以降 論理演算子はINよりも高速に動作します 、サブクエリを使用してデータセットを比較する場合。さらに、NOT EXISTS ソースデータにNULLが含まれている場合、予期しない結果を回避できます 値。

    WHEREISNULL演算子

    値がNULLであるかどうかを確認するには かどうかにかかわらず、IS NULLを使用します オペレーター。次のステートメントは、WHEREを使用しています IS NULLを含む句 books_readに値のない行を取得する演算子 列:

    SELECT last_name, first_name, reg_year, books_read
    FROM readers
    WHERE books_read IS NULL;

    出力は次のようになります:

    last_name first_name reg_year books_read
    ジャネット オーバーアッカー 2020 NULL
    リディア スウェンソン 2017 NULL
    アルバート クレポー 2018 NULL
    アナスタシア ジョンソン 2021 NULL
    予定 スミス 2017 NULL

    WHERE ISNOTNULLの例

    前のコマンドとは異なり、WHERE IS NOT NULL 逆に、問題の列にある種の値を含む行のみが表示されます。次の例では、 books_readが存在する行のみを選択します。 列が空ではありません:

    SELECT last_name, first_name, reg_year, books_read
    FROM readers
    WHERE books_read IS NOT NULL;

    出力には、 books_readの値を含む行のみが表示されます。 列:

    last_name first_name reg_year books_read
    コーリー バスター 2021 8
    Maddison Winston 2022 3
    Isabella Garsia 2014 45
    Jeremy Koh 2022 1
    Aaron Peterson 2021 15

    WHERE EXISTS

    EXISTS operator checks if the subquery returns any value at all. Typically, this operator is used to indicate that at least one row in a table satisfies a certain condition.

    In the example below,

    SELECT last_name, first_name
    FROM customers
    WHERE EXISTS 
    (SELECT * FROM discounts WHERE customers.id = discounts.customer_id)

    WHERE NOT EXISTS

    However, the NOT EXISTS operator is there for us in case we want to make sure whether there are rows in the table that do not satisfy a certain condition. For example, let’s find all products from the Products table for which there were no orders in the Orders table:

    SELECT last_name, first_name
    FROM customers
    WHERE NOT EXISTS 
    (SELECT * FROM discounts WHERE customers.id = discounts.customer_id)

    There is a separate article in our blog for those willing to learn more about the difference between EXISTS and NOT EXISTS in SQL.

    Using MySQL WHERE clause with comparison operators

    As we know, the WHERE condition value can be any number, text, string, or subquery. Besides specifying the condition strictly, we can set a wider meaning for it by using the comparison operators. One example of a similar function is using the BETWEEN operator. Now, let us review other options to set the condition range.

    Operator Description Example
    = Equal to the value. It is applicable for almost any data type. SELECT * FROM VisitorsWHERE City =’London’;
    <> or != Not equal to. It excludes the rows matching the value from the results. SELECT * FROM CustomersWHERE Country=’Germany’ AND City !=’Berlin’;
    < Less than. Mostly applies to numbers and date/time. SELECT * FROM CustomersWHERE CustomerID <7;
    > Greater than. Works in the same way, for numeric values and date/time. SELECT * FROM CustomersWHERE CustomerID> 10;
    <= Less than or equal to. The results set includes the rows with the same values or less than the condition value. SELECT * FROM CustomersWHERE CustomerID <=5;
    >= Greater than or equal to. The result set includes rows having the same values exceeding the condition values. SELECT * FROM CustomersWHERE CustomerID>=55;

    In our example, we want to retrieve the list of customers with a customer ID lower than 90 who reside in the USA. The query is the following:

    SELECT CustomerID, ContactName, City, Country 
    FROM Customers
    WHERE CustomerID < 90 AND Country ='USA';

    The output is:

    CustomerID ContactName City Country
    65 Paula Wilson Albuquerque USA
    55 Rene Phillips Anchorage USA
    78 Liu Wong Butte USA
    36 Yoshi Latimer Elgin USA
    32 Howard Snyder Eugene USA
    82 Helvetius Nagy Kirkland USA
    48 Fran Wilson Portland USA
    77 Liz Nixon Portland USA
    45 Jaime Torres San Francisco USA
    89 Karl Jablonski Seattle USA
    55 Rene Phillips Anchorage USA

    Summary

    As you see, MySQL WHERE is among the most helpful clauses for all MySQL users. The variety of different logical operators lets you focus on the specific portion of data only, filter it correctly, and receive the results you need. Besides, modern professional tools for MySQL databases allow you to perform all tasks faster and easier. They take the burden of manual routines off your shoulders and make the performance much more stable and reliable. To sum up, working with a WHERE statement is not too complicated. However, it requires being familiar with the corresponding commands. The command-line tools are more oriented toward experienced tech-savvy users. On the contrary, dbForge Studio for MySQL can boast an intuitive graphical interface. The intelligent code completion feature will be of use while working with the WHERE clause, navigating the code, obtaining quick object information, and instantly performing syntax checks. Moreover, dbForge Query Builder will be of use to easily build WHERE clauses visually.

    Useful Links

    • Joins in MySQL
    • MySQL update query

    1. ツールボックスから取り出す非推奨の機能–パート1

    2. MySQLとPHPで使用するのに最適な照合は何ですか?

    3. PHPで2回の時間差を取得する

    4. Rails+Postgresで任意の時間間隔でレコードをカウントするための最良の方法