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

MySQLで全レコード数を取得するにはCOUNT(*)を使うべき?COUNT関数との違いを解説

MySQLのCOUNT(*)とCOUNT(カラム名)の違いとは

MySQLでテーブル内のレコード数を取得する際、NULL値も含めた「すべての行」を数えたい場合には、COUNT(*)を使用します。一方、COUNT(カラム名)はNULL値を除外してカウントするため、カラムにNULLが含まれている場合は両者の結果が異なります。

一般的に、COUNT(*)COUNT()よりも高速に動作するため、単純に行数を取得したい場面ではCOUNT(*)の使用が推奨されます。

COUNT(*)の基本構文

COUNT(*)を使用する構文は以下のとおりです。

SELECT COUNT(*) AS 任意の変数名 FROM テーブル名;

動作確認用のサンプルテーブルを作成する

それでは、実際にテーブルを作成して挙動を確認してみましょう。まずはテーブル作成のクエリです。

mysql> create table CountingDemo
    -> (
    -> BookId int
    -> );
Query OK, 0 rows affected (0.60 sec)

次に、INSERTコマンドでレコードを挿入します。ここでは意図的に値を指定しないINSERT文を実行し、NULL値を含むデータを作成しています。

mysql> insert into CountingDemo values(100);
Query OK, 1 row affected (0.13 sec)

mysql> insert into CountingDemo values();
Query OK, 1 row affected (0.17 sec)

mysql> insert into CountingDemo values(200);
Query OK, 1 row affected (0.12 sec)

mysql> insert into CountingDemo values(300);
Query OK, 1 row affected (0.16 sec)

mysql> insert into CountingDemo values();
Query OK, 1 row affected (0.12 sec)

SELECT文でテーブル内の全レコードを表示してみます。

mysql> select * from CountingDemo;

実行結果

+--------+
| BookId |
+--------+
|    100 |
|   NULL |
|    200 |
|    300 |
|   NULL |
+--------+
5 rows in set (0.00 sec)

このように、BookIdカラムにはNULL値が2件含まれている状態です。

COUNT(*)とCOUNT(カラム名)の結果の違い

カラムにNULL値が存在しない場合、COUNT(*)COUNT(カラム名)は同じ結果を返します。しかし、今回の例のようにBookIdカラムにNULL値が含まれている場合は、両者で結果が異なる点に注意が必要です。

COUNT(*)を使用した場合

COUNT(*)はNULL値を含むすべての行をカウントします。

mysql> select count(*) as AllValue from CountingDemo;

実行結果

+----------+
| AllValue |
+----------+
|        5 |
+----------+
1 row in set (0.00 sec)

結果は「5」となり、NULLを含む全レコード数が返されました。

COUNT(カラム名)を使用した場合

一方、COUNT(カラム名)はNULL値をカウント対象から除外するため、異なる結果になります。

mysql> select count(BookId) as NotNullValue from CountingDemo;

実行結果

+--------------+
| NotNullValue |
+--------------+
|            3 |
+--------------+
1 row in set (0.00 sec)

結果は「3」となり、NULL以外の値を持つレコードのみがカウントされました。

まとめ

  • COUNT(*):NULL値を含むすべての行数を取得できる。パフォーマンス面でも有利。
  • COUNT(カラム名):指定したカラムがNULLでない行のみをカウントする。

テーブル全体のレコード数を知りたい場合はCOUNT(*)を、特定カラムの有効なデータ件数を知りたい場合はCOUNT(カラム名)を使い分けるのがポイントです。

  1. MySQLの1つのクエリで特定のレコード(重複データ)の出現回数をカウントする方法

    はじめにMySQLでテーブル内の特定のレコード(重複データ)が何回出現するかを調べたい場合、集計関数の COUNT() と GROUP BY 句を組み合わせることで、1つのクエリで簡単に実現できます。この記事では、実際にサンプルテーブルを作成し、重複データの出現回数をカウントする手順をわかりやすく解説します。サンプルテーブルの作成まず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable (    StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,    

  2. MySQLで指定した2つの日付の間にあるレコードの合計値を取得する方法

    はじめにMySQLで特定の2つの日付の間に存在するレコードの数値合計を求めたい場合は、BETWEENキーワードを使用します。BETWEEN句は、指定した範囲(開始日と終了日を含む)に該当するレコードを抽出できる便利な演算子です。この記事では、実際にテーブルを作成し、日付の範囲を指定して合計値を取得する手順を解説します。1. テーブルの作成まず、サンプル用のテーブルを作成します。ここでは「Value(数値)」と「PurchaseDate(購入日時)」というカラムを持つテーブルを定義します。mysql> create table DemoTable1444  -> (  -> V