MySQLのWHEREを使う方法について書いています。
その後に、よく使うかと思われるWHEREのサンプルSQLを3つ紹介しています。
MySQLでWHEREを使うと?
MySQLでWHEREを使うと、テーブルに入っているたくさんのデータに対して、レコードを条件で絞ることができます。
SELECT文と一緒にWHEREを使うことで、条件に合ったレコードを取得できます。
SELECT文を含めて、下記のようなときにWHEREを使います。
・DELETE:条件で絞ったデータのみ削除する
・UPDATE:条件で絞ったデータのみ更新する
例えば、下記のようにSELECT文を書くことができます。
SELECT * FROM users WHERE name = 'taro';
こうすると、users
テーブルに対して、WHEREで条件をつけていることになります。
WHEREでつけている条件としては、name
カラムに対して「=」で「taro」と同じものを取得するようにしています。
これで、name
カラムにtaro
が指定されている1行のみが取得できます。
このようにデータが用意されているときです。
id | name | age | birthday |
---|---|---|---|
1 | taro | 25 | 1998-01-01 |
2 | jiro | 23 | 2000-01-01 |
3 | hanako | 30 | 1993-01-01 |
SQLを実行すると、下記のように1行取得できました。
mysql> SELECT * FROM users WHERE name = 'taro';
+----+------+------+------------+
| id | name | age | birthday |
+----+------+------+------------+
| 1 | taro | 25 | 1998-01-01 |
+----+------+------+------------+
1 row in set (0.00 sec)
このようにWHEREを使うことで、データ行を絞ることができます。
WHEREを使ったサンプル3パターン
WHEREを使ったサンプルSQLを書いてみました。
テーブルとデータは下記のものを使います。
-- usersテーブル作成のSQLです
CREATE TABLE users (
id BIGINT NOT NULL AUTO_INCREMENT,
name VARCHAR(128),
age SMALLINT,
birthday DATE,
PRIMARY KEY (id)
);
id | name | age | birthday |
---|---|---|---|
1 | taro | 25 | 1998-01-01 |
2 | jiro | 23 | 2000-01-01 |
3 | hanako | 30 | 1993-01-01 |
4 | yasuaki | 34 | 1989-01-01 |
5 | satomi | 30 | 1993-01-01 |
WHEREに指定して取得する
WHEREに条件をつけて、データを取得してみます。
条件に合うデータが複数行ある場合は、複数のデータが返ってきます。
例えば、年齢(age)カラムが30のデータを対象に取得してみます。
SELECT * FROM users WHERE age = 30;
これで、ageが30の行だけが返ってきます。
実際に実行すると、下記のように対象の2行が返ってきました。
mysql> SELECT * FROM users WHERE age = 30;
+----+--------+------+------------+
| id | name | age | birthday |
+----+--------+------+------------+
| 3 | hanako | 30 | 1993-01-01 |
| 5 | satomi | 30 | 1993-01-01 |
+----+--------+------+------------+
2 rows in set (0.00 sec)
ANDを使う
WHEREと一緒にANDを使うと、「〜かつ〜」といった感じで、条件を増やすことができます。
例えば、下記のようにすると、ageが「30歳」かつnameが「s」で始まる対象行が取得できます。
SELECT * FROM users WHERE age = 30 AND name LIKE 's%';
WHEREの後に、ageが「30」で、LIKEを使ってnameが「s」から始まるデータを取得しました。
実行すると、下記のように対象の1行が取得されます。
mysql> SELECT * FROM users WHERE age = 30 AND name LIKE 's%';
+----+--------+------+------------+
| id | name | age | birthday |
+----+--------+------+------------+
| 5 | satomi | 30 | 1993-01-01 |
+----+--------+------+------------+
1 row in set (0.01 sec)
ORを使う
WHEREと一緒にORを使うと、「〜または〜」のような感じで、条件をつけることができます。
例えば、下記のようにすると、「30歳」または「25歳」の人が取得できます。
SELECT * FROM users WHERE age = 30 OR age = 25;
WHEREの後に、ORを使って「30歳」または「25歳」という条件をつけました。
実行すると、下記のように対象のデータのみが取得できました。
mysql> SELECT * FROM users WHERE age = 30 OR age = 25;
+----+--------+------+------------+
| id | name | age | birthday |
+----+--------+------+------------+
| 1 | taro | 25 | 1998-01-01 |
| 3 | hanako | 30 | 1993-01-01 |
| 5 | satomi | 30 | 1993-01-01 |
+----+--------+------+------------+
3 rows in set (0.00 sec)
WHEREを指定して更新する
UPDATEと一緒にWHEREを使うと、更新するデータを絞ることができます。
例えば、下記のように名前が「yasuaki」のデータの年齢(age)を変えてみます。
UPDATE users SET age = 20 WHERE name = 'yasuaki';
WHEREの後に、nameに「yasuaki」を指定して、年齢(age)を20に設定しました。
実行すると、下記のように適用されます。
mysql> UPDATE users SET age = 20 WHERE name = 'yasuaki';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
データを取得すると、下記のように「yasuaki」の年齢(age)のみ20歳になりました!
mysql> SELECT * FROM users;
+----+---------+------+------------+
| id | name | age | birthday |
+----+---------+------+------------+
| 1 | taro | 25 | 1998-01-01 |
| 2 | jiro | 23 | 2000-01-01 |
| 3 | hanako | 30 | 1993-01-01 |
| 4 | yasuaki | 20 | 1989-01-01 |
| 5 | satomi | 30 | 1993-01-01 |
+----+---------+------+------------+
5 rows in set (0.00 sec)
WHEREを指定して削除する
DELETEと一緒にWHEREを使うと、削除するデータを絞ることができます。
例えば、下記のように名前が「yasuaki」のデータを削除してみます。
DELETE FROM users WHERE name = 'yasuaki';
WHEREの後にnameで「yasuaki」を指定して、削除するデータを絞っています。
実行すると、下記のように適用されました。
mysql> DELETE FROM users WHERE name = 'yasuaki';
Query OK, 1 row affected (0.01 sec)
データを取得すると、nameカラムが「yasuaki」のデータ行が消えたことが確認できました!
mysql> SELECT * FROM users;
+----+--------+------+------------+
| id | name | age | birthday |
+----+--------+------+------------+
| 1 | taro | 25 | 1998-01-01 |
| 2 | jiro | 23 | 2000-01-01 |
| 3 | hanako | 30 | 1993-01-01 |
| 5 | satomi | 30 | 1993-01-01 |
+----+--------+------+------------+
4 rows in set (0.00 sec)
MySQLのWHEREの使い方まとめ
今回はMySQLでWHEREを使って、条件をつける方法と簡単なサンプルを紹介しました。
記事の内容をまとめると、下記のようになります。
・SELECT/UPDATE/DELETEの時などに使うことができる。
・SELECTの時は「SELECT * FROM テーブル名 WHERE 条件」となった。
・UPDATEの時は「UPDATE テーブル名 SET カラム = 値… WHERE 条件」となった。
・DELETEの時は「DELETE FROM テーブル名 WHERE 条件」となった。
コメント