Lesson 7

演算子

Lesson 7 Chapter 1
算術演算子、比較演算子、論理演算子、その他の演算子等

本レッスンでは、SQL で使用する演算子について見ていきましょう。
演算子は、SELECT 文のほか、INSERT 文、UPDATE 文、DELETE 文など、ほぼ全般において使用されます。
ここでは、SELECT 文をベースに解説していきますが、他の SQL 文においても使用される共通事項ですので、その点を踏まえて学習していただければと思います。

テーブルの準備

本レッスンで使用するテーブルを準備します。
以下のように CREATE TABLE 文、INSERT 文のコマンドを実行して、テーブルを用意してください。

PowerShell
mysql> CREATE TABLE operators (
  id int primary key,
  name varchar(20),
  age tinyint,
  gender varchar(8),
  prefecture varchar(20),
  attendance boolean
);

mysql> INSERT INTO operators VALUES
  (1, 'tanaka', 28, 'male', 'tokyo', true),
  (2, 'yamada', 19, 'female', 'osaka', true),
  (3, 'suzuki', 33, 'male', 'tokyo', true),
  (4, 'saito', 48, 'male', 'nagoya', true),
  (5, 'honda', 31, 'female', 'osaka', false),
  (6, 'nakamura', 23, 'male', 'tokyo', false),
  (7, 'yamada', 55, 'male', 'fukuoka', null),
  (8, 'watanabe', 25, 'male', 'tokyo', true),
  (9, 'yamamoto', 41, 'female', 'tokyo', true),
  (10, 'kato', 68, 'female', 'fukuoka', null);

mysql> SELECT * FROM operators;
+----+----------+------+--------+------------+------------+
| id | name     | age  | gender | prefecture | attendance |
+----+----------+------+--------+------------+------------+
|  1 | tanaka   |   28 | male   | tokyo      |          1 |
|  2 | yamada   |   19 | female | osaka      |          1 |
|  3 | suzuki   |   33 | male   | tokyo      |          1 |
|  4 | saito    |   48 | male   | nagoya     |          1 |
|  5 | honda    |   31 | female | osaka      |          0 |
|  6 | nakamura |   23 | male   | tokyo      |          0 |
|  7 | yamada   |   55 | male   | fukuoka    |       NULL |
|  8 | watanabe |   25 | male   | tokyo      |          1 |
|  9 | yamamoto |   41 | female | tokyo      |          1 |
| 10 | kato     |   68 | female | fukuoka    |       NULL |
+----+----------+------+--------+------------+------------+
10 rows in set (0.00 sec)

以上のように、ID(id)、名前(name)、年齢(age)、性別(gender)、都道府県(prefecture)、出席(attendance)をカラムに持った表ができていれば OK です。

なお、attendance カラムのように CREATE TABLE 文で「BOOLEAN 型(真偽値型)」を指定すると、MySQL では「TINYINT 型(数値型)」に置き換えられます。

真偽値 読替値(TINYINT 型)
false 0
true 1

算術演算子

算術演算子は以下のように一般的な算術演算子が使えます(※公式 MySQL 8.0 リファレンス参照)。

No 演算子 名称 説明
1 + 加算演算子 値を加算する。
2 - 減算演算子 値を減算する。
符号を変更する場合にも使用する
3 * 乗算演算子 値を乗算する。
4 / 除算演算子 値を除算する。
5 DIV 整数除算 値を除算して整数部分のみを返す。
MySQL の拡張機能のため標準 SQL にはない。
6 %(または MOD) モジュロ演算子 値を整数除算して余りの部分を返す。
MySQL の拡張機能のため標準 SQL にはない。

No 5(DIV)および No 6(% または MOD)については、MySQL の拡張機能による演算子です。 他の DBMS(PostgreSQL, Oracle など)では取扱いが異なるため注意してください。

四則演算を使用した SQL 文

年齢(age)の値に 1 を加算する SQL 文を作成すると次のようになります。

SELECT id, name, age + 1 FROM operators;

取得するカラムとして、id、name に加えて、age + 1 を指定しています。
いうまでもありませんが、算術演算子(+)を使用して age に 1 を加算しているということです。
実行すると、以下のように表示されます。

PowerShell
mysql> SELECT id, name, age + 1 FROM operators;
+----+----------+---------+
| id | name     | age + 1 |
+----+----------+---------+
|  1 | tanaka   |      29 |
|  2 | yamada   |      20 |
|  3 | suzuki   |      34 |
|  4 | saito    |      49 |
|  5 | honda    |      32 |
|  6 | nakamura |      24 |
|  7 | yamada   |      56 |
|  8 | watanabe |      26 |
|  9 | yamamoto |      42 |
| 10 | kato     |      69 |
+----+----------+---------+
10 rows in set (0.00 sec)

以上のように表示されれば成功ですが、カラム名に計算式 age + 1 がそのまま表示されることになります。

カラム名に別名を付ける AS 句

上記のように、算術演算子を使用して取得したカラム名には計算式 age + 1 がそのまま表示されます。
AS 句というものを使用することで、このカラム名に別名を付けることができます。
基本構文は次のとおりです。

[カラム名] AS [別名]

実際に AS 句を使用して、SQL 文を書き直すと次のようにすることができます。

mysql> SELECT id, name, age, age + 1 AS next_age FROM operators;

age + 1 AS next_age と記載して age + 1 の表示名を next_age に変更しています。
実際に実行すると次のようになります。

PowerShell
mysql> SELECT id, name, age, age + 1 AS next_age FROM operators;
+----+----------+------+----------+
| id | name     | age  | next_age |
+----+----------+------+----------+
|  1 | tanaka   |   28 |       29 |
|  2 | yamada   |   19 |       20 |
|  3 | suzuki   |   33 |       34 |
|  4 | saito    |   48 |       49 |
|  5 | honda    |   31 |       32 |
|  6 | nakamura |   23 |       24 |
|  7 | yamada   |   55 |       56 |
|  8 | watanabe |   25 |       26 |
|  9 | yamamoto |   41 |       42 |
| 10 | kato     |   68 |       69 |
+----+----------+------+----------+
10 rows in set (0.00 sec)

AS 句は、テーブル名に別名を付ける場合にも使用されます。
詳しくは、Leeson 9 で解説しますので、そちらを参照してください。

整数除算、モジュロ演算子を使用した SQL 文

続いて、割り算をした結果の「整数部分」と「余り」を取得してみます。
割り算結果の整数部分の取得には DIV(整数除算)を使用し、余りの取得には MOD(モジュロ演算子)を使用します。
ここでは、年齢を 10 で割った整数部分と余りを取得してみましょう。

SELECT id, name, age, age DIV 10, age MOD 10 FROM operators;

age MOD 10 のところは age % 10 と記載しても結果は同じです。
実行すると次の結果を得ることができます。

PowerShell
mysql> SELECT id, name, age, age DIV 10, age MOD 10 FROM operators;
+----+----------+------+------------+------------+
| id | name     | age  | age DIV 10 | age MOD 10 |
+----+----------+------+------------+------------+
|  1 | tanaka   |   28 |          2 |          8 |
|  2 | yamada   |   19 |          1 |          9 |
|  3 | suzuki   |   33 |          3 |          3 |
|  4 | saito    |   48 |          4 |          8 |
|  5 | honda    |   31 |          3 |          1 |
|  6 | nakamura |   23 |          2 |          3 |
|  7 | yamada   |   55 |          5 |          5 |
|  8 | watanabe |   25 |          2 |          5 |
|  9 | yamamoto |   41 |          4 |          1 |
| 10 | kato     |   68 |          6 |          8 |
+----+----------+------+------------+------------+
10 rows in set (0.00 sec)

除算(割り算)の「整数部分」と「余り」が正しく取得できていることが確認できました。

比較演算子

MySQL で使用できる比較演算子の一覧

まず、使用できる比較演算子を一覧で確認します(※公式MySQL 8.0 リファレンス参照)。

① 一般的な比較演算子
一般的な比較演算子として、次のものが使用できます。

No 演算子 名称 説明
1 = 等価演算子 等しい
2 (または !=) 不等価演算子 等しくない
「!=」は MySQL 拡張機能による書き方
3 > 右不等演算子 (右辺)より大きい
4 >= 等価右不等演算子 (右辺)以上
5 左不等演算子 (右辺)より小さい
6 等価左不等演算子 (右辺)以下
7 NULL 安全等価演算子 NULL 値も含めて等しいか否かを判定
MySQL の拡張機能

No 7 の (NULL 安全等価演算子)は MySQL のみで使用できる演算子です。
この NULL 安全等価演算子は、他の DBMS には存在しない特殊な演算子のためここでは解説しませんが、興味のある方は 公式リファレンスの解説 を参照してください。

② その他の比較演算子
SQL で使用できる比較演算子としては、以下のものがあります。

