この記事では、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クエリツール クエリを描画している場所。列の名前を入力したり、複雑なルールを覚えたりする必要はありません。リストから必要なデータを選択するだけで、結果を楽しむことができます。
SELECT
を実行する場合、MySQLは次のように機能します。 WHERE
を含むステートメント 条項:
-
FROM
を評価します ターゲットテーブルを識別する句。 -
WHERE
に進みます データ選択の基準を評価する句。 -
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';
last_name | first_name | job_title |
Fox | メアリー | サポート |
黒 | ジョン | サポート |
ジョンソン | スティーブ | サポート |
ハドソン | ダイアナ | サポート |
ウィリアムズ | ケイティ | サポート |
緑 | ジェイク | サポート |
注 :MySQL構文チェッカーを使用すると、コードを減らしてより多くのことを達成できます。 dbForge Studio for MySQLは、MySQLおよびMariaDBデータベースの開発、保守、および管理を容易にするために設計された機能豊富なIDEです。
上記の例は、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
次のとおりです。
WHERE
値LIKE 'abc%
‘–「abc」で始まるすべての値を検索して返します
WHERE
値LIKE '%abc'
–「abc」で終わるすべての値を検索して返します
WHERE
値LIKE '%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;
出力:
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
の句 ステートメントは次のとおりです:
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;
出力:
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