【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される。
練習問題
以下からダウンロード可能です。
また、ダウンロードしたら以下のようにして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つのカラムで構成されている)を使って答えを導いてください。