No 演算子 説明
1 BETWEEN ... AND ... 2つの値の範囲内に値が含まれているかどうか
2 IS 真偽値が一致するかどうか
3 IS NOT 真偽値が一致しないかどうか
4 IS NULL NULL 値であるかどうか
5 IS NOT NULL NULL 値でないかどうか

等価・不等価演算子

まず、等価・不等価演算子について SQL を書いてみましょう。 等価演算子(=)については、既に使用してきましたので、不等価演算子を中心に見ていきます。
SQL における不等価演算子は と記載するのが一般的です。 MySQL では != も許容されますが、SQL の標準である を使用する方が無難です。

テーブルは、引き続き、次のものを使用します。

+----+----------+------+--------+------------+------------+
| id | name     | age  | gender | prefecture | attendance |
+----+----------+------+--------+------------+------------+
|  1 | tanaka   |   28 | male   | tokyo      |          1 |
|  2 | yamada   |   19 | female | osaka      |          1 |
|  3 | suzuki   |   33 | male   | tokyo      |          1 |
|  4 | saito    |   48 | male   | nagoya     |          1 |
|  5 | honda    |   31 | female | osaka      |          0 |
|  6 | nakamura |   23 | male   | tokyo      |          0 |
|  7 | yamada   |   55 | male   | fukuoka    |       NULL |
|  8 | watanabe |   25 | male   | tokyo      |          1 |
|  9 | yamamoto |   41 | female | tokyo      |          1 |
| 10 | kato     |   68 | female | fukuoka    |       NULL |
+----+----------+------+--------+------------+------------+

それでは、prefecturetokyo でないレコードを取得してみます。
SQL 文は次のようになります。

SELECT * FROM operators WHERE prefecture  'tokyo';

実行すると、次のようになります。

PowerShell
mysql> SELECT * FROM operators WHERE prefecture  'tokyo';
+----+--------+------+--------+------------+------------+
| id | name   | age  | gender | prefecture | attendance |
+----+--------+------+--------+------------+------------+
|  2 | yamada |   19 | female | osaka      |          1 |
|  4 | saito  |   48 | male   | nagoya     |          1 |
|  5 | honda  |   31 | female | osaka      |          0 |
|  7 | yamada |   55 | male   | fukuoka    |       NULL |
| 10 | kato   |   68 | female | fukuoka    |       NULL |
+----+--------+------+--------+------------+------------+
5 rows in set (0.00 sec)

tokyo 以外の全てのレコードが取得できました。

右不等・左不等演算子

次に、右不等演算子、左不等演算子について SQL を書いてみましょう。
ここでは、age が 31 以上 かつ 55 未満(55 より小さい)のレコードを取得してみます。
条件式には、次の比較演算子を使用します。

  • 31 以上については等価右不等演算子(>=)を使用
  • 55 未満については左不等演算子()を使用
SQL 文は次のようになります。
SELECT * FROM operators WHERE age >= 31 AND age 

実行すると、次のようになります。

PowerShell
mysql> SELECT * FROM operators WHERE age >= 31 AND age 

等価右不等演算子(>=)の比較対象となった 31 は結果に含んでおり、 左不等演算子()の対象となった 55 が結果に含まれないことを確認できたと思います。
等号(=)を含むか否かで結果が変わってしまうことにご注意ください。

BETWEEN 演算子

BETWEEN 演算子は、Lesson 6 で先に触れました。
この演算子を使うことで、指定した範囲内に値があるレコードを取得します。
基本構文は次のとおりです。

SELECT [カラム名] FROM [テーブル名] WHERE [カラム名] BETWEEN [最小値] AND [最大値];

上記構文に指定された [最小値] 以上、[最大値] 以下の値を取得します。
つまり、[最小値] または [最大値] と一致する値についても、実行結果に含まれることになるため、WHERE 以下を次のように記述した場合と同じ結果を返すことになります。
WHERE [カラム名] >= [最小値] AND [カラム名]

BETWEEN 演算子を用いて、[最小値] を 31、[最大値] を 55 とする SQL 文を書くと次のようになります。

SELECT * FROM operators WHERE age BETWEEN 31 AND 55;

実行結果は、次のとおりです。

PowerShell
mysql> SELECT * FROM operators WHERE age BETWEEN 31 AND 55;
+----+----------+------+--------+------------+------------+
| id | name     | age  | gender | prefecture | attendance |
+----+----------+------+--------+------------+------------+
|  3 | suzuki   |   33 | male   | tokyo      |          1 |
|  4 | saito    |   48 | male   | nagoya     |          1 |
|  5 | honda    |   31 | female | osaka      |          0 |
|  7 | yamada   |   55 | male   | fukuoka    |       NULL |
|  9 | yamamoto |   41 | female | tokyo      |          1 |
+----+----------+------+--------+------------+------------+
5 rows in set (0.01 sec)

