DUALテーブルとは
OracleにはDUAL
というダミーテーブルが存在します。
SELECT 〜 FROM DUAL
この表は何に使うかというと、OracleではMySQLとかPostgresと違って、SELECT文のFROMを省略できないので、FROMが不要なクエリを実行する時は、DUAL表をFROM句に指定します
例えば関数だけ実行したい場合とかにDUALを使います。
SELECT SYSDATE FROM DUAL;
DUAL表の中身
DUAL表の中身はどうなっているかと思ってSELECTしてみると、DUM
という列を持っていて、DUMの値がX
のレコードが1件だけ存在しています。
SQL> select * from dual;
DUM
---
X
MySQLにもDUAL表は存在する
DUAL表はMySQLにも互換性確保のため(?)か存在しているようです。
ですが、試しにSELECTしてみたところ、Oracleのように中身を見ることはできませんでした。
mysql> SELECT * FROM DUAL;
ERROR 1096 (HY000): No tables used
COUNTすると1という結果が返ってくるので、ちゃんと存在はしてるようです。
mysql> SELECT COUNT(*) FROM DUAL;
+----------+
| count(*) |
+----------+
| 1 |
+----------+
1 row in set (0.00 sec)
そういえば最近このようなツイートが少し話題になっていたのですが、
これって、何を数えているんでしたっけ?
mysql> SELECT COUNT(*);
+----------+
| COUNT(*) |
+----------+
| 1 |
+----------+— 坂井 恵(SAKAI Kei) (@sakaik) May 1, 2020
最初見た時、FROM句に何も書いていないのに1が返ってくるのは不思議だなと思ったのですが、これはDUAL表のレコード数をカウントしているのだろうと腑に落ちました。