【MySQL】WHERE - 対象レコード・データの条件設定(取得・更新・削除)
MySQLのWHEREについて解説します。
検証環境
WHERE
WHERE句は操作対象レコード(データ)の条件を設定する句です。
データの取得や更新、削除などの操作において、レコードの値で対象を絞り込むことができます。
基本構文
WHERE 条件
WHERE
に続いて条件
を記述します。
条件
は比較演算や論理演算で表すことが可能です。
サンプル
以下のテーブルに対する、取得・更新・削除とWHEREのサンプルを示します。
mysql> SELECT * FROM items;
+-----------+-------+-------+
| name | price | stock |
+-----------+-------+-------+
| Apple | 200 | 10 |
| Orange | 150 | 3 |
| Pineapple | 1100 | 3 |
| Grapes | 3500 | 1 |
+-----------+-------+-------+
4 rows in set (0.00 sec)
取得(SELECT WHERE
)
データを取得するSELECT
文はWHERE
句を組み合わせると、条件にマッチしたデータのみ取得します。
___ih_hl_start
mysql> SELECT * FROM items WHERE name = 'Apple';
___ih_hl_end
+-------+-------+-------+
| name | price | stock |
+-------+-------+-------+
| Apple | 200 | 10 |
+-------+-------+-------+
1 row in set (0.00 sec)
WHERE name = 'Apple'
の部分がWHERE句です。
name
カラムの値が'Apple'
のレコードのみ取得するよう条件を設定しています。
また、論理演算で複雑な条件を表現できます。
___ih_hl_start
mysql> SELECT * FROM items WHERE name = 'Apple' OR stock = 3;
___ih_hl_end
+-----------+-------+-------+
| name | price | stock |
+-----------+-------+-------+
| Apple | 200 | 10 |
| Orange | 150 | 3 |
| Pineapple | 1100 | 3 |
+-----------+-------+-------+
3 rows in set (0.00 sec)
この場合、OR演算子による論理和の条件となっており、“name
カラムの値が'Apple'
またはstock
カラムの値が3
”のレコードのみ取得するよう条件を設定しています。
更新(UPDATE SET WHERE
)
データを更新するUPDATE SET
文はWHERE
句を組み合わせると、条件にマッチしたデータのみ更新します。
___ih_hl_start
mysql> UPDATE items SET stock = 99 WHERE name = 'Apple';
___ih_hl_end
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> SELECT * FROM items;
+-----------+-------+-------+
| name | price | stock |
+-----------+-------+-------+
| Apple | 200 | 99 |
| Orange | 150 | 3 |
| Pineapple | 1100 | 3 |
| Grapes | 3500 | 1 |
+-----------+-------+-------+
4 rows in set (0.00 sec)
WHERE name = 'Apple'
の部分がWHERE句です。
name
カラムの値が'Apple'
のレコードのみ更新するよう条件を設定しています。
また、論理演算で複雑な条件を表現できます。
___ih_hl_start
mysql> UPDATE items SET stock = 99 WHERE name = 'Apple' OR name = 'Grapes';
___ih_hl_end
Query OK, 2 rows affected (0.01 sec)
Rows matched: 2 Changed: 2 Warnings: 0
mysql> SELECT * FROM items;
+-----------+-------+-------+
| name | price | stock |
+-----------+-------+-------+
| Apple | 200 | 99 |
| Orange | 150 | 3 |
| Pineapple | 1100 | 3 |
| Grapes | 3500 | 99 |
+-----------+-------+-------+
4 rows in set (0.00 sec)
この場合、OR演算子による論理和の条件となっており、“name
カラムの値が'Apple'
またはGrapes
”のレコードのみ更新するよう条件を設定しています。
削除(DELETE WHERE
)
レコードを削除するDELETE
文はWHERE
句を組み合わせると、条件にマッチしたレコードのみ削除します。
___ih_hl_start
mysql> DELETE FROM items WHERE name = 'Apple';
___ih_hl_end
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM items;
+-----------+-------+-------+
| name | price | stock |
+-----------+-------+-------+
| Orange | 150 | 3 |
| Pineapple | 1100 | 3 |
| Grapes | 3500 | 99 |
+-----------+-------+-------+
3 rows in set (0.00 sec)
WHERE name = 'Apple'
の部分がWHERE句です。
name
カラムの値が'Apple'
のレコードのみ削除するよう条件を設定しています。
また、論理演算で複雑な条件を表現できます。
___ih_hl_start
mysql> DELETE FROM items WHERE name = 'Apple' OR name = 'Grapes';
___ih_hl_end
Query OK, 2 rows affected (0.00 sec)
mysql> SELECT * FROM items;
+-----------+-------+-------+
| name | price | stock |
+-----------+-------+-------+
| Orange | 150 | 3 |
| Pineapple | 1100 | 3 |
+-----------+-------+-------+
2 rows in set (0.00 sec)
この場合、OR演算子による論理和の条件となっており、“name
カラムの値が'Apple'
またはGrapes
”のレコードのみ更新するよう条件を設定しています。