MySQLでNULL値が複数ある列にDISTINCT句を使うとどうなる?返される結果を解説
NULL値が複数ある列にDISTINCT句を使った場合のMySQLの動作
MySQLでは、複数のNULL値が含まれる列に対してDISTINCT句を使用すると、すべてのNULL値は同一の値として扱われます。
これはDISTINCT句の仕様によるもので、結果セットにはNULL値が1つだけ返され、残りの重複するNULL値は除外されます。一見するとNULLは「値ではない」ため区別されそうに思えますが、MySQLはDISTINCT処理においてNULL同士を等しいものとみなす点に注意が必要です。
具体例:testingテーブルでの確認
ここでは、列「Lname」に複数のNULL値が含まれるテーブル「testing」を例に挙げてみましょう。
mysql> Select * from testing; +------+---------+---------+ | id | fname | Lname | +------+---------+---------+ | 200 | Raman | Kumar | | 201 | Sahil | Bhalla | | 202 | Gaurav | NULL | | 203 | Aarav | NULL | | 204 | Harshit | Khurana | | 205 | Rahul | NULL | | 206 | Piyush | Kohli | | 207 | Lovkesh | NULL | +------+---------+---------+ 8 rows in set (0.00 sec) mysql> SELECT DISTINCT Lname from testing; +---------+ | Lname | +---------+ | Kumar | | Bhalla | | NULL | | Khurana | | Kohli | +---------+ 5 rows in set (0.00 sec)
結果のポイント
上記の例では、テーブル「testing」の「Lname」列にはNULL値が4件含まれています。しかし、SELECT DISTINCT Lnameを実行した結果セットには、NULLが1行だけ表示されていることがわかります。
このように、DISTINCT句を使った場合、MySQLは重複するNULL値をすべて排除し、1つのNULLのみを返します。重複データの集計やユニークな値の一覧を取得する際には、このNULLの扱いを理解しておくことが重要です。
-
MySQLのLIKE句を使って「Joh」で始まる複数の値を取得する方法
まず、テーブルを作成します。mysql> create table DemoTable ( Name varchar(40) ); Query OK, 0 rows affected (0.55 sec)次に、INSERTコマンドを使用してテーブルにレコードを挿入します。mysql> insert into DemoTable values(John); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable values(Sam); Query OK, 1 row affected (0.13
-
MySQLでWHERE句に複数の条件を指定してデータを更新する方法
MySQLでWHERE句に複数の値を指定して更新する方法MySQLのUPDATE文では、WHERE句に複数の条件を組み合わせることで、より正確に対象のレコードを絞り込んで更新することができます。AND演算子やOR演算子を使うことで、複数のカラムの値を条件として指定可能です。この記事では、実際にテーブルを作成し、WHERE句に複数の条件を指定してデータを更新する手順を具体的な例とともに解説します。まずはテーブルを作成する最初に、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable -> ( -> Id int, -&