以前に「調査クエリー」と称して、ウェブ画面でSQL文を入力して実行できるツールを作成しました。それ以来いろいろなSQL文を作成することになったのですが、これはできないだろうというのが最近可能と判って、大喜びです。

DBテーブルのレコード数取得のSQL文は、例えば、

mysql> select count(*) as '商品数' from product;
+-----------+
| 商品数    |
+-----------+
|     31228 |
+-----------+
1 row in set (0.01 sec)

というように、fromでテーブルを指定して、count(*)です。

1つ以上のテーブルのレコード数を取得するには、もう1つのSQL文を連続して実行します。

mysql> select count(*) as '商品数' from product;select count(*) as '店舗数' from shop;
+-----------+
| 商品数    |
+-----------+
|     31228 |
+-----------+
1 row in set (0.01 sec)

+-----------+
| 店舗数    |
+-----------+
|       947 |
+-----------+
1 row in set (0.00 sec)

しかし、先の私の「調査クエリー」ツールでは、1つのSQL文しか1回に実行できないので、使えませんね。
私が欲しいのは、1つのSQL文で両方取得です。

なんと、これができるんだなあ。

mysql> select (select count(*) from product) as 商品数, (select count(*) from shop) as 店舗数;
+-----------+-----------+
| 商品数    | 店舗数    |
+-----------+-----------+
|     31228 |       947 |
+-----------+-----------+
1 row in set (0.01 sec)

SQL文を見やすくすると、

select
  (
    select
      count(*)
    from
      product
  ) as 商品数,
  (
    select
      count(*)
    from
      shop
  ) as 店舗数;

SELECT文の項目がそれぞれExpressionなので、項目がSELECT文でもいいのですね。

By khino