トリッキーな、SELECT * FROM dual

Oracleでは、

SELECT * FROM dual

は、列名='DUMMY' 値='X'の1行を返す。

PostgreSQL では、、、
dual は存在しないのでFROM句を省略するのだが、

SELECT * 

とすると、
  SQLエラー [42601]: ERROR: テーブル指定のないSELECT *は無効です
になる
Oracleと同じことをするには、WITH句でdualを用意する

WITH dual AS(
   SELECT 'X' AS DUMMY
)
SELECT * FROM dual

これでOracleと同じことができる。

MySQLでは、

SELECT 1 FROM dual

は、列名='1' 値=1 が返ってくるしFROMを省略して

SELECT 1

でも同じである。

ただ上に書いた * (アスタリスクはどうなるかというと、、

SELECT *

や、

SELECT * FROM dual

は、
  SQLエラー [1096] [HY000]: No tables used
となる。
でも、

 SELECT COUNT(*) AS cnt  FROM DUAL

や、

SELECT COUNT(*) AS cnt

は、きちんと COUNT = 1 が返ってくる