Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLのand演算子についてまとめてます。

以下、サンプルデータベースとしてEmployeesを、MySQLのバージョンは8.0.18を前提としています。

SQLのandを使ったサンプルコード

employees(社員)テーブルをandを使って条件指定でselectしてみます。employeesテーブルの構造と、条件なしで10件抽出した結果は以下の通りです。

mysql> desc employees;
+------------+---------------+------+-----+---------+-------+
| Field      | Type          | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| emp_no     | int           | NO   | PRI | NULL    |       |
| birth_date | date          | NO   |     | NULL    |       |
| first_name | varchar(14)   | NO   |     | NULL    |       |
| last_name  | varchar(16)   | NO   |     | NULL    |       |
| gender     | enum('M','F') | NO   |     | NULL    |       |
| hire_date  | date          | NO   |     | NULL    |       |
+------------+---------------+------+-----+---------+-------+
6 rows in set (0.06 sec)

mysql> select * from employees limit 10;
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  10001 | 1953-09-02 | Georgi     | Facello   | M      | 1986-06-26 |
|  10002 | 1964-06-02 | Bezalel    | Simmel    | F      | 1985-11-21 |
|  10003 | 1959-12-03 | Parto      | Bamford   | M      | 1986-08-28 |
|  10004 | 1954-05-01 | Chirstian  | Koblick   | M      | 1986-12-01 |
|  10005 | 1955-01-21 | Kyoichi    | Maliniak  | M      | 1989-09-12 |
|  10006 | 1953-04-20 | Anneke     | Preusig   | F      | 1989-06-02 |
|  10007 | 1957-05-23 | Tzvetan    | Zielinski | F      | 1989-02-10 |
|  10008 | 1958-02-19 | Saniya     | Kalloufi  | M      | 1994-09-15 |
|  10009 | 1952-04-19 | Sumant     | Peac      | F      | 1985-02-18 |
|  10010 | 1963-06-01 | Duangkaew  | Piveteau  | F      | 1989-08-24 |
+--------+------------+------------+-----------+--------+------------+

where句にて、条件をandで記述することで複数の条件指定が可能です。

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 |
|  38691 | 1956-12-14 | Georgi     | Denos       | F      | 1986-05-30 |
|  72521 | 1953-03-13 | Georgi     | Daescu      | F      | 1986-02-06 |
|  85237 | 1957-04-05 | Georgi     | Chartres    | M      | 1985-08-30 |
| 104315 | 1952-06-14 | Georgi     | Woycyznski  | M      | 1985-08-29 |
| 107682 | 1954-10-06 | Georgi     | Leonhardt   | M      | 1986-06-20 |

上記の例は、employees(社員)テーブルから、first_name(姓名の名)がGorgi、hire_date(雇用日)が1986年6月26日以前のデータを抽出します。

where句で、複数の条件を指定するサンプル

複数の条件は、andとorで接続することで条件を多数列挙することが可能です。and、or演算子には優先順位があります。

mysql> select * from employees where first_name = 'Georgi' and hire_date < '1986-05-20' or hire_date > '1999-10-01' limit 10;
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  10684 | 1956-01-23 | Aimee      | Tokunaga  | F      | 1999-10-28 |
|  10909 | 1954-11-11 | Georgi     | Atchley   | M      | 1985-04-21 |
|  11697 | 1957-12-20 | JoAnne     | Merey     | F      | 1999-11-06 |
|  12157 | 1960-03-30 | Georgi     | Barinka   | M      | 1985-06-04 |
|  12389 | 1963-10-16 | Percy      | Casperson | M      | 1999-10-08 |
|  13246 | 1952-06-09 | Adil       | Siepmann  | F      | 1999-12-31 |
|  13919 | 1952-04-22 | Brewster   | Sinicrope | M      | 1999-12-04 |
|  16672 | 1955-04-25 | Georgi     | Peris     | M      | 1986-03-13 |
|  16772 | 1952-09-08 | Baruch     | Giveon    | F      | 1999-10-27 |
|  17789 | 1956-03-16 | Snehasis   | Gilg      | F      | 1999-11-14 |
+--------+------------+------------+-----------+--------+------------+

上記の例では、first_name=Georgiかつhire_dateが1986-05-20以前、または、hire_dateが1999年10月1日より後でその他の条件なしという条件になります。

andとorの混合した条件指定では、優先順位に気をつけましょう。括弧を使うことで、優先順位を指定できます。

mysql> select * from employees where first_name = 'Georgi' and ( hire_date < '1986-05-20' or hire_date > '1999-10-01' )  limit 10;
+--------+------------+------------+-------------+--------+------------+
| 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 |
|  72521 | 1953-03-13 | Georgi     | Daescu      | F      | 1986-02-06 |
|  85237 | 1957-04-05 | Georgi     | Chartres    | M      | 1985-08-30 |
| 104315 | 1952-06-14 | Georgi     | Woycyznski  | M      | 1985-08-29 |
| 201627 | 1963-07-08 | Georgi     | Calkin      | F      | 1985-06-18 |
| 213744 | 1962-02-25 | Georgi     | Bolsens     | F      | 1986-05-04 |
| 214377 | 1959-12-14 | Georgi     | Asmuth      | F      | 1985-12-20 |
+--------+------------+------------+-------------+--------+------------+

上記の例では、「first_nameがGeorgiかつ、hire_dateが1986年5月20日より後か、1999年10月1日より前のデータを抽出します。

andとorを使った冗長な条件を記述する場合、inを使って簡潔に見やすく置き換えられるケースもあります。

【関連記事】
SQLでandとorを使った条件は、inを使って簡潔に置き換え可能

まとめ

ポテパンダの一言メモ
  • SQLで複数条件を記述するには、where句でandを使って条件を記述
  • andとorでは、優先順位がありandが優先
  • 優先順位を変更するにはカッコを使用。カッコ内が優先される

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。