SELECT
分によって引き出された行の、非 NULL
値の数を戻します。結果は BIGINT
値になります。
一致する行がない場合、COUNT()
は 0
を戻します。
mysql>SELECT student.student_name,COUNT(*)
->FROM student,course
->WHERE student.student_id=course.student_id
->GROUP BY student_name;
COUNT(*)
は、NULL
値を含む含まざるに関わらず、引き出された行の数を戻すという点でやや異なります。
COUNT(*)
は、SELECT
がひとつのテーブルから検索し、他のカラムは引き出されず、また WHERE
カラムがない場合、きわめて素早く戻すよう最適化されています。例 :
mysql> SELECT COUNT(*) FROM student;
この最適化は、正確な行の数がこの保存エンジンに保管されており、素早いアクセスが可能なため、MyISAM
テーブルにのみ適用します。InnoDB
をはじめとするトランザクション保存エンジンに関しては、正確な行の数を保存するのは、複数のトランザクションが起こって、それぞれが行の係数に影響をおよぼす場合があるため、より困難になります。