SQLの条件指定についてまとめてます。
SQLの条件指定はWHERE句に記述
SQLの条件指定は、WHERE句に記述します。省略した場合は、無条件でSQLを実行します。
WHERE句の構文
WHERE以下に、=(等号)、<>(不等号)、!=(一致しない)などの演算子や、andやor、notなどの論理演算子などを使って条件指定が可能です。
以下の例は、employees(社員)テーブルから、emp_no(社員番号)が10001のデータを取得するSQLです。
mysql> SELECT * FROM employees WHERE emp_no = '10001'; +--------+------------+------------+-----------+--------+------------+ | emp_no | birth_date | first_name | last_name | gender | hire_date | +--------+------------+------------+-----------+--------+------------+ | 10001 | 1953-09-02 | Georgi | Facello | M | 1986-06-26 | +--------+------------+------------+-----------+--------+------------+
【関連記事】
▶SQL where句のサンプルコード集 ワイルドカードやサブクエリを使った複雑な条件指定
複数の検索条件を指定するには、and、or演算子を組み合わせる
複数の条件を指定するには、andやorなどの論理演算子を使って条件式を接続します。
以下の例は、employees(社員)テーブルから、first_name(名前)がGeorgiまたはMaryのデータを取得する条件を記述しています。
mysql> select emp_no, first_name, last_name from employees where first_name='Georgi' or first_name='Mary'; --------+------------+-------------+ | emp_no | first_name | last_name | +--------+------------+-------------+ | 10001 | Georgi | Facello | | 10011 | Mary | Sluis | | 10532 | Mary | Wossner | | 10909 | Georgi | Atchley | | 11029 | Georgi | Itzfeldt | | 11430 | Georgi | Klassen | : :
【関連記事】
▶SQLのor演算子は条件を論理和で接続 inや行コンストラクタで置換が可能
andも同様に条件式を接続可能でs。
mysql> select * from employees where first_name = 'Georgi' and hire_date < '1986-06-26'; +--------+------------+------------+-------------+--------+------------+ | emp_no | birth_date | first_name | last_name | gender | hire_date | +--------+------------+------------+-------------+--------+------------+ | 10909 | 1954-11-11 | Georgi | Atchley | M | 1985-04-21 | | 12157 | 1960-03-30 | Georgi | Barinka | M | 1985-06-04 | | 16672 | 1955-04-25 | Georgi | Peris | M | 1986-03-13 | | 38079 | 1964-12-05 | Georgi | Constantine | M | 1985-08-26 | : :
【関連記事】
▶SQL andのサンプルSQL 複数条件の記述例と、優先順位
複雑なand、or条件はinで置き換えるとシンプルになるケースがある
and、orを使った条件式はカッコも組み合わせて優先順位を指定しながら指定が可能です。しかし、条件が複雑になると直感的に理解しにくく、潜在的なバグの原因になったりするんですよね。
そんな場合は、inで置き換えることで可読性が高いコードに置き替えられるケースがあります。
下記の2つのクエリは、全く同じ条件を指定しています。
mysql> select * from employees where first_name = 'Georgi' and last_name 'Peris' or first_name = 'Mary' and last_name '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 | +--------+------------+------------+-----------+--------+------------+ 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句に記述する
- WHERE句の条件は、andやor、notなどの論理演算子で接続し複数条件の記述ができる
- 複雑なand、orの条件はinで置き替えて可読性を高められるケースあり