MySQLのWhere句で複数の条件を指定する
複数条件をつける場合は、”AND” か “OR” でつなげます。”AND”でつなげた場合は”かつ”の意味になり両方の条件に合致する必要があり、”OR”でつなげた場合は”または”の意味になりいずれかの条件に合致すればよいという意味になります。
年が32歳未満で、かつ、東京出身のメンバーを抽出する場合は以下のようにします。
1 2 3 4 5 6 7 |
mysql> SELECT * FROM member WHERE age<32 AND address="東京"; +----+--------+------+--------+---------+ | id | name | age | weight | address | +----+--------+------+--------+---------+ | 1 | tanaka | 30 | 57 | 東京 | +----+--------+------+--------+---------+ 1 row in set (0.00 sec) |
一方、ORを使った例として、体重が50キロ未満、または、茨城出身を抽出する場合は以下のようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
mysql> select * from member where weight < 50 OR address="茨城"; +----+----------+------+--------+---------+ | id | name | age | weight | address | +----+----------+------+--------+---------+ | 5 | kimura | 27 | 62 | 茨城 | | 7 | tadano | 26 | 43 | 千葉 | | 8 | murakami | 35 | 42 | 茨城 | | 9 | kikuchi | 32 | 41 | 茨城 | | 10 | suzuki | 31 | 51 | 茨城 | | 11 | saeki | 29 | 49 | 埼玉 | | 12 | ooyama | 29 | 48 | 埼玉 | | 13 | kamata | 22 | 47 | 埼玉 | +----+----------+------+--------+---------+ 8 rows in set (0.00 sec) |
条件の優先順位
条件が2つの場合は優先順位は関係ありませんが、3つ以上の条件がある場合優先順位によって
結果が変わる場合もあります。
たとえば、年齢が30以上、かつ、体重50以上、または、茨城出身とした場合、
捕らえ方が以下の二通りあります。
- 30歳以上、かつ、体重50以上のメンバー、と、茨城出身のメンバー
- 体重50以上、または、茨城出身のメンバーの中で、年齢が30以上のメンバー
以下のように丸括弧”()”をつけずに実行した場合 “AND” が優先されるため、この場合は
上記の1.に該当する結果となります。
1 |
mysql> select * from member where age >= 30 AND weight >= 50 OR address="茨城"; |
上記2.の結果が得たいときは、”OR”のほうを優先させる必要があるので、ORの方の式を”()”で
囲みます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
mysql> select * from member where age >= 30 AND (weight >= 50 OR address="茨城"); +----+----------+------+--------+---------+ | id | name | age | weight | address | +----+----------+------+--------+---------+ | 1 | tanaka | 30 | 57 | 東京 | | 2 | suzuki | 32 | 77 | 東京 | | 3 | nakamura | 33 | 52 | 群馬 | | 4 | miura | 31 | 67 | 埼玉 | | 8 | murakami | 35 | 42 | 茨城 | | 9 | kikuchi | 32 | 41 | 茨城 | | 10 | suzuki | 31 | 51 | 茨城 | | 14 | mizumoto | 35 | 55 | NULL | +----+----------+------+--------+---------+ |
/