1.1 さまざまな演算子

SQL入門講座では基本的なデータ検索と、比較演算子、「LIKE」演算子、論理演算子の「AND」「OR」演算子を学習しました。今回はさらに発展的なデータ検索を学習します。

1.1.1 NOT LIKE演算子

「LIKE」の発展形です。まずは「LIKE」演算子の使用方法についておさらいしてみましょう。
「bookinfo」テーブルで書籍名が「SQL」で始まるデータを検索する場合は、

    SELECT * FROM bookinfo WHERE title LIKE 'SQL%';

でしたね?

ではこれを「NOT LIKE」にするとどうなるでしょう?

    SELECT * FROM bookinfo WHERE title NOT LIKE 'SQL%';

書籍名が「SQL」で始まらないもの、すなわち「SQL」で始まるデータ以外のデータが抽出されます。

1.1.2 BETWEENとNOT BETWEEN演算子

ある値の範囲でデータを抽出する場合を考えてみましょう。例えば「bookinfo」テーブルで価格が1500円~2000円のデータを検索する場合、今まで学習してきたことを使うと、

    SELECT * FROM bookinfo WHERE price >= 1500 AND price <= 2000;

となりますね。これを「BETWEEN」演算子を使って検索することができます。
「BETWEEN」演算子の構文は次のとおりです。

    SELECT 列名 FROM テーブル名 WHERE 検索対象列名 BETWEEN 値1 AND 値2;

先程の「bookinfo」テーブルの例だと、

   SELECT * FROM bookinfo WHERE price BETWEEN 1500 AND 2000;

となります。こちらの方が、比較演算子と論理演算子を組み合わせた場合より見た目にもすっきり書けます。

「BETWEEN」演算子にも「NOT LIKE」演算子のように、「NOT BETWEEN」演算子があります。

   SELECT 列名 FROM テーブル名 WHERE 検索対象列名 NOT BETWEEN 値1 AND 値2;

先程の「bookinfo」の例に当てはめて見ると

   SELECT * FROM bookinfo WHERE price NOT BETWEEN 1500 AND 2000;

となりますが、意味は、

   SELECT * FROM bookinfo WHERE price < 1500 OR price > 2000;

と同じになります。

1.1.3 INとNOT IN演算子

ある列の値をいくつか指定して検索する場合、比較演算子と論理演算子を組み合わせて使うと、

   SELECT 列名 FROM テーブル名 WHERE 検索対象列=値1 OR 検索対象列=値2 OR・・・;

となりますね。これを「IN」演算子で記述するともう少しすっきりします。

   SELECT 列名 FROM テーブル名 WHERE 検索対象列 IN (値1,値2,・・・);

例えば「bookinfo」テーブルからISBN番号が「00001」「00003」「00005」のデータを検索する場合は、

   SELECT * FROM bookinfo WHERE isbn='00001' OR isbn='00003' OR isbn='00005';

と書くところを、

   SELECT * FROM bookinfo WHERE isbn IN ('00001','00003','00005');

と書くことができます。

「IN」演算子にも、対になる「NOT IN」演算子があります。

   SELECT 列名 FROM テーブル名 WHERE 検索対象列 NOT IN (値1,値2,・・・);

これは、指定した値以外のデータが抽出されます。「bookinfo」テーブルを例にとった場合、ISBN番号が「00001」「00003」「00005」以外のデータを検索する場合は、

   SELECT * FROM bookinfo WHERE isbn NOT IN ('00001','00003','00005');

となります。もうお分かりかと思いますが、これは

   SELECT * FROM bookinfo WHERE isbn<>'00001' AND isbn<>'00003' AND isbn<>'00005';

と同じです。

1.1.4 IS NULLとIS NOT NULL演算子

値がNULLかどうかを判定する演算子です。現在「bookinfo」テーブルにはNULLを含むデータがありませんので、まずはNULLを含むデータを作成しましょう。

復習
「bookinfo」テーブルに下記のデータを登録してください。

isbn title price
00007 NULL 2800

   INSERT INTO bookinfo(isbn,price) VALUES('00007',2800);

ではまず「IS NULL」演算子の構文です。

   SELECT 列名 FROM テーブル名 WHERE 検索対象列 IS NULL;

検索対象列がNULLのデータを検索します。
「bookinfo」テーブルだと、先程追加したデータが検索されます。

   SELECT * FROM bookinfo WHERE title IS NULL;

言うまでもありませんが、「IS NOT NULL」演算子はこの逆になります。

   SELECT 列名 FROM テーブル名 WHERE 検索対象列 IS NOT NULL;

   SELECT * FROM bookinfo WHERE title IS NOT NULL;

NULL
NULL(ヌルまたはナルと読みます)とは何でしょうか?NULLとは、テーブルの列に値が何も設定されていない状態を指します。これは、0でも空文字(長さが0の文字)でもスペースでもありません。MariaDBクライアントでは、表示上「NULL」となります。試しに「bookinfo」に、書籍タイトルが0、空文字、スペースのデータを登録して、違いを見てみましょう。
※操作はしないでください。

データを見てみます。

   SELECT * FROM bookinfo WHERE ISBN BETWEEN '00007' AND '00010';

0も空文字もスペースも、(表示上見えなくても)値は設定されている状態なのですが、NULLは実際には値が何もない状態ですので、注意が必要です。