MySQLのISNULL()関数とIS NULL演算子の違いとは?使い方を例付きで解説
MySQLにおけるISNULL()関数とIS NULL演算子の違い
結論から言うと、ISNULL()関数とIS NULL演算子に機能上の大きな違いはありません。どちらもNULL値を判定するためのもので、基本的な動作は共通しています。
両者の唯一の違いは構文(書き方)にあります。
- ISNULL()関数:判定したい式を引数として渡す(例:
ISNULL(expr)) - IS NULL演算子:判定したい式を演算子の左側に記述する(例:
expr IS NULL)
動作については、どちらも式がNULLであれば「1」を返し、NULLでなければ「0」を返します。WHERE句で使用した場合も、まったく同じ結果が得られます。
実際の使用例で確認しよう
以下の例を見ると、両者が同じ動作をしていることがわかります。
mysql> Select 1 IS NULL; +-----------+ | 1 IS NULL | +-----------+ | 0 | +-----------+ 1 row in set (0.00 sec) mysql> Select ISNULL(1); +-----------+ | ISNULL(1) | +-----------+ | 0 | +-----------+ 1 row in set (0.00 sec)
上の例では、値「1」はNULLではないため、1 IS NULLとISNULL(1)のどちらも「0」を返しています。
次に、NULLになる式(1/0はMySQLではNULLとして扱われます)を使った例です。
mysql> Select ISNULL(1/0); +-------------+ | ISNULL(1/0) | +-------------+ | 1 | +-------------+ 1 row in set (0.00 sec) mysql> Select 1/0 IS NULL; +-------------+ | 1/0 IS NULL | +-------------+ | 1 | +-------------+ 1 row in set (0.00 sec)
式「1/0」はNULLと評価されるため、両方とも「1」を返しました。
WHERE句での実践的な比較
次に、テーブルからNULL値を持つ行を検索する実践的な例を見てみましょう。「Employee」テーブルのSalary列がNULLのレコードを抽出します。
まずはIS NULL演算子を使用した場合:
mysql> Select * from Employee WHERE Salary IS NULL; +----+-------+--------+ | ID | Name | Salary | +----+-------+--------+ | 7 | Aryan | NULL | | 8 | Vinay | NULL | +----+-------+--------+ 2 rows in set (0.00 sec)
続いてISNULL()関数を使用した場合:
mysql> Select * from Employee WHERE ISNULL(Salary); +----+-------+--------+ | ID | Name | Salary | +----+-------+--------+ | 7 | Aryan | NULL | | 8 | Vinay | NULL | +----+-------+--------+ 2 rows in set (0.00 sec)
このように、どちらの方法でもSalaryがNULLであるID 7(Aryan)とID 8(Vinay)の2行が取得でき、結果は完全に一致しています。
まとめ
| 項目 | ISNULL()関数 | IS NULL演算子 |
|---|---|---|
| 構文 | ISNULL(expr) | expr IS NULL |
| 戻り値 | NULLなら1、NULL以外なら0 | |
| 機能面の違い | なし(結果は同一) | |
MySQLにおいて、ISNULL()関数とIS NULL演算子は機能的に同じであり、選択するのは主にコードの可読性や好みの問題と言えます。ただし、標準SQLとの互換性を重視する場合はIS NULL演算子を使用するのが一般的です。
-
MySQLにおける「!=NULL」と「IS NOT NULL」の違いとは?
MySQLでは、値を!=NULLと比較すると、結果は必ずNULLになります。つまり、!=NULLという比較は意味を持ちません。NULLは「不明な値」を表すため、通常の比較演算子では判定できないのです。NULL値を判定するには、専用の演算子であるIS NOT NULLを使用します。ここでは、!=NULLとIS NOT NULLの違いを実際に確認するために、まずテーブルを作成します。テーブルの作成まず、次のコマンドでテーブルを作成します。mysql> create table DemoTable1970 (
-
MySQLで行を取得する際のAND演算子とOR演算子の違いとは?
MySQLにおけるAND演算子とOR演算子の違いANDとORの違いは次の通りです。ANDは、指定された両方の条件がすべて真(true)でなければ、全体の条件が真になりません。一方、ORは、どちらか一方の条件が真であれば、全体の条件が真になります。サンプルテーブルの作成まず、以下のコマンドでテーブルを作成しましょう。mysql> create table demo70-> (-> id int not null auto_increment primary key,-> name varchar(20),-> age int-> );Query OK, 0 r