MySQLのCOUNT(*)とCOUNT(カラム名)の違いとは?NULL値の扱いを徹底解説
MySQLにおけるCOUNT(*)とCOUNT(カラム名)の違い
MySQLでレコード数を取得する際によく使われる COUNT(*) と COUNT(カラム名) には、NULL値の扱いにおいて重要な違いがあります。
- COUNT(*): カラムにNULLが含まれていても、テーブル内のすべての行をカウントします。
- COUNT(カラム名): 指定したカラムがNULLである行を除外してカウントします。
ここからは、実際にテーブルを作成して両者の違いを確認していきましょう。
検証用テーブルの作成
まず、以下のクエリでテーブルを作成します。
mysql> create table ifNotNullDemo
-> (
-> Name varchar(20)
-> );
Query OK, 0 rows affected (0.54 sec)
テストデータの挿入
次に、INSERTコマンドを使用して複数のレコードを挿入します。通常の文字列に加えて、空文字列('')、NULL、数値の0など、さまざまな種類の値を意図的に含めています。
mysql> insert into ifNotNullDemo values('Chris');
Query OK, 1 row affected (0.15 sec)
mysql> insert into ifNotNullDemo values('');
Query OK, 1 row affected (0.13 sec)
mysql> insert into ifNotNullDemo values('Robert');
Query OK, 1 row affected (0.24 sec)
mysql> insert into ifNotNullDemo values(null);
Query OK, 1 row affected (0.30 sec)
mysql> insert into ifNotNullDemo values(0);
Query OK, 1 row affected (0.16 sec)
登録データの確認
SELECT文でテーブル内のすべてのレコードを表示してみます。
mysql> select *from ifNotNullDemo;
実行結果は以下の通りです。
+--------+ | Name | +--------+ | Chris | | | | Robert | | NULL | | 0 | +--------+ 5 rows in set (0.00 sec)
合計5件のレコードが登録されており、そのうち1件がNULL値であることがわかります。
ケース1:COUNT(*)の場合
COUNT(*) を実行すると、NULL行も含めたすべての行がカウントされます。
mysql> select count(*) from ifNotNullDemo;
実行結果:
+----------+ | count(*) | +----------+ | 5 | +----------+ 1 row in set (0.02 sec)
結果は「5」です。NULLを含む全行がカウントされています。
ケース2:COUNT(カラム名)の場合
次に、COUNT(Name) のクエリを実行します。
mysql> select count(Name) from ifNotNullDemo;
実行結果:
+-------------+ | count(Name) | +-------------+ | 4 | +-------------+ 1 row in set (0.00 sec)
結果は「4」です。NameカラムがNULLの行はカウント対象から除外されました。
まとめ:使い分けのポイント
このように、COUNT(*) と COUNT(カラム名) の最大の違いはNULLの扱いにあります。なお、空文字列('')や数値の0はNULLではないため、どちらの方法でもカウントされる点に注意してください。
- テーブル全体の行数を知りたい場合 →
COUNT(*) - 特定カラムに実際に値が入っている行数を知りたい場合 →
COUNT(カラム名)
-
SQLのビュー(VIEW)とマテリアライズドビューの違いを徹底比較
データベースの主要な構成要素はテーブルですが、データへのアクセスを柔軟にカスタマイズするために「ビュー(View)」という概念が存在します。ビューを活用することで、特定のユーザーが必要なデータだけにアクセスできるよう制限することが可能になります。本記事では、ビューとマテリアライズドビュー(Materialized View)それぞれの特徴をもとに、両者の重要な違いを6つの観点から詳しく解説します。ビューとマテリアライズドビューの比較表番号項目ビューマテリアライズドビュー1定義SELECTクエリによって作成されるテーブルの論理的な仮想コピーです。結果はディスク上に保存されず、データが必要になるた
-
MySQLとPostgreSQLの違いを徹底解説!特徴と比較ポイント
データベースの選定において、多くの開発者が候補に挙げるのがMySQLとPostgreSQLです。どちらも世界中で広く利用されているオープンソースのデータベースですが、設計思想や搭載されている機能には重要な違いがあります。本記事では、それぞれの特徴と相違点をわかりやすく解説します。MySQLとはリレーショナルデータベース管理システム(RDBMS)です。Oracle Corporation(オラクル社)によって開発・提供されています。Windows、macOS、Linux、BSD、UNIX、z/OSなど、幅広いプラットフォームに対応しています。システムの拡張性には制約があり、基本的には標準的な構成