RRUZ
RRUZ

Reputation: 136391

Select without a FROM clause in Oracle

in SQL Server is possible to execute a SELECT, without reference to a table; something like:

Select 1.2 +3, 'my dummy string'

As Oracle does not allow a SELECT without a FROM, I use the dual table for this type of operation; something like:

Select 1,2+3, 'my dummy string' FROM DUAL

There is a better way of doing this type of query? it is good practice to use the dual table?

Upvotes: 63

Views: 77488

Answers (7)

Horsng Junn
Horsng Junn

Reputation: 11

You can now finally drop the dreaded "FROM DUAL" clause starting Oracle 23c.

(I know this is an old question but it was ranked high when I googled "from dual" so I figured I'd do a service for those like me.)

Upvotes: 0

sleske
sleske

Reputation: 83587

Yes, the dual table is the usual way to do this in Oracle. As a matter of fact, it was introduced just for this.

The main advantage of DUAL is that the optimizer in Oracle knows it is special, so queries using it can be faster than if you used a single-row table you made yourself. Other than that, there's nothing special about it.

Upvotes: 4

Vincent Malgrat
Vincent Malgrat

Reputation: 67722

don't forget that most of the times you don't actually need to use SELECT.

Instead of:

SELECT sysdate INTO l_date FROM dual;
SELECT CASE WHEN i = j THEN 0 ELSE 1 END INTO l_foo FROM dual;
...

you can use

l_date := sysdate;
l_foo  := CASE WHEN i = j THEN 0 ELSE 1 END;
...

Upvotes: 11

DCookie
DCookie

Reputation: 43523

Actually, SQL Server's implementation is non-standard. The SQL-92 Standard (Section 7.9) requires a FROM clause in a SELECT statement. DUAL is Oracle's way of providing a table to select from to get a scalar row.

Upvotes: 2

Quassnoi
Quassnoi

Reputation: 425341

No, in Oracle there is no SELECT without FROM.

Using the dual table is a good practice.

dual is an in-memory table. If you don't select DUMMY from it, it uses a special access path (FAST DUAL) which requires no I/O.

Once upon a time, dual had two records (hence the name) and was intended to serve as a dummy recordset to duplicate records being joined with.

Now it has but one record, but you can still generate an arbitrary number of rows with it:

SELECT  level
FROM    dual
CONNECT BY
        level <= 100

MySQL also supports dual (as well as the fromless syntax).

Upvotes: 99

dcp
dcp

Reputation: 55434

it is good practice to use the dual table

Yes, the dual table is usually used for this exact purpose. It's pretty standard in Oracle when you have no table to select from.

Upvotes: 4

tmeisenh
tmeisenh

Reputation: 1534

I think you gotta use dual. it is used when you need to run SQL that does not have a table name. I can't say I use it much other than in SQL scripts to echo out the date something is ran or something stupid like that.

Upvotes: 2

Related Questions