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

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

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

andとorを使った条件をinを使って置き換えるサンプル

同じカラムに対する条件をorで記述する場合、inで置き換えが可能です。以下は、employees(社員テーブル)から、first_name(姓名の名)がMaryまたはGeorgiのデータを最大10件抽出するSQLです。

mysql> select * from employees 
where first_name = 'Mary' or first_name = 'Georgi' limit 10;

+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  10001 | 1953-09-02 | Georgi     | Facello   | M      | 1986-06-26 |
|  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 |
+--------+------------+------------+-----------+--------+------------+

inを使って、以下のように記述できます。

mysql> select * from employees 
where first_name in ('Georgi', 'Mary')  limit 10;
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  10001 | 1953-09-02 | Georgi     | Facello   | M      | 1986-06-26 |
|  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 |
+--------+------------+------------+-----------+--------+------------+

同様に、andとorを使ったSQLもinで置き換えが可能です。

【関連記事】
SQL in句のサンプルコード集 複数カラムの指定方法とは?

以下のSQLは、employees(社員)テーブルから、「Georgi Peris」と「Mary Sluis」を抽出するSQLです。

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) = ('Georgi','Peris') 
or (first_name, last_name) = ('Mary','Sluis');

さらに、カッコとinを使って、andとorを使わず置き換えが可能です。

似たような条件を複数記述してSQLが長くなってしまう場合、可読性を良くするためにこのような置換えが有効なケースがあります。

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 |
+--------+------------+------------+-----------+--------+------------+

まとめ

ポテパンダの一言メモ
  • 同じカラムに対する複数のor条件は、inで置き換えが可能
  • 同じカラムに対するandとorの複数の条件は、カッコでくくってorだけにすることが可能
  • andとorの組み合わせによっては、inとカッコで簡潔に記述可能なケースがある

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

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

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

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

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

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

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

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

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

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

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