SQLで複数条件を指定する方法についてまとめています。
MySQLのサンプルデータベースEmployeesを使用しています。
SQLで複数条件を指定するには、where節でandやorを使って条件を記述
複数条件の指定は、条件をandやorで接続して記述しましょう。
以下のSQLは、emp_no(社員番号)10500以上、first_name(姓名の姓)がAから始まり、gender(性別)がM(男性)のデータを抽出します。
mysql> SELECT * FROM employees where emp_no > 10500 and first_name like 'A%' and gender = "M" limit 10; +--------+------------+------------+-------------+--------+------------+ | emp_no | birth_date | first_name | last_name | gender | hire_date | +--------+------------+------------+-------------+--------+------------+ | 10570 | 1958-10-30 | Alassane | Morrin | M | 1985-05-05 | | 10579 | 1958-07-17 | Aiman | Stentiford | M | 1985-09-01 | | 10592 | 1964-08-01 | Almudena | Alvarado | M | 1990-06-05 | | 10640 | 1958-11-09 | Anneke | Meszaros | M | 1992-12-04 | | 10674 | 1961-03-03 | Abdelaziz | Bisiani | M | 1988-09-16 | | 10700 | 1962-11-30 | Angel | Mondadori | M | 1987-04-02 | | 10708 | 1959-07-02 | Aral | Erman | M | 1996-05-18 | | 10714 | 1960-09-28 | Aran | Sadowsky | M | 1997-03-11 | | 10716 | 1963-10-08 | Aiman | Constantine | M | 1985-08-20 | | 10718 | 1955-12-19 | Adib | Rullman | M | 1988-07-21 | +--------+------------+------------+-------------+--------+------------+ 10 rows in set (0.03 sec)
複数条件は、orで接続することも可能です。
mysql> select * from employees where first_name = 'Georgi' or first_name = 'Mary' limit 10; +--------+------------+------------+-----------+--------+------------+ | emp_no | birth_date | first_name | last_name | gender | hire_date | +--------+------------+------------+-----------+--------+------------+ | 10011 | 1953-11-07 | Mary | Sluis | F | 1990-01-22 | | 10532 | 1959-08-31 | Mary | Wossner | F | 1986-05-18 | | 10909 | 1954-11-11 | Georgi | Atchley | M | 1985-04-21 | | 11029 | 1962-07-12 | Georgi | Itzfeldt | M | 1992-12-27 | | 11430 | 1957-01-23 | Georgi | Klassen | M | 1996-02-27 | | 11821 | 1954-10-18 | Mary | Piazza | F | 1995-12-13 | | 12157 | 1960-03-30 | Georgi | Barinka | M | 1985-06-04 | | 12334 | 1962-03-08 | Mary | Ertl | F | 1990-03-06 | | 13562 | 1960-02-15 | Mary | Cooley | M | 1986-02-24 | | 13881 | 1956-08-14 | Mary | Monarch | F | 1991-06-10 | +--------+------------+------------+-----------+--------+------------+
andとorを混在させて、複雑な条件を記述することも可能です。場合によっては、inを使って記述したほうが直感的にわかりやすく記述できます。
以下のSQLは、employees(社員)テーブルの、first_name(姓名の姓)、last_name(姓名の名)の組み合わせが「Georgi Peris」または、「Mary Sluis」のデータを抽出します。
mysql> select * from employees where (first_name, last_name) in (('Georgi','Peris'), ('Mary','Sluis')); +--------+------------+------------+-----------+--------+------------+ | emp_no | birth_date | first_name | last_name | gender | hire_date | +--------+------------+------------+-----------+--------+------------+ | 10011 | 1953-11-07 | Mary | Sluis | F | 1990-01-22 | | 16672 | 1955-04-25 | Georgi | Peris | M | 1986-03-13 | +--------+------------+------------+-----------+--------+------------+
【関連記事】
▶SQLでandとorを使った条件をinで置き換えるサンプルコード
まとめ
- SQLで複数条件を指定するには、where節でandとorを使って条件を記述
- andとorを混在させた複雑な条件の指定も可能
- 複数カラムの組み合わせ条件は、inを使ってわかりやすく記述することができる