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

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 NULLISNULL(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演算子を使用するのが一般的です。

  1. MySQLにおける「!=NULL」と「IS NOT NULL」の違いとは?

    MySQLでは、値を!=NULLと比較すると、結果は必ずNULLになります。つまり、!=NULLという比較は意味を持ちません。NULLは「不明な値」を表すため、通常の比較演算子では判定できないのです。NULL値を判定するには、専用の演算子であるIS NOT NULLを使用します。ここでは、!=NULLとIS NOT NULLの違いを実際に確認するために、まずテーブルを作成します。テーブルの作成まず、次のコマンドでテーブルを作成します。mysql> create table DemoTable1970     (    

  2. 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