Sebenarnya, FROM
klausa SELECT
pernyataan tidak opsional. Sintaks untuk SQL-99 merinci SELECT
statment dasar , dan FROM
klausa tidak memiliki tanda kurung siku di sekitarnya. Itu menunjukkan standar menganggapnya non-opsional:
SELECT [ DISTINCT | ALL ]
{Column expression [ AS name ]} [ ,... ] | *
FROM <Table reference> [ {,<Table reference>} ... ]
[ WHERE search condition ]
[ GROUP BY Columns [ HAVING condition ] ]
[ORDER BY {col_name | expr | position} [ASC | DESC],...]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
[PROCEDURE procedure_name(argument_list)]
[INTO OUTFILE 'file_name' export_options |
INTO DUMPFILE 'file_name' |
INTO var_name [, var_name]]
[FOR UPDATE | LOCK IN SHARE MODE]
Dalam penggunaan aktual, pemrogram dan DBA sering merasa berguna untuk melakukan hal-hal selain memanipulasi data dalam tabel atau memanipulasi tabel dan struktur data. Jenis hal ini sebagian besar di luar ruang lingkup standar SQL, yang berkaitan dengan fitur data lebih dari mur dan baut implementasi spesifik. Apakah kami ingin menjalankan SELECT getdate()
atau SELECT 1
atau SELECT DB_NAME()
(atau apa pun yang lebih disukai dialek Anda), kami sebenarnya tidak menginginkan data dari sebuah tabel.
Oracle memilih untuk memecahkan perbedaan standar dan implementasi menggunakan tabel dummy dengan definisi efektif berikut:
CREATE TABLE DUAL (
DUMMY CHAR(1)
)
INSERT INTO DUAL (DUMMY) VALUES ('X')
RDBMSes lainnya pada dasarnya mengasumsikan bahwa tabel dummy digunakan jika tidak FROM
ditentukan.
The sejarah tabel DUAL adalah di Wikipedia:
Tabel DUAL dibuat oleh Charles Weiss dari perusahaan Oracle untuk menyediakan tabel untuk bergabung dalam pandangan internal:
Saya membuat tabel DUAL sebagai objek yang mendasari dalam Kamus Data Oracle. Itu tidak pernah dimaksudkan untuk dilihat sendiri, tetapi digunakan di dalam tampilan yang diharapkan akan ditanyakan. Idenya adalah bahwa Anda bisa melakukan GABUNG ke tabel DUAL dan membuat dua baris di hasilnya untuk setiap satu baris di tabel Anda. Kemudian, dengan menggunakan GROUP BY, gabungan yang dihasilkan dapat diringkas untuk menunjukkan jumlah penyimpanan untuk tingkat DATA dan untuk tingkat INDEX. Nama itu, DUAL, tampaknya cocok untuk proses menciptakan sepasang baris dari satu.
Tabel DUAL asli memiliki dua baris di dalamnya (maka namanya), tetapi kemudian hanya memiliki satu baris.
select
tanpafrom
. DB2 memiliki tabel boneka serupa yang disebut SYSIBM.SYSDUMMY1 . Anda juga mungkin sudah mengetahui hal ini, tetapi ketika Andaselect 'A' from dual
,dual
tabel tersebut tidak benar-benar diakses , yang menjawab pertanyaan dalam suntingan Anda (yang pantas menjadi pertanyaan baru btw).