MySQLの「等しくない」検索:NOT EQUAL(<>)演算子の使い方を解説
MySQLにおける「等しくない(NOT EQUAL)」の実装
結論から言うと、MySQLにも「等しくない(NOT EQUAL)」を表す手段は存在します。それが <> 演算子です。なお、!= 演算子も同じ意味を持つため、どちらを使っても同じ結果になります。
基本構文は以下のとおりです。
SELECT * FROM yourTableName WHERE yourColumnName <> yourValue;
動作確認用のサンプルテーブルを作成する
上記の構文の挙動を理解するために、まずテーブルを作成しましょう。テーブル作成クエリは次のとおりです。
mysql> create table DoesNotEqualDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Name varchar(20),
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.98 sec)
次に、INSERTコマンドで複数のレコードを挿入します。後の検証のために、NULLや空文字列('')も含めて登録しておくのがポイントです。
mysql> insert into DoesNotEqualDemo(Name) values(NULL);
Query OK, 1 row affected (0.24 sec)
mysql> insert into DoesNotEqualDemo(Name) values('John');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DoesNotEqualDemo(Name) values('Carol');
Query OK, 1 row affected (0.43 sec)
mysql> insert into DoesNotEqualDemo(Name) values('Bob');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DoesNotEqualDemo(Name) values('');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DoesNotEqualDemo(Name) values('Larry');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DoesNotEqualDemo(Name) values(NULL);
Query OK, 1 row affected (0.10 sec)
SELECT文で登録済みの全レコードを表示してみましょう。
mysql> select *from DoesNotEqualDemo;
出力結果は次のとおりです。
+----+-------+
| Id | Name |
+----+-------+
| 1 | NULL |
| 2 | John |
| 3 | Carol |
| 4 | Bob |
| 5 | |
| 6 | Larry |
| 7 | NULL |
+----+-------+
7 rows in set (0.00 sec)
NULLと空文字列を除外してレコードを取得する
ここで、「NULLでも空文字列でもない」レコードのみを抽出するクエリを確認してみましょう。
mysql> select *from DoesNotEqualDemo where Name <> 'NULL' and Name <> '';
出力結果:
+----+-------+
| Id | Name |
+----+-------+
| 2 | John |
| 3 | Carol |
| 4 | Bob |
| 6 | Larry |
+----+-------+
4 rows in set (0.00 sec)
注意点:NULLの除外にはIS NOT NULLを使うのが確実
MySQLでは、= や <> によるNULLとの比較は必ず NULL(不明) を返すため、WHERE句の条件としては成立しません。そのため、NULLを明示的に除外したい場合は IS NOT NULL を使うのが最も確実で推奨される書き方です。
SELECT * FROM DoesNotEqualDemo
WHERE Name IS NOT NULL AND Name <> '';
このように記述すれば意図が明確になり、SQLの可読性・保守性も向上します。ちなみに、先ほどの例でNULLの行が除外されていたのは、NULLとの比較結果がTRUEにならず、三値論理によって自動的にフィルタリングされたためです。実務では Name <> 'NULL' のような文字列リテラルとの比較は避け、IS NOT NULL を使うようにしましょう。
-
句読点が含まれていてもMySQLクエリで一致させるには?LIKE演算子の使い方
MySQLでは、LIKE演算子を使うことで、句読点(カンマや感嘆符など)が文字列に含まれていても部分一致検索が可能です。本記事では、実際にテーブルを作成し、句読点を含むデータを検索する手順を具体的に解説します。 1. サンプルテーブルの作成 まず、検索対象となるテーブルを作成しましょう。以下のコマンドで「DemoTable」というテーブルを作成します。 mysql> create table DemoTable -> ( -> Comments varchar(20) -> ); Query OK, 0 rows affected (1.10
-
MySQLで特定の値が存在しないレコードを抽出する方法(NOT IN句の使い方)
MySQLでテーブルから「特定の値を含まない」レコードだけを取得したい場合は、NOT IN() 句を使用します。この記事では、実際にサンプルテーブルを作成しながら、NOT IN句の基本的な使い方を解説します。サンプルテーブルの作成まず、学生情報を格納するためのテーブルを作成しましょう。StudentId を主キー(AUTO_INCREMENT)とし、StudentName カラムを持つシンプルなテーブルです。mysql> create table DemoTable1991 ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,