ノットイコール(not equal)とは?
ノットイコールは、値が等しくないという意味です。
「NOT」は条件式の論理否定で「条件式以外の」や「条件式ではない」というようになります。
SQLにおいては、WHERE句などの条件式で使われます。
表現方法は次の通りです。
- <>
- !=
上記の演算子はMySQLやPostgreSQL、Oracleなど、さまざまなDBMSで使われるので覚えておきましょう。
SQLにはノットイコール以外にも、よく使われる演算子がいくつかあります。
詳しくは以下の記事で解説していますので、ぜひ参考にしてみてください!
【関連記事】
ノットイコールの使い方
では実際に、SQLでのノットイコールの使い方を見ていきましょう。
例えば、次のようなテーブルがあるとしましょう。
mysql> SELECT * FROM user_list; +---------+--------+------+ | user_id | name | age | +---------+--------+------+ | 1 | Tanaka | 23 | | 2 | Okada | 35 | | 3 | Yamada | 28 | +---------+--------+------+ 3 rows in set (0.01 sec)
この user_listテーブルの ageカラム の値が 23と等しくないデータを取得してみます。
次のように記述しましょう。
SELECT *FROM user_list WHERE age <> 23;
上記のSQLを実行すると次のようになります。
mysql> SELECT *FROM user_list WHERE age <> 23; +---------+--------+------+ | user_id | name | age | +---------+--------+------+ | 2 | Okada | 35 | | 3 | Yamada | 28 | +---------+--------+------+ 2 rows in set (0.00 sec)
ちゃんと ageカラムの値が23以外のデータを取得できました。
また、次のように「!=」で記述しても同じ結果が得られます。
mysql> SELECT *FROM user_list WHERE age != 23; +---------+--------+------+ | user_id | name | age | +---------+--------+------+ | 2 | Okada | 35 | | 3 | Yamada | 28 | +---------+--------+------+ 2 rows in set (0.00 sec)
Oracleの場合
Oracleデータベースでノットイコールを使う場合、「<>」「!=」以外にも次の演算子があります。
- ^=
- ¬=
Oracle特有の演算子ですので、Oracleデータベースを使っている場合は覚えておきましょう。
ノットイコールでStringを判定
ノットイコールはString型の判定もできるのですか?
はい、可能です!サンプルを使って確認してみましょう。
先ほどのテーブルを使って、ノットイコールでStringを判定してみます。
nameカラム の値が「Okada」と等しくないデータを取得してみます。
mysql> SELECT * FROM user_list WHERE name <> 'Okada'; +---------+--------+------+ | user_id | name | age | +---------+--------+------+ | 1 | Tanaka | 23 | | 3 | Yamada | 28 | +---------+--------+------+ 2 rows in set (0.01 sec)
このように、期待したデータが取得できました。
なお、大文字・小文字の区別はないため小文字で比較しても同様の結果を得られます。
mysql> SELECT * FROM user_list WHERE name <> 'okada'; +---------+--------+------+ | user_id | name | age | +---------+--------+------+ | 1 | Tanaka | 23 | | 3 | Yamada | 28 | +---------+--------+------+ 2 rows in set (0.00 sec) mysql> SELECT * FROM user_list WHERE name <> 'OKADA'; +---------+--------+------+ | user_id | name | age | +---------+--------+------+ | 1 | Tanaka | 23 | | 3 | Yamada | 28 | +---------+--------+------+ 2 rows in set (0.00 sec)
ノットイコールでNULLの判定はできる?
ノットイコールを使って「NULL値」の判定もできますか?
NULL値はノットイコールで判定できません。判定をする場合は、「IS (NOT) NULL」を使います。その使い方を見ていきましょう。
例えば、先ほどのテーブルにNULL値の入ったデータを追加します。
mysql> SELECT * FROM user_list; +---------+--------+------+ | user_id | name | age | +---------+--------+------+ | 1 | Tanaka | 23 | | 2 | Okada | 35 | | 3 | Yamada | 28 | | 4 | NULL | NULL | +---------+--------+------+ 4 rows in set (0.00 sec)
このテーブル内の ageカラム の値が「NULL」のデータを取得してみましょう。
次のように記述します。
mysql> SELECT * FROM user_list WHERE age IS NULL; +---------+------+------+ | user_id | name | age | +---------+------+------+ | 4 | NULL | NULL | +---------+------+------+ 1 row in set (0.00 sec)
上記のように、NULL値が入ったデータが取得できました。
一方、NULL値以外の値が入ったデータを取得するには、「IS NOT NULL」を使います。
mysql> SELECT * FROM user_list WHERE age IS NOT NULL; +---------+--------+------+ | user_id | name | age | +---------+--------+------+ | 1 | Tanaka | 23 | | 2 | Okada | 35 | | 3 | Yamada | 28 | +---------+--------+------+ 3 rows in set (0.00 sec)
このように、期待した通りの結果が得られました。
なお、IS NULLの使い方については、次の記事で詳しく解説していますので参考までに。
【関連記事】
▶︎SQLのNULL比較にはIS NULL演算子を使う ストアドファンクションでも同様
まとめ
SQLのノットイコールの使い方について解説しました。
ノットイコールはテーブル内の検索においてよく使われる演算子です。
また、ノットイコール以外にもよく使われる演算子があるので、合わせて覚えておくとよいでしょう。
ぜひこの記事や他記事を参考に、使い方をマスターしてください!
NULL値の判定をする場合は、ノットイコールではなく「IS (NOT) NULL」を使います!