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

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 を使うようにしましょう。

  1. 句読点が含まれていてもMySQLクエリで一致させるには?LIKE演算子の使い方

    MySQLでは、LIKE演算子を使うことで、句読点(カンマや感嘆符など)が文字列に含まれていても部分一致検索が可能です。本記事では、実際にテーブルを作成し、句読点を含むデータを検索する手順を具体的に解説します。 1. サンプルテーブルの作成 まず、検索対象となるテーブルを作成しましょう。以下のコマンドで「DemoTable」というテーブルを作成します。 mysql> create table DemoTable -> ( -> Comments varchar(20) -> ); Query OK, 0 rows affected (1.10

  2. MySQLで特定の値が存在しないレコードを抽出する方法(NOT IN句の使い方)

    MySQLでテーブルから「特定の値を含まない」レコードだけを取得したい場合は、NOT IN() 句を使用します。この記事では、実際にサンプルテーブルを作成しながら、NOT IN句の基本的な使い方を解説します。サンプルテーブルの作成まず、学生情報を格納するためのテーブルを作成しましょう。StudentId を主キー(AUTO_INCREMENT)とし、StudentName カラムを持つシンプルなテーブルです。mysql> create table DemoTable1991 ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,