MySQLのWHEREの使い方!サンプルSQLを3パターン!

MySQL MySQL

MySQLのWHEREを使う方法について書いています。
その後に、よく使うかと思われるWHEREのサンプルSQLを3つ紹介しています。

MySQLでWHEREを使うと?

MySQLでWHEREを使うと、テーブルに入っているたくさんのデータに対して、レコードを条件で絞ることができます。
SELECT文と一緒にWHEREを使うことで、条件に合ったレコードを取得できます。

SELECT文を含めて、下記のようなときにWHEREを使います。

・SELECT:条件でデータを絞って取得する
・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を使って、条件をつける方法と簡単なサンプルを紹介しました。
記事の内容をまとめると、下記のようになります。

・WHEREを使うことで、条件をつけてデータを絞ることができる。
・SELECT/UPDATE/DELETEの時などに使うことができる。
・SELECTの時は「SELECT * FROM テーブル名 WHERE 条件」となった。
・UPDATEの時は「UPDATE テーブル名 SET カラム = 値… WHERE 条件」となった。
・DELETEの時は「DELETE FROM テーブル名 WHERE 条件」となった。

コメント

タイトルとURLをコピーしました