DUAL table

The DUAL table is a special one-row, one-column table present by default in Oracle and other database installations. In Oracle, the table has a single VARCHAR2(1) column called DUMMY that has a value of 'X'. It is suitable for use in selecting a pseudo column such as SYSDATE or USER.

Example use

Oracle's SQL syntax requires the FROM clause but some queries don't require any tables - DUAL can be readily used in these cases.

SELECT 1+1
from dual;

SELECT 1 
from dual;

SELECT USER 
from dual;

SELECT SYSDATE 
from dual;

SELECT * 
from dual;

History

Chuck Weiss explains why he created DUAL:

I created the DUAL table as an underlying object in the Oracle Data Dictionary. It was never meant to be seen itself, but instead used inside a view that was expected to be queried. The idea was that you could do a JOIN to the DUAL table and create two rows in the result for every one row in your table. Then, by using GROUP BY, the resulting join could be summarized to show the amount of storage for the DATA extent and for the INDEX extent(s). The name, DUAL, apt for the process of creating a pair of rows from just one.[1]

The original DUAL table had two rows in it (hence its name), but subsequently it only had one row.

Optimization

Beginning with 10g Release 1 Oracle Database have been optimized[2] and the database no longer performs physical or logical IO on the DUAL table even though the DUAL table still actually exists.

DUAL is readily available for all the users in database.

In other database systems

Several other databases (including SQL Server, PostgreSQL, and SQLite) enable one to omit the FROM clause entirely if no table is needed. This avoids the need for any dummy table.

Notes

This article is issued from Wikipedia - version of the Monday, March 28, 2016. The text is available under the Creative Commons Attribution/Share Alike but additional terms may apply for the media files.