SQLを利用してテーブルのレコード数を調べたいときに便利なCOUNT関数について初心者向けにわかりやすく1分で解説します。
参考 SQLとは?
SELECT COUNT(対象カラム) FROM テーブル名 WHERE 条件(任意);
COUNT関数は指定したテーブル/カラムに存在するレコード数を返してくれます。
DISTINCTキーワードやGROUP BYキーワードと同時に利用したりすると、できることがたくさん増えるので理解必須の基本知識です。
このページではCOUNT関数の構文ルール / 利用する際の注意点を初心者でも理解できるように1分で解説します。
プログラマー/システムエンジニアを目指す方であれば知らないと恥ずかしい超・重要知識です。是非最後までご覧ください。
SQL:COUNT関数の基本
COUNT関数の基本構文ルールは以下の通り。
SELECT COUNT(対象カラム) FROM テーブル名 WHERE 条件(任意);
レコード数をカウントしたいカラム名を "COUNT" で囲んであげるだけの簡単な構文です。もしくは、カラムを指定せずに *(アスタリスク)でテーブルのレコード数をシンプルに取得することも可能。
以下のテーブルに含まれるレコード数をカウントしてみます。
SELECT COUNT(*) FROM MemberList; -- 結果「8」
結果は「8」となります。レコード数が8個あるので、その結果が返ってきてくるということ。
カラムを指定してCOUNT関数を利用する
先ほどは COUNT(*) のようにカラムを指定せずに単純にレコード数をカウントしました。
SELECT COUNT(*) FROM MemberList; --カラムを指定せずにレコード数をカウント
ですが、例えば Department カラムではNULL値が2行含まれており、このNULLを除外したレコード件数をカウントしたいような場合も存在します。
この場合は、Departmentカラムを以下のように指定してカウントすることで実現することができます。
SELECT COUNT(Department) FROM MemberList; --カラム "Department" を指定してカウント
この場合、NULL値がカウントされないので、結果は「6」となります。
COUNT関数の注意点
COUNT関数の大きな注意点がこのNULLのカウント方法にあります。
例えば、以下のテーブルをカラムを指定せずにカウントしてみます。
SELECT COUNT(*) FROM MemberList; --カラムを指定せずにレコード数をカウント
普通に考えるとどのカラムもNULLなので、結果は0となりそうですが、実はこのSQLを実行すると「8」が返って来ます。
これは、COUNT関数が以下のような性質を持っていることが理由です。
つまり、以下のSQLを実行した場合は「8」と「0」が取得されるということ。
SELECT COUNT(*), COUNT(Department) FROM MemberList; --COUNT(*)⇒8 / COUNT(Department)⇒0
以上がCOUNT関数の大きな注意点です。SQL初心者にとって陥りがちな罠の1つですので、しっかりと押さえておきましょう。
Tips:DISTINCTキーワードとの合わせ技
COUNT関数はDISTINCTと組み合わせて利用することも可能です。
SELECT COUNT(DISTINCT Department) FROM MemberList; -- 結果「3」 -- Department列の重複を削除してカウント
Department列には「総務部」「財務部」「営業部」の3つの重複しないレコードが存在するため、結果は3となります。
先ほど解説した通り、COUNT(カラム名) とした場合はNULLを除外するので4では返って来ません。
現在のスキルに今一つ満足できていないシステムエンジニア/プログラマーの方へ。
SQLやデータベースの仕組みを1から学習したい方(学び直したい方)向けに、現役エンジニア達のスキルを結集して 完全無料 のSQL教材を作成しました。是非この機会にブックマークを!
読者料典 【完全無料】SQL:初心者向け学習ロードマップ ←こちらから!