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(カラム名)を使い分けるのがポイントです。
-
MySQLの1つのクエリで特定のレコード(重複データ)の出現回数をカウントする方法
はじめにMySQLでテーブル内の特定のレコード(重複データ)が何回出現するかを調べたい場合、集計関数の COUNT() と GROUP BY 句を組み合わせることで、1つのクエリで簡単に実現できます。この記事では、実際にサンプルテーブルを作成し、重複データの出現回数をカウントする手順をわかりやすく解説します。サンプルテーブルの作成まず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-
MySQLで指定した2つの日付の間にあるレコードの合計値を取得する方法
はじめにMySQLで特定の2つの日付の間に存在するレコードの数値合計を求めたい場合は、BETWEENキーワードを使用します。BETWEEN句は、指定した範囲(開始日と終了日を含む)に該当するレコードを抽出できる便利な演算子です。この記事では、実際にテーブルを作成し、日付の範囲を指定して合計値を取得する手順を解説します。1. テーブルの作成まず、サンプル用のテーブルを作成します。ここでは「Value(数値)」と「PurchaseDate(購入日時)」というカラムを持つテーブルを定義します。mysql> create table DemoTable1444 -> ( -> V