[最小値] に指定した 31 および [最大値] に指定した 55 がともに含まれていることが確認できます。

IS 演算子・IS NOT 演算子

IS 演算子、IS NOT 演算子は真偽値の判定に使用します。

① IS 演算子を使用した例
attendance(出席)が true のレコードを取得するには、次のように実行します。

PowerShell
mysql> SELECT * FROM operators WHERE attendance IS true;
+----+----------+------+--------+------------+------------+
| id | name     | age  | gender | prefecture | attendance |
+----+----------+------+--------+------------+------------+
|  1 | tanaka   |   28 | male   | tokyo      |          1 |
|  2 | yamada   |   19 | female | osaka      |          1 |
|  3 | suzuki   |   33 | male   | tokyo      |          1 |
|  4 | saito    |   48 | male   | nagoya     |          1 |
|  8 | watanabe |   25 | male   | tokyo      |          1 |
|  9 | yamamoto |   41 | female | tokyo      |          1 |
+----+----------+------+--------+------------+------------+
6 rows in set (0.00 sec)

attendance(出席)が 1 のレコードのみ取得することができました。
MySQL の真偽値型は、1 が true、0 が false を表すため、正しいデータが取得できたことになります。

② IS NOT 演算子を使用した例
attendance(出席)が true でないレコードを取得するには、次のように実行します。

PowerShell
mysql> SELECT * FROM operators WHERE attendance IS NOT true;
+----+----------+------+--------+------------+------------+
| id | name     | age  | gender | prefecture | attendance |
+----+----------+------+--------+------------+------------+
|  5 | honda    |   31 | female | osaka      |          0 |
|  6 | nakamura |   23 | male   | tokyo      |          0 |
|  7 | yamada   |   55 | male   | fukuoka    |       NULL |
| 10 | kato     |   68 | female | fukuoka    |       NULL |
+----+----------+------+--------+------------+------------+
4 rows in set (0.00 sec)

attendance(出席)が 1 でないレコードを取得することができました。
attendance が 0(false)または NULL のレコードが取得されています。

③ IS 演算子、IS NOT 演算子で取得できる値
IS 演算子、IS NOT 演算子で取得される値は、次のようになります。

No 取得される値
1 IS true true
2 IS NOT true false または 不明
1 IS false false
2 IS NOT false true または 不明

IS NOT の場合には、取得値に NULL が含まれることにご注意ください。

真偽値の判定に等号・不等号を使用すること

真偽値の判定については、DBMS によって仕様に差異があります。
MySQL では、等号・不等号を使用しても真偽値の判定ができますが、次のような不等号を用いた記述をすると IS NOT true の場合と異なる結果が返されます。

PowerShell
mysql> SELECT * FROM operators WHERE attendance  true;
+----+----------+------+--------+------------+------------+
| id | name     | age  | gender | prefecture | attendance |
+----+----------+------+--------+------------+------------+
|  5 | honda    |   31 | female | osaka      |          0 |
|  6 | nakamura |   23 | male   | tokyo      |          0 |
+----+----------+------+--------+------------+------------+
2 rows in set (0.00 sec)

真偽値の判定に等号・不等号を使用する場合は、IS 演算子、IS NOT 演算子を使用する場合と挙動が異なることに注意してください。

IS NULL 演算子・IS NOT NULL 演算子

IS NULL 演算子、IS NOT NULL 演算子は NULL 値の判定に使用します。

① IS NULL 演算子を使用した例
attendance(出席)が NULL のレコードを取得するには、次のように実行します。

PowerShell
mysql> SELECT * FROM operators WHERE attendance IS NULL;
+----+--------+------+--------+------------+------------+
| id | name   | age  | gender | prefecture | attendance |
+----+--------+------+--------+------------+------------+
|  7 | yamada |   55 | male   | fukuoka    |       NULL |
| 10 | kato   |   68 | female | fukuoka    |       NULL |
+----+--------+------+--------+------------+------------+
2 rows in set (0.00 sec)

attendance(出席)が NULL のレコードのみ取得することができました。

② IS NOT NULL 演算子を使用した例
attendance(出席)が NULL でないレコードを取得するには、次のように実行します。

