MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのLIKEとNOT LIKEを使って同様の結果を表示する方法

MySQLでは、LIKE演算子とNOT LIKE演算子を使うことで、指定したパターンに一致(または一致しない)レコードを柔軟に抽出できます。ただし重要な注意点として、NULL値はどちらの演算子でもマッチしないため、NULLの行も結果に含めたい場合は「IS NULL」条件を組み合わせる必要があります。本記事では、サンプルテーブルを作成し、LIKEとNOT LIKEで同様の結果を得る手順を実例とともに解説します。

1. サンプルテーブルの作成

まず、CREATE TABLE文でテーブルを作成します。

mysql> create table DemoTable
    -> (
    -> CollegeCode varchar(100)
    -> );
Query OK, 0 rows affected (0.53 sec)

2. レコードの挿入

次に、INSERT文を使って複数のレコードを挿入します。あとでNULLの扱いを確認できるよう、意図的にNULL値も1件登録しておきます。

mysql> insert into DemoTable values('Col.1995.01.21');
Query OK, 1 row affected (0.10 sec)

mysql> insert into DemoTable values('Col.2016.11.22');
Query OK, 1 row affected (0.20 sec)

mysql> insert into DemoTable values(null);
Query OK, 1 row affected (0.14 sec)

mysql> insert into DemoTable values('Col.2018.12.01');
Query OK, 1 row affected (0.22 sec)

mysql> insert into DemoTable values('Col.2019.03.12');
Query OK, 1 row affected (0.15 sec)

3. 全レコードの確認

SELECT文ですべてのレコードを表示して、登録内容を確認しましょう。

mysql> select *from DemoTable;

出力結果

+----------------+
| CollegeCode    |
+----------------+
| Col.1995.01.21 |
| Col.2016.11.22 |
| NULL           |
| Col.2018.12.01 |
| Col.2019.03.12 |
+----------------+
5 rows in set (0.00 sec)

4. LIKE演算子を使用したクエリ

以下は、MySQLのLIKEを使用したクエリ例です。「%Col%」というワイルドカードパターンに一致するレコードに加え、「CollegeCode is NULL」の条件をORで組み合わせることで、NULL値の行も結果に含めています。

mysql> select *from DemoTable where CollegeCode LIKE '%Col%' or CollegeCode is NULL;

出力結果

+----------------+
| CollegeCode    |
+----------------+
| Col.1995.01.21 |
| Col.2016.11.22 |
| NULL           |
| Col.2018.12.01 |
| Col.2019.03.12 |
+----------------+
5 rows in set (0.00 sec)

5. NOT LIKE演算子を使用したクエリ

次に、NOT LIKEを使用したクエリです。「%College%」というパターンに一致しないレコードを抽出しますが、こちらも同様にNULL行を含めるために「is NULL」条件をORで追加しています。

mysql> select *from DemoTable where CollegeCode NOT LIKE '%College%' or CollegeCode is NULL;

出力結果

+----------------+
| CollegeCode    |
+----------------+
| Col.1995.01.21 |
| Col.2016.11.22 |
| NULL           |
| Col.2018.12.01 |
| Col.2019.03.12 |
+----------------+
5 rows in set (0.00 sec)

ポイント解説:NULLの扱いに注意しよう

LIKEおよびNOT LIKE演算子は、対象カラムの値がNULLの場合、比較結果として常にNULL(不明)を返します。そのため、WHERE句だけではNULLの行が結果から除外されてしまいます。

そこで、上記のクエリのように「or CollegeCode is NULL」を明示的に追加することで、NULL値を持つ行も結果セットに含めることができます。

このように、LIKEとNOT LIKEは抽出条件こそ正反対ですが、「OR カラム名 IS NULL」の条件を組み合わせることで、両者ともテーブル内の全レコード(NULL行を含む)を返すことが可能になります。実務ではNULL値の有無を常に意識し、意図した検索結果になるようクエリを設計することが重要です。

  1. MySQLで結果を日付ごとにグループ化し、重複値の件数を表示するクエリの書き方

    はじめにMySQLでは、GROUP BY句とDATE()関数、COUNT()関数を組み合わせることで、日付単位でレコードをグループ化し、重複する値の件数を簡単に集計できます。ここでは、到着日時ごとに乗客コードを集計する例を通して、その具体的な方法を解説します。1. サンプルテーブルの作成まず、以下のSQLを実行してテーブルを作成します。mysql> create table DemoTable1496-> (-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,-> PassengerCode varchar(20),-> A

  2. MySQLでNULLを含む列からNULL以外(NOT NULL)の値だけを抽出して表示する方法

    MySQLのIS NOT NULLを使ってNULL以外の値のみを表示するMySQLで、NULLとNULL以外のレコードが混在する列からNULL以外の値だけを取得したい場合は、IS NOT NULL演算子を使用します。この記事では、実際にテーブルを作成しながら手順を解説します。1. テーブルの作成まず、日付型の列を持つサンプルテーブルを作成します。mysql> create table DemoTable1      (      DueDate date      ); Query OK, 0 ro