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

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(カラム名)
  1. SQLのビュー(VIEW)とマテリアライズドビューの違いを徹底比較

    データベースの主要な構成要素はテーブルですが、データへのアクセスを柔軟にカスタマイズするために「ビュー(View)」という概念が存在します。ビューを活用することで、特定のユーザーが必要なデータだけにアクセスできるよう制限することが可能になります。本記事では、ビューとマテリアライズドビュー(Materialized View)それぞれの特徴をもとに、両者の重要な違いを6つの観点から詳しく解説します。ビューとマテリアライズドビューの比較表番号項目ビューマテリアライズドビュー1定義SELECTクエリによって作成されるテーブルの論理的な仮想コピーです。結果はディスク上に保存されず、データが必要になるた

  2. MySQLとPostgreSQLの違いを徹底解説!特徴と比較ポイント

    データベースの選定において、多くの開発者が候補に挙げるのがMySQLとPostgreSQLです。どちらも世界中で広く利用されているオープンソースのデータベースですが、設計思想や搭載されている機能には重要な違いがあります。本記事では、それぞれの特徴と相違点をわかりやすく解説します。MySQLとはリレーショナルデータベース管理システム(RDBMS)です。Oracle Corporation(オラクル社)によって開発・提供されています。Windows、macOS、Linux、BSD、UNIX、z/OSなど、幅広いプラットフォームに対応しています。システムの拡張性には制約があり、基本的には標準的な構成