PowerShell
mysql> SELECT * FROM operators WHERE attendance IS NOT NULL;
+----+----------+------+--------+------------+------------+
| id | name     | age  | gender | prefecture | attendance |
+----+----------+------+--------+------------+------------+
|  1 | tanaka   |   28 | male   | tokyo      |          1 |
|  2 | yamada   |   19 | female | osaka      |          1 |
|  3 | suzuki   |   33 | male   | tokyo      |          1 |
|  4 | saito    |   48 | male   | nagoya     |          1 |
|  5 | honda    |   31 | female | osaka      |          0 |
|  6 | nakamura |   23 | male   | tokyo      |          0 |
|  8 | watanabe |   25 | male   | tokyo      |          1 |
|  9 | yamamoto |   41 | female | tokyo      |          1 |
+----+----------+------+--------+------------+------------+
8 rows in set (0.00 sec)

attendance(出席)が NULL でないレコードを取得することができました。

NULL の判定に等号・不等号は使用できない

NULL の判定については、等号・不等号の使用はできない仕様になっています。

PowerShell
mysql> SELECT * FROM operators WHERE attendance = NULL;
Empty set (0.00 sec)

NULL 値の判定には IS NULL 演算子、IS NOT NULL 演算子を使用するようにしましょう。

論理演算子

論理演算子は以下のものが使用できます(※公式MySQL 8.0 リファレンス参照)。

No 演算子 名称 使用例 説明
1 AND 論理積 a AND b a と b がともに true であれば true
(MySQL では && も使用できるが非推奨)
2 OR 論理和 a OR b a と b の少なくとも 1 つが true であれば true
(MySQL では || も使用できるが非推奨)
3 NOT 否定 NOT a a が true であれば false、a が false であれば true
(MySQL では ! も使用できるが非推奨)
4 XOR 排他的論理和 a XOR b a と b のうち 1 つの値のみが true であれば true
XOR 自体が MySQL の拡張機能(標準 SQL にはない)

AND 演算子・OR 演算子

AND 演算子、OR 演算子はこれまで使用してきましたので、ここでは、複合的に使用する例を紹介いたします。
AND と OR が混在する場合は、括弧 () で括られた条件から先に実行されます。
次の例では、OR 演算子が先に実行され、その後に AND 演算子が実行されることになります。

PowerShell
mysql> SELECT * FROM operators WHERE attendance IS true AND (prefecture = 'tokyo' OR prefecture = 'osaka');
+----+----------+------+--------+------------+------------+
| id | name     | age  | gender | prefecture | attendance |
+----+----------+------+--------+------------+------------+
|  1 | tanaka   |   28 | male   | tokyo      |          1 |
|  2 | yamada   |   19 | female | osaka      |          1 |
|  3 | suzuki   |   33 | male   | tokyo      |          1 |
|  8 | watanabe |   25 | male   | tokyo      |          1 |
|  9 | yamamoto |   41 | female | tokyo      |          1 |
+----+----------+------+--------+------------+------------+
5 rows in set (0.00 sec)

prefecture が tokyo または osaka のレコードのうち、attendance が true のレコードを取得することができました。

NOT 演算子

NOT 演算子を頭に付けることにより、その後の条件式を否定することができます。
次の例では、BETWEEN 演算子の前に NOT 演算子を付けることで、age が 31 から 55 の範囲でないレコードが取得できることになります。

SELECT * FROM operators WHERE age NOT BETWEEN 31 AND 55;

これを実行すると、次のような結果になります。

PowerShell
mysql> SELECT * FROM operators WHERE age NOT BETWEEN 31 AND 55;
+----+----------+------+--------+------------+------------+
| id | name     | age  | gender | prefecture | attendance |
+----+----------+------+--------+------------+------------+
|  1 | tanaka   |   28 | male   | tokyo      |          1 |
|  2 | yamada   |   19 | female | osaka      |          1 |
|  6 | nakamura |   23 | male   | tokyo      |          0 |
|  8 | watanabe |   25 | male   | tokyo      |          1 |
| 10 | kato     |   68 | female | fukuoka    |       NULL |
+----+----------+------+--------+------------+------------+
5 rows in set (0.00 sec)

age が 31 より小さい または 55 より大きいレコードを取得することができました。

XOR 演算子

XOR 演算子は 左辺または右辺のどちらかが true の場合のみ true を返す演算子です。
OR 演算子と似ていますが 左辺・右辺がともに true の場合は false になることに注意が必要です(公式リファレンス参照)。

