MySQL WHERE 句: AND、OR、IN、NOT IN クエリの例
⚡ スマートサマリー
MySQL WHERE句は、結果セットに到達する前に行をフィルタリングし、SELECT、UPDATE、DELETE文に正確な条件を適用します。AND、OR、IN、NOT IN、および比較演算子を理解することで、初心者でもクエリに必要なレコードを正確に取得できます。

WHERE句とは何ですか MySQL?
WHERE句 in MySQL 指定された SQL ステートメントによって影響を受けるデータまたは行の正確な条件を指定するために使用されるキーワードです。WHERE 句は、INSERT、UPDATE、SELECT、DELETE などの SQL ステートメントで使用して、レコードをフィルター処理し、データに対してさまざまな操作を実行できます。
データをクエリする方法を検討しました。 データベース 前のチュートリアルで SELECT ステートメントを使用します。 SELECT ステートメントは、クエリされたデータベース テーブルからすべての結果を返しました。
しかし、クエリ結果を特定の条件に制限したい場合もあります。SQL の WHERE 句はこのような状況で役立ち、 削除または更新クエリ SELECTクエリの場合と同様です。
WHERE 句の構文
WHERE句の基本的な構文は以下のとおりです。
SELECT * FROM tableName WHERE condition;
Pr_media
- 「SELECT * FROM テーブル名」 標準です SELECTステートメント
- "どこ" は結果セットを制限するキーワードであり、 "状態" 結果に適用されるフィルターです。フィルターは、範囲、単一の値、またはサブクエリを指定できます。
会員番号1の会員の詳細情報(会員テーブルから取得)を取得したいとします。以下のスクリプトはそれを実現します。
SELECT * FROM `members` WHERE `membership_number` = 1;
このスクリプトを実行すると MySQL 作業台 「myflixdb」で以下の結果が得られます。
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
単一の条件では不十分な場合がほとんどです。以下のセクションでは、WHERE と 論理演算子.
– と組み合わせた WHERE 句 そして ロジカル Operaタ
AND論理演算子を使用すると、指定されたすべての条件が満たされた場合にのみ行が返されます。
2008年に公開されたカテゴリー2の映画をすべて取得したいとします。以下のスクリプトでそれが可能です。
SELECT * FROM `movies` WHERE `category_id` = 2 AND `year_released` = 2008;
上記のスクリプトを「myflixdb」に対して実行すると、次の結果が得られます。
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
AND演算子は結果セットを絞り込みます。OR演算子は結果セットを広げます。
– と組み合わせた WHERE 句 OR ロジカル Operaタ
OR演算子を使用すると、指定された条件のいずれかが満たされた場合に、行が返されます。
以下のスクリプトは、カテゴリ1またはカテゴリ2のいずれかに属するすべての映画を取得します。
SELECT * FROM `movies` WHERE `category_id` = 1 OR `category_id` = 2;
結果セットを以下に示します。
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 1 | Pirates of the Caribean 4 | Rob Marshall | 2011 | 1 |
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
OR条件を複数連結すると、コードが読みにくくなります。INキーワードを使うことで、この問題を解決できます。
– と組み合わせた WHERE 句 IN キーワード
WHERE句をINキーワードと併用すると、指定されたリストに一致する値を持つ行のみが対象となります。INを使用することで、通常であれば記述する必要のあるOR句の数を減らすことができます。
以下 MySQL WHERE IN クエリは、membership_number が 1、2、または 3 のいずれかである行を返します。
SELECT * FROM `members` WHERE `membership_number` IN (1,2,3);
結果セットを以下に示します。
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | rm@tstreet.com |
NOT INは逆のフィルター処理を実行します。
– と組み合わせた WHERE 句 ありませんで キーワード
NOT INキーワードを使用すると、WHERE句は指定されたリストに一致する値を持つすべての行を除外します。
以下のクエリは、membership_numberが1、2、または3ではない行を取得します。
SELECT * FROM `members` WHERE `membership_number` NOT IN (1,2,3);
結果セットを以下に示します。
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
WHERE句は、比較演算子を使用して、値のサイズと等価性に基づいて値をフィルタリングします。
– と組み合わせた WHERE 句 比較 Operaトー
WHERE句では、より小さい(<)、等しい(=)、より大きい(>)、等しくない(<>)の比較演算子をすべて使用できます。
= に等しい
次のスクリプトは、等しい比較演算子を使用して、メンバー テーブルからすべての女性メンバーを取得します。
SELECT * FROM `members` WHERE `gender` = 'Female';
結果セットを以下に示します。
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
> 越える
次のスクリプトは、支払いテーブルから 2,000 を超えるすべての支払いを取得します。
SELECT * FROM `payments` WHERE `amount_paid` > 2000;
結果セットを以下に示します。
| payment_id | membership_number | payment_date | description | amount_paid | external_reference_number |
|---|---|---|---|---|---|
| 1 | 1 | 23-07-2012 | Movie rental payment | 2500 | 11 |
| 3 | 3 | 30-07-2012 | Movie rental payment | 6000 | NULL |
<> 等しくない
次のスクリプトは、カテゴリ ID が 1 ではないすべてのムービーを取得します。
SELECT * FROM `movies` WHERE `category_id` <> 1;
結果セットを以下に示します。
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
| 5 | Daddy's Little Girls | NULL | 2007 | 8 |
| 6 | Angels and Demons | NULL | 2007 | 6 |
| 7 | Davinci Code | NULL | 2007 | 6 |
| 9 | Honey mooners | John Schultz | 2005 | 8 |
クイックリファレンス:WHERE句 Operaトー
WHERE と最もよく組み合わせられる演算子を以下にまとめます。完全な定義は、 MySQL オペレーターリファレンス.
| Operator | 意味 | 例となる条件 |
|---|---|---|
| = | に等しい | `gender` = '女性' |
| <> | 等しくない | `category_id` <> 1 |
| > / | より大きい/より小さい | `amount_paid` > 2000 |
| および/または | すべての基準/いずれかの基準 | `category_id` = 2 かつ `year_released` = 2008 |
| 含まれる/含まれない | リストに一致する/除外する | `membership_number` IN (1,2,3) |
| NULLである/NULLではない | 欠損値の検定 | `postal_address` が NULL です |
⚠️注意: NULL は、= や <> とは一致しません。列に値が格納されない可能性がある場合は、IS NULL または IS NOT NULL を使用してください。
脳トレ:返却が遅れた映画を探す
2012年06月25日の締め切り日までに返却されなかったレンタル映画を取得したいとします。WHERE句と小なり演算子、AND演算子を組み合わせることで、それが可能になります。
SELECT * FROM `movierentals` WHERE `return_date` < '2012-06-25' AND movie_returned = 0;
上記のスクリプトを実行すると、 MySQL ワークベンチでは次の結果が得られます。
| reference_number | transaction_date | return_date | membership_number | movie_id | movie_returned |
|---|---|---|---|---|---|
| 14 | 21-06-2012 | 24-06-2012 | 2 | 2 | 0 |

