バナー画像

MySQLの条件指定を行うWHERE句について、サンプルを交えて解説しています。

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

MySQLのWHEREの構文

WHERE句は、select文やdelete文などで条件指定する際に使います。

基本的な構文は以下の通りです。

select カラム名 from テーブル名 where 条件

複数の条件を指定する場合は、ANDもしくはORを使います。

ANDは2つの条件が同時に成り立つことを条件にする演算子。

下記SQLは、employees(社員)テーブルから、emp_no(社員番号)が10020以下で、gender(性別)がF(女性)のデータのみ抽出します。

mysql> select * from employees where emp_no < 10020 and gender = 'F';
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  10002 | 1964-06-02 | Bezalel    | Simmel    | F      | 1985-11-21 |
|  10006 | 1953-04-20 | Anneke     | Preusig   | F      | 1989-06-02 |
|  10007 | 1957-05-23 | Tzvetan    | Zielinski | F      | 1989-02-10 |
|  10009 | 1952-04-19 | Sumant     | Peac      | F      | 1985-02-18 |
|  10010 | 1963-06-01 | Duangkaew  | Piveteau  | F      | 1989-08-24 |
|  10011 | 1953-11-07 | Mary       | Sluis     | F      | 1990-01-22 |
|  10017 | 1958-07-06 | Cristinel  | Bouloucos | F      | 1993-08-03 |
|  10018 | 1954-06-19 | Kazuhide   | Peha      | F      | 1987-04-03 |
+--------+------------+------------+-----------+--------+------------+

ORは、少なくともどちらか一方の条件が成り立つことを条件にする演算子。

下記SQLは、employees(社員)テーブルから、first_name(姓名の名)がBezalel、またはlast_name(姓名の姓)がSluisのデータを抽出します。

mysql> select * from employees where first_name = 'Bezalel' or last_name = 'Sluis';
+--------+------------+-------------+----------------+--------+------------+
| emp_no | birth_date | first_name  | last_name      | gender | hire_date  |
+--------+------------+-------------+----------------+--------+------------+
|  10002 | 1964-06-02 | Bezalel     | Simmel         | F      | 1985-11-21 |
|  10011 | 1953-11-07 | Mary        | Sluis          | F      | 1990-01-22 |
|  10630 | 1954-08-10 | Bezalel     | Katzenelson    | F      | 1993-06-26 |
|  10775 | 1956-03-12 | Xiaoheng    | Sluis          | M      | 1988-12-09 |
|  11251 | 1955-10-16 | Bezalel     | Chinal         | M      | 1985-11-26 |
|  12415 | 1952-06-05 | Uri         | Sluis          | M      | 1986-10-25 |
 :
 :

ANDとORを同時に使うことも可能。ANDとORが混在した場合は、ANDの方が優先順位が高くなります。場合によっては、括弧を使って正しく条件を指定しましょう。

以下のSQLは、employees(社員)テーブルから、「first_nameがBezalelまたは、last_nameがSluis」かつ、emp_no(社員番号)が11000以下のデータを抽出します。

mysql> select * from employees where (first_name = 'Bezalel' or last_name = 'Sluis') and emp_no < 11000;
+--------+------------+------------+-------------+--------+------------+
| emp_no | birth_date | first_name | last_name   | gender | hire_date  |
+--------+------------+------------+-------------+--------+------------+
|  10002 | 1964-06-02 | Bezalel    | Simmel      | F      | 1985-11-21 |
|  10011 | 1953-11-07 | Mary       | Sluis       | F      | 1990-01-22 |
|  10630 | 1954-08-10 | Bezalel    | Katzenelson | F      | 1993-06-26 |
|  10775 | 1956-03-12 | Xiaoheng   | Sluis       | M      | 1988-12-09 |
+--------+------------+------------+-------------+--------+------------+

演算子を使った条件指定

ANDやOR以外にも、以下の演算子を使って条件の指定が可能です。

IN リストに含まれる値を指定する

INはリストに含まれるかどうかを条件に指定する演算子です。

以下のSQLは、departments(部署)テーブルから、「dept_no(部署番号)、dept_name(部署名)」の組み合わせが、(「d001,Marketing」、「d004,Production」)のデータを抽出します。

mysql> SELECT * FROM `departments` 
    -> where (dept_no,dept_name) in ( ("d001","Marketing"), ("d004","Production") );
+---------+------------+
| dept_no | dept_name  |
+---------+------------+
| d001    | Marketing  |
| d004    | Production |
+---------+------------+

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

BETWEEN 指定した区間の値を指定する

BETWEENは、指定した2つの値の区間を条件指定する演算子です。

以下のSQLは、employees(社員)テーブルから、emp_no(社員番号)が20000~20005のデータを抽出します。

mysql> SELECT * FROM employees
 -> where emp_no between 20000 and 20005;
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  20000 | 1961-09-14 | Jenwei     | Matzke    | F      | 1990-11-29 |
|  20001 | 1962-05-16 | Atreye     | Eppinger  | M      | 1990-04-18 |
|  20002 | 1955-12-25 | Jaber      | Brender   | M      | 1988-01-26 |
|  20003 | 1953-04-11 | Munehiko   | Coors     | F      | 1991-02-07 |
|  20004 | 1952-03-07 | Radoslaw   | Pfau      | M      | 1995-11-24 |
|  20005 | 1956-02-20 | Licheng    | Przulj    | M      | 1992-07-17 |
+--------+------------+------------+-----------+--------+------------+

【関連記事】
SQL betweenで範囲指定するサンプルコード 速度アップにもつながる? 

LIKE ワイルドカードを使ったあいまいな文字列を指定する

likeはあいまい指定が可能な演算子です。

以下のSQLは、employees(社員テーブル)から、first_name(姓名の名)の2文字と3文字目が「or」のデータを抽出します。

mysql> SELECT *  FROM `employees`  WHERE first_name like '_or%' limit 10;
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  10182 | 1961-02-04 | Moriyoshi  | Merey     | F      | 1990-09-02 |
|  10366 | 1960-01-25 | Morrie     | Piazza    | M      | 1994-04-11 |
|  10530 | 1956-07-19 | Boriana    | Coors     | F      | 1987-09-23 |
|  10572 | 1960-10-10 | Cordelia   | Axelband  | M      | 1988-02-16 |
|  10633 | 1957-02-09 | Sorina     | Herber    | M      | 1985-06-17 |
|  10695 | 1962-08-30 | Zorica     | Acton     | M      | 1989-08-05 |
|  10710 | 1962-12-25 | Sorina     | Kermarrec | M      | 1992-01-10 |
|  10732 | 1962-04-22 | Morris     | Andreotta | F      | 1991-03-10 |
|  10735 | 1964-09-12 | Morrie     | Gewali    | M      | 1985-10-29 |
|  10739 | 1961-02-11 | Gor        | Iacovou   | F      | 1985-03-12 |
+--------+------------+------------+-----------+--------+------------+

【関連記事】
MySQL likeのサンプルコード集 複数のパターンマッチングをするには?

まとめ

ポテパンダの一言メモ
  • WHERE句で複数条件を指定する場合は、ANDまたはORで接続する。
  • INでリスト内に値を含むかどうかの条件指定が可能。
  • BETWEENで、区間内に値を含むかどうかの条件指定が可能。
  • LIKEでワイルドカードを使ったあいまい指定が可能。

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

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

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

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

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

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

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

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

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

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

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