No 数式 結果 説明
1 false XOR false false
2 false XOR true true 1 つだけ true があるので true
3 true XOR false true 1 つだけ true があるので true
4 true XOR true false 両方とも true なので false
5 NULL XOR true NULL どちらかが NULL の場合は NULL が返される
6 false XOR NULL NULL どちらかが NULL の場合は NULL が返される

XOR 演算子は MySQL の拡張機能であり、標準の SQL には無く、利用機会はさほど多くはないかもしれません。
しかし、XOR の概念は、プログラミングを行うにあたって必要な知識となります。

それでは、次の SQL 文を実行して挙動を確認してみましょう。

PowerShell
mysql> SELECT * FROM operators WHERE prefecture = 'tokyo' XOR attendance IS true;
+----+----------+------+--------+------------+------------+
| id | name     | age  | gender | prefecture | attendance |
+----+----------+------+--------+------------+------------+
|  2 | yamada   |   19 | female | osaka      |          1 |
|  4 | saito    |   48 | male   | nagoya     |          1 |
|  6 | nakamura |   23 | male   | tokyo      |          0 |
+----+----------+------+--------+------------+------------+
3 rows in set (0.00 sec)

取得できたレコードの条件は次のようになります。

  • prefecture が tokyo で attendance が false のレコード
  • prefecture が tokyo 以外で attendance が true のレコード
条件のとおりにレコード取得ができていることが確認できました。

その他の演算子

以上で紹介した演算子のほかにも、演算子を使用することができます(公式リファレンス参照)。
ここでは、特に重要な 2 つの演算子について見ていきましょう。

No 名前 説明
1 LIKE 文字列のパターンが一致する場合
2 IN () 指定したリストに値が含まれている場合

LIKE 演算子

Lesson 6 でも紹介しましたので、復習を兼ねて見ていきましょう。
LIKE 演算子を使用すると、指定した文字列と部分一致するレコードを取得することができます。
基本構文は次のとおりです。

SELECT [カラム名] FROM [テーブル名] WHERE [カラム名] LIKE [パターン];

[パターン] の部分に使用できるワイルドカード文字は次の2つでした。

No ワイルドカード文字 説明
1 % (半角のパーセント) 0 個以上の任意の文字に一致
2 _ (半角のアンダースコア) 任意の 1 つの文字に一致

ここでは name が 6 文字 かつ 末尾が a のレコードを抽出してみましょう。
アンダースコア(_)5 文字に a を加えた「'_____a'」を [パターン] に指定します。

SELECT * FROM operators WHERE name LIKE '_____a';

SQL を実行すると、次のようになります。

PowerShell
mysql> SELECT * FROM operators WHERE name LIKE '_____a';
+----+--------+------+--------+------------+------------+
| id | name   | age  | gender | prefecture | attendance |
+----+--------+------+--------+------------+------------+
|  1 | tanaka |   28 | male   | tokyo      |          1 |
|  2 | yamada |   19 | female | osaka      |          1 |
|  7 | yamada |   55 | male   | fukuoka    |       NULL |
+----+--------+------+--------+------------+------------+
3 rows in set (0.00 sec)

対象となる 3 つのレコードが、無事に取得できました。

IN 演算子

次に、IN 演算子です。こちらも Lesson 6 で紹介していますので、復習がてら見ていきましょう。
この演算子を使用することで、指定したリスト(配列)のうちで一致する値があるレコードを取得することができます。
基本構文は次のとおりです。

SELECT [カラム名] FROM [テーブル名] WHERE [カラム名] IN (条件1, 条件2, ...);

ここでは、NOT 演算子を併用して、prefecture が osaka、nagoya、fukuoka 以外のレコード(すなわち tokyo のみのレコード)を取得してみましょう。
SQL を実行すると次のようになります。

PowerShell
mysql> SELECT * FROM operators WHERE prefecture NOT IN ('osaka', 'nagoya', 'fukuoka');
+----+----------+------+--------+------------+------------+
| id | name     | age  | gender | prefecture | attendance |
+----+----------+------+--------+------------+------------+
|  1 | tanaka   |   28 | male   | tokyo      |          1 |
|  3 | suzuki   |   33 | male   | tokyo      |          1 |
|  6 | nakamura |   23 | male   | tokyo      |          0 |
|  8 | watanabe |   25 | male   | tokyo      |          1 |
|  9 | yamamoto |   41 | female | tokyo      |          1 |
+----+----------+------+--------+------------+------------+
5 rows in set (0.00 sec)

想定どおりに、prefecture が tokyo のみのレコードを取得することができました。

本レッスンは以上のとおりです。