Developer

【SQL基礎】COUNT関数の基本構文
2021.01.27
Lv1

【SQL基礎】COUNT関数の基本構文

COUNT関数は対象カラムのレコード数を返す関数です。
つまり、レコードの数をカウントしてくれる関数です。
SELECT文と併せて使います。

書式は以下の通りです。

SELECT COUNT(対象カラム名)
FROM 対象テーブル名;

 

ここからは、例として以下のテーブル(テーブル名:teachers)を使用します。


1.単一カラムを指定した場合

例1.teachersテーブルのnameカラムのレコード数を取得する。

SELECT COUNT(name)
FROM teachers;

nameカラムには4つのレコードが存在するということがわかります。


2.テーブル全体を指定した場合

テーブル全体を指定してレコード数をCOUNTすることもできます。
カラム名として*(アスタリスク:テーブル全体を意味する記号)を指定します。

例2.teachersテーブル全体のレコード数を取得する。

SELECT COUNT(*)
FROM teachers;

teachersテーブルには4つのレコードが存在するということがわかります。


3.NULLが存在する場合

例1と例2だけを見ると、単一カラム指定でもテーブル全体指定でも同じ結果が得られるように見えます。
しかし単一のカラムを指定する場合とテーブル全体を指定する場合には明確な違いがあります。
以下の例で確認しましょう。

例3.teachersテーブルのscoreカラムのレコード数を取得する。

SELECT COUNT(score)
FROM teachers;

例1と同じく単一のカラムを指定していますが、レコード数が4ではなく3になっています。

理由は以下の通りです。
teachersテーブルのscoreカラムにはNULLが格納されているフィールドがあります。


NULLというのは何も値が入っていない状態のことです。数値の0とは違います。
単一のカラムを指定した場合、NULLが格納されているフィールドはCOUNTされません。
したがってscoreカラムのレコード数は3であるとCOUNTされます。


4.複数のカラムを指定する場合

複数のカラムのレコード数を同時に確認することも可能です。
カンマで区切って指定します。

例4.teachersテーブルのnameカラムとscoreカラムを指定してレコード数を取得する。

SELECT COUNT(name), COUNT(score)
FROM teachers;

NULLの有無によるレコード数の違いがよくわかる結果が得られました。


学習のポイント

・COUNT関数はレコード数を返す集約関数である。

・単一カラムを指定した場合、NULLが格納されているフィールドはCOUNTされない。

・テーブル全体を指定した場合、NULLの有無にかかわらず全体のレコード数がCOUNTされる。


練習問題

問題として使用するデータは「SQL練習問題」のものを使用しています。
以下からダウンロード可能です。
また、ダウンロードしたら以下のようにしてworldcup2014データベースを作成し、インポートしてください。
※worldcup2014.zip解凍してできるworldcup2014.sqlファイルをCドライブ直下に配置した場合。

worldcup2014.zip

[sql] CREATE DATABASE worldcup2014;

use worldcup2014

source C:\worldcup2014.sql
[/sql]

1.ワールドカップに参加しているのは何か国でしょうか。
countriesテーブル(id,name,ranking,group_nameの4つのカラムで構成されている)を使って答えを導いてください。

答え
[sql] SELECT (*)
FROM countries;
[/sql]

32か国です。

countriesテーブル全体のレコード数をCOUNTすることで答えを導くことができます。

idカラムやnameカラムなどの単一のカラムを指定して答えを求めることもできますが、NULLが格納されているフィールドがある場合は数が変わってしまうので注意が必要です。

 

 

連載目次リンク

SQL基礎 連載目次

関連する連載リンク

SQL練習問題 一覧まとめ