MySQLの1つのクエリで複数テーブルの行数を同時にカウントする方法
はじめに
MySQLでは、サブクエリ(スカラーサブクエリ)を組み合わせることで、1つのSELECT文で複数のテーブルの行数を同時に取得できます。この記事では、実際にテーブルを作成し、データを挿入して、2つのテーブルの行数を1回のクエリでカウントする手順を解説します。
手順1:1つ目のテーブルを作成する
まず、以下のようにテーブルを作成します。
mysql> create table DemoTable1
(
Name varchar(40)
);
Query OK, 0 rows affected (0.81 sec)
レコードの挿入
INSERTコマンドを使って、いくつかのレコードを追加します。
mysql> insert into DemoTable1 values('Chris');
Query OK, 1 row affected (0.48 sec)
mysql> insert into DemoTable1 values('Robert');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1 values('Mike');
Query OK, 1 row affected (0.10 sec)
レコードの確認
SELECT文ですべてのレコードを表示します。
mysql> select *from DemoTable1;
実行結果は以下のとおりです。
+--------+ | Name | +--------+ | Chris | | Robert | | Mike | +--------+ 3 rows in set (0.00 sec)
手順2:2つ目のテーブルを作成する
続いて、2つ目のテーブルを作成します。
mysql> create table DemoTable2
(
Score int
);
Query OK, 0 rows affected (1.16 sec)
レコードの挿入
INSERTコマンドでスコアデータを追加します。
mysql> insert into DemoTable2 values(86); Query OK, 1 row affected (0.22 sec) mysql> insert into DemoTable2 values(98); Query OK, 1 row affected (0.08 sec) mysql> insert into DemoTable2 values(75); Query OK, 1 row affected (0.14 sec)
レコードの確認
mysql> select *from DemoTable2;
実行結果は以下のとおりです。
+-------+ | Score | +-------+ | 86 | | 98 | | 75 | +-------+ 3 rows in set (0.00 sec)
手順3:1つのクエリで両テーブルの行数をカウントする
ここが本題です。SELECT句の中にスカラーサブクエリを記述することで、2つのテーブルそれぞれの行数を1回のクエリで取得できます。
mysql> select
(select count(*) from DemoTable1) AS FirstTableCount,
(select count(*) from DemoTable2) AS SecondTableCount
from dual;
実行結果は以下のとおりです。
+-----------------+------------------+ | FirstTableCount | SecondTableCount | +-----------------+------------------+ | 3 | 3 | +-----------------+------------------+ 1 row in set (0.00 sec)
ポイント解説
- スカラーサブクエリ: SELECT句内で
(select count(*) from テーブル名)の形式で記述すると、その結果が1つの値として返されます。 - AS句による別名付け:
AS FirstTableCountのように別名を付けることで、結果の列名が分かりやすくなります。 - FROM dualについて: MySQLでは
FROM dualを省略することも可能ですが、Oracleなど他のデータベースとの互換性を考慮して記述されることもあります。 - 応用: 同じ手法を使えば、3つ以上のテーブルの行数も同様に1つのクエリで取得できます。
まとめ
SELECT句にスカラーサブクエリを並べるだけで、JOINやUNIONを使わずに複数テーブルの行数を効率的に取得できます。テーブルごとに個別にクエリを実行する必要がないため、アプリケーション側の処理もシンプルになります。ぜひ活用してみてください。
-
1つのクエリで複数のMySQLテーブルの出力を取得する方法
1つのクエリで複数のテーブルから結果を取得するMySQLでは、セミコロン(;)で区切ることで、1つのクエリ内に複数のSQLステートメントを記述できます。この仕組みを利用すれば、複数のテーブルに対するSELECT文を一度に実行し、それぞれの結果セットを順番に受け取ることが可能です。例として、「Student_info」テーブルと「Student_detail」テーブルの両方から結果セットを取得する場合を見てみましょう。次のように、2つのSELECT文をセミコロンで区切って1行にまとめて記述します。mysql> Select Name, Address from Student_info;
-
MySQLでテーブルの最後の10件のレコードを取得する方法
MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected