DUAL表

DUAL表（DUALひょう）は、Oracle Databaseにおいてセットアップ時から存在する、1列しかない特別な表である。これはcodice_1やcodice_2など、表を適用せずとも値を返す演算に対してcodice_3を行う場合に使われる。この表にはcodice_4のDUMMYという列だけがあり、1件だけあるレコードの値はcodice_5となっている。
使用例.
OracleのSQLでは、SELECT文にはFROM節が必須であるが、クエリーの種類によっては表が必要ないこともある。そんな場面では、システム側で用意されているDUALを使うことができる。
SELECT 1+1
FROM DUAL;
SELECT SYSDATE 
FROM DUAL;
SELECT USER 
FROM DUAL;
歴史.
DUAL表は、オラクル社のチャールズ・ワイスによって、内部情報のビューと結合するために作られた。もともとは2行あり、別な表と結合することで文字通り1行が2行に増えるようになっていたのだが、のちに1行となっている。
最適化.
DUALはもともと通常の表であり、DUALに対してSELECTを行うと、DUAL表へのアクセスが生じる。たいていはメモリのキャッシュに乗っかっているので、DUAL表を探してディスクまでアクセスが行われることはあまりないが、それでもDUAL表へのアクセス処理は頻繁に行われる。
Oracle 10gでは、DUAL表そのものは存在しているものの、最適化により実際にはDUALへアクセスしないようになっている。
他のDBMS.
PostgreSQL、SQLite、Microsoft SQL Serverなど、SELECTのFROM節を必須としていないDBMSも存在し、これらではDUALのようなダミーの表を使う必然性がない。なお、MySQLにおいてもFROMの省略が可能であるが、互換性のためにFROM DUALと書くことができる。IBM Db2（DB2）においては、DUALと同様のダミー表としてsysibm.sysdummy1が存在するが、表を必要としない演算に対してはVALUESという構文も用意されている。