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

MySQLで複数のテーブルの行数(COUNT(*))を1つのクエリで取得する方法

MySQLでは、サブクエリを組み合わせることで、複数のテーブルの行数を1つのクエリで同時に取得できます。基本となる構文は以下の通りです。

SELECT
    (SELECT COUNT(*) FROM テーブル名1) AS エイリアス名1,
    (SELECT COUNT(*) FROM テーブル名2) AS エイリアス名2
FROM dual;

構文のポイント

各テーブルに対して COUNT(*) を含むスカラーサブクエリを作成し、それらを SELECT 句の中に並べます。MySQLでは FROM dual を指定することで、実際のテーブルを参照しないままサブクエリを評価できます(なお、MySQLでは FROM dual は省略することも可能です)。

実際に試してみよう

ステップ1:1つ目のテーブルを作成する

mysql> CREATE TABLE DemoTable1
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY
-> );
Query OK, 0 rows affected (0.56 sec)

ステップ2:レコードを挿入する

INSERT コマンドを使って、空のレコードを6件まとめて挿入します。

mysql> INSERT INTO DemoTable1 VALUES(),(),(),(),(),();
Query OK, 6 rows affected (0.24 sec)
Records: 6 Duplicates: 0 Warnings: 0

ステップ3:データを確認する

mysql> SELECT * FROM DemoTable1;

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

+----+
| Id |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
+----+
6 rows in set (0.00 sec)

ステップ4:2つ目のテーブルを作成する

mysql> CREATE TABLE DemoTable2
-> (
-> Name varchar(20)
-> );
Query OK, 0 rows affected (0.64 sec)

ステップ5:レコードを挿入する

mysql> INSERT INTO DemoTable2 VALUES('Chris');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable2 VALUES('David');
Query OK, 1 row affected (0.31 sec)

ステップ6:データを確認する

mysql> SELECT * FROM DemoTable2;

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

+-------+
| Name |
+-------+
| Chris |
| David |
+-------+
2 rows in set (0.00 sec)

複数テーブルの行数をカウントするクエリ

準備ができたら、両方のテーブルの行数を一度に取得してみましょう。

mysql> SELECT
-> (SELECT COUNT(*) FROM DemoTable1) AS FirstTableCount,
-> (SELECT COUNT(*) FROM DemoTable2) AS SecondTableCount
-> FROM dual;

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

+-----------------+------------------+
| FirstTableCount | SecondTableCount |
+-----------------+------------------+
| 6 | 2 |
+-----------------+------------------+
1 row in set (0.00 sec)

まとめ

このように、SELECT 句内に複数の COUNT(*) サブクエリを記述すれば、JOINやUNIONを使わずに複数テーブルの行数を簡単に取得できます。テーブルが増えた場合も、同じ要領でサブクエリを追加していくだけで対応可能です。また、各テーブル名と行数をセットで縦持ち形式にしたい場合は、UNION ALL を利用する方法もありますので、用途に応じて使い分けるとよいでしょう。

  1. 複数テーブルのデータを組み合わせてMySQLビューを作成する方法(UNION演算子の活用)

    MySQLでは、UNION演算子を使うことで、2つ以上のSELECT文の結果セットを1つに結合できます。この特性を利用すれば、複数のテーブルから取得したデータをまとめたビュー(VIEW)を簡単に作成できます。ここでは、以下のような2つの基本テーブル「Student_info」と「Student_detail」を例に説明します。サンプルテーブル:Student_infomysql> Select * from Student_info; +------+---------+------------+------------+ | id | Name | Address |

  2. MySQLでテーブルの最後の10件のレコードを取得する方法

    MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected