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

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. 1つのクエリで複数のMySQLテーブルの出力を取得する方法

    1つのクエリで複数のテーブルから結果を取得するMySQLでは、セミコロン(;)で区切ることで、1つのクエリ内に複数のSQLステートメントを記述できます。この仕組みを利用すれば、複数のテーブルに対するSELECT文を一度に実行し、それぞれの結果セットを順番に受け取ることが可能です。例として、「Student_info」テーブルと「Student_detail」テーブルの両方から結果セットを取得する場合を見てみましょう。次のように、2つのSELECT文をセミコロンで区切って1行にまとめて記述します。mysql> Select Name, Address from Student_info;

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

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