以前に「調査クエリー」と称して、ウェブ画面で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文でもいいのですね。