2013年1月18日金曜日

MySQLのDUAL表

DBMS には Dual表というダミーテーブルを持っているものがあり、 MySQL にも Dual表が存在します。

このDual表というのはテーブルの参照を必要としないSQLを記述するのに よく用いられます。

例えば、ただ単に現在の日付を取得したい、という場合に

select
    current_timestamp
from
    dual

のように記述できます。
ですが、MySQL では FROM 句はなくてもエラーにならないため、 上記のSQLと同じ結果を得たい場合は、

select
    current_timestamp

の用に FROM 句のない SQL を実行すれば、それで日付を取得できます。

では、DUAL 表って MySQL では使わないの?と思いますが、 「FROM 句なしに WHERE 句を指定したい」、という場合などでは 構文エラーとなってしまうため、DUAL を使用しなければなりません。

次のSQLはエラーになります。

select
    current_timestamp
where
    now() like '2013-01-1%'

次の様にSQLを記述すればエラーにはなりません。

select
    current_timestamp
from
    dual
where
    now() like '2013-01-1%'

なので、DUAL 表って使わないかというとそうでもなかったりします。

それと、今 気が付いたのですが、
select
    *
from
    dual

だと MySQL ではエラーになるんですね。

某DBMSでは 1 x 1 のデータを持つテーブルになっているので

1

が取得できます。

0 件のコメント: