SQLでレコード数をカウントする方法:COUNT(*)とCOUNT(列名)の違い
SQLにおけるCOUNT(*)とCOUNT(列名)の違い
COUNT(*)
COUNT(*)
は、テーブルのすべての行数をカウントします。NULL値を含む行もカウントされます。
例:
SELECT COUNT(*) FROM テーブル名;
このクエリは、テーブル名テーブルのすべての行数を返します。
COUNT(列名)
COUNT(列名)
は、指定した列のNULL値ではない行数をカウントします。
SELECT COUNT(列名) FROM テーブル名;
機能 | COUNT(*) | COUNT(列名) |
---|---|---|
カウント対象 | すべての行 | NULL値ではない行 |
NULL値 | 含む | 含まない |
テーブルに以下のデータがあるとします。
| ID | 名前 | 年齢 |
|---|---|---|
| 1 | 田中 | 20 |
| 2 | 佐藤 | NULL |
| 3 | 高橋 | 30 |
COUNT(*)
は 3 を返す
- テーブルのすべての行数を知りたい場合は
COUNT(*)
を使用します。 - 特定の列の値のみをカウントしたい場合は
COUNT(列名)
を使用します。
注意:
COUNT(*)
は、COUNT(1)
と同じ結果になります。COUNT(列名)
は、列にインデックスが張られている場合、パフォーマンスが向上する場合があります。
-- テーブル作成
CREATE TABLE テーブル名 (
ID INT,
名前 VARCHAR(255),
年齢 INT
);
-- データ挿入
INSERT INTO テーブル名 (ID, 名前, 年齢) VALUES (1, '田中', 20);
INSERT INTO テーブル名 (ID, 名前, 年齢) VALUES (2, '佐藤', NULL);
INSERT INTO テーブル名 (ID, 名前, 年齢) VALUES (3, '高橋', 30);
-- COUNT(*) の使用
SELECT COUNT(*) FROM テーブル名;
-- 結果: 3
-- COUNT(列名) の使用
SELECT COUNT(名前) FROM テーブル名;
-- 結果: 2
-- COUNT(列名) と WHERE 句の併用
SELECT COUNT(年齢) FROM テーブル名 WHERE 年齢 > 20;
-- 結果: 1
このコードを実行することで、COUNT(*)
とCOUNT(列名)
の違いを理解することができます。
COUNT(*)とCOUNT(列名)の代替方法
DISTINCT
キーワードを使用して、重複するレコードを除外してカウントすることができます。
SELECT COUNT(DISTINCT 名前) FROM テーブル名;
GROUP BY
句を使用して、列ごとにレコード数をカウントすることができます。
SELECT 年齢, COUNT(*) FROM テーブル名 GROUP BY 年齢;
SELECT (SELECT COUNT(*) FROM テーブル名) AS 総レコード数;
COUNT(*)
: テーブルのすべての行数をカウントするDISTINCT
: 重複するレコードを除外してカウントするサブクエリ
: サブクエリを使用してレコード数をカウントする
これらの方法を理解することで、状況に応じて適切な方法を選択することができます。
sql