MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでクエリの総行数を取得する最速の方法|サブクエリとCOUNT(*)の使い方を解説

はじめに

MySQLでは、サブクエリと集計関数COUNT(*)を組み合わせることで、テーブルの総行数を取得しながら各レコードのデータも同時に表示できます。この記事では、実際にテーブルを作成し、データを挿入して、総行数を取得するクエリの実行手順を詳しく解説します。

1. テーブルの作成

まず、デモ用のテーブルを作成します。

mysql> create table DemoTable
(
    StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentFirstName varchar(20),
    StudentAge int
);
Query OK, 0 rows affected (0.48 sec)

このテーブルは、学生ID(自動採番の主キー)、学生名、年齢の3つのカラムを持つ構造です。

2. レコードの挿入

次に、INSERTコマンドを使ってテーブルにレコードを挿入していきます。

mysql> insert into DemoTable(StudentFirstName,StudentAge) values('John',23);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(StudentFirstName,StudentAge) values('Larry',21);
Query OK, 1 row affected (0.40 sec)
mysql> insert into DemoTable(StudentFirstName,StudentAge) values('Johnny',23);
Query OK, 1 row affected (0.43 sec)
mysql> insert into DemoTable(StudentFirstName,StudentAge) values('Chris',21);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable(StudentFirstName,StudentAge) values('David',23);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(StudentFirstName,StudentAge) values('James',21);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable(StudentFirstName,StudentAge) values('Jace',24);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(StudentFirstName,StudentAge) values('Mike',21);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(StudentFirstName,StudentAge) values('Robert',25);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(StudentFirstName,StudentAge) values('Mike',22);
Query OK, 1 row affected (0.23 sec)

3. テーブル内の全レコードを確認

SELECT文を使って、テーブル内のすべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

実行結果は以下の通りです。

+-----------+------------------+------------+
| StudentId | StudentFirstName | StudentAge |
+-----------+------------------+------------+
| 1         | John             | 23         |
| 2         | Larry            | 21         |
| 3         | Johnny           | 23         |
| 4         | Chris            | 21         |
| 5         | David            | 23         |
| 6         | James            | 21         |
| 7         | Jace             | 24         |
| 8         | Mike             | 21         |
| 9         | Robert           | 25         |
| 10        | Mike             | 22         |
+-----------+------------------+------------+
10 rows in set (0.00 sec)

現在、テーブルには10件のレコードが登録されています。

4. 総行数を取得するクエリの実行

ここからが本題です。サブクエリとして(select count(*) from DemoTable)を使用することで、各行に対して総行数を表示することができます。

mysql> select StudentFirstName,(select count(*) from DemoTable) AS Total_Count from DemoTable limit 10;

実行結果は以下の通りです。

+------------------+-------------+
| StudentFirstName | Total_Count |
+------------------+-------------+
| John             | 10          |
| Larry            | 10          |
| Johnny           | 10          |
| Chris            | 10          |
| David            | 23          |
| James            | 10          |
| Jace             | 10          |
| Mike             | 10          |
| Robert           | 10          |
| Mike             | 10          |
+------------------+-------------+
10 rows in set (0.03 sec)

ポイント解説

  • サブクエリの仕組み: (select count(*) from DemoTable)の部分がスカラーサブクエリとして機能し、メインクエリの各行ごとにテーブル全体の行数を返します。
  • AS句による別名付け: AS Total_Countを使うことで、結果セットのカラム名がわかりやすくなります。
  • LIMIT句: 大量のレコードがある場合でも、limit 10のように取得件数を制限すれば、パフォーマンスへの影響を抑えられます。

この方法を使えば、ページネーション処理などで「全件数」と「表示中のレコード」を同時に取得したい場面で非常に便利です。ぜひ実際の開発でも活用してみてください。

  1. 【MySQL】UNION ALLを使って複数テーブルのCOUNT合計を1つのクエリで取得する方法

    はじめにMySQLでは、複数のテーブルに保存されたデータの件数(COUNT)をまとめて集計したいケースがあります。そんなときに便利なのがUNION ALLです。UNION ALLを使えば、複数のSELECT文の結果を1つに結合し、その合計値を単一のクエリで取得できます。本記事では、サンプルテーブルを作成しながら、具体的な手順をわかりやすく解説します。1つ目のテーブルを作成するまず、以下のCREATE TABLE文で最初のテーブル「DemoTable1」を作成します。mysql> create table DemoTable1-> (-> Id int,-> Name v

  2. 【MySQL】SUM()関数を使って単一クエリで特定の列値ごとの複数カウントを取得する方法

    特定の列値に基づくカウントを1つのMySQLクエリで複数取得するには、集計関数SUM()を活用します。MySQLでは「列 = 値」という条件式が真なら1、偽なら0を返すため、その結果をSUM()で合計することで、条件に一致する行数を数えられます。まずはサンプル用のテーブルを作成しましょう。 mysql> create table DemoTable1790 ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar(20), Score int ); Query OK, 0 rows af