Dari Wikipedia :
Tabel DUAL adalah tabel satu-baris khusus yang hadir secara default di semua instalasi basis data Oracle. Sangat cocok untuk digunakan dalam memilih pseudocolumn seperti SYSDATE atau USER. Tabel memiliki kolom VARCHAR2 (1) tunggal yang disebut DUMMY yang memiliki nilai 'X'.
Dengan demikian, tabel ganda adalah cara untuk melakukan operasi terhadap jumlah apa yang menjadi tabel kosong tetapi tidak nol. Ini berguna ketika seseorang tidak peduli tentang tabel, tetapi perlu melakukan operasi melalui pernyataan pilih. Jika tabel memiliki lebih dari satu baris atau kolom, beberapa hasil akan dikembalikan (karena beroperasi pada seluruh rangkaian tupel saat melakukan operasi.)
Seharusnya tidak digunakan dalam produksi, kecuali jika Anda secara khusus perlu menjalankan prosedur tertentu melalui SQL.
4*5
adalah operasi matematika, sama seperti 'Foo'
string. Jadi, seperti halnya seseorang dapat memilih 4 * 5 dari tabel mana pun, seperti halnya seseorang dapat memilih 'Foo' dari tabel mana pun, DUAL adalah cara untuk memilihnya dari tabel yang dikenal baik yang tidak akan pernah memiliki banyak hasil.
Dari dokumentasi (KONSEP):
DUAL adalah tabel kecil dalam kamus data yang dapat dirujuk oleh Oracle Database dan program yang ditulis pengguna untuk menjamin hasil yang diketahui. Tabel ganda berguna ketika nilai harus dikembalikan hanya sekali, misalnya, tanggal dan waktu saat ini. Semua pengguna basis data memiliki akses ke DUAL.
Tabel DUAL memiliki satu kolom yang disebut DUMMY dan satu baris yang berisi nilai X.
Dan Referensi SQL :
DUAL adalah tabel yang secara otomatis dibuat oleh Oracle Database bersama dengan kamus data. DUAL ada dalam skema SYS pengguna tetapi dapat diakses dengan nama DUAL untuk semua pengguna. Ini memiliki satu kolom, DUMMY, didefinisikan sebagai VARCHAR2 (1), dan berisi satu baris dengan nilai X. Memilih dari tabel DUAL berguna untuk menghitung ekspresi konstan dengan pernyataan SELECT. Karena DUAL hanya memiliki satu baris, konstanta dikembalikan hanya sekali. Sebagai alternatif, Anda dapat memilih konstanta, pseudocolumn, atau ekspresi dari tabel mana pun, tetapi nilainya akan dikembalikan berkali-kali karena ada baris dalam tabel. Lihat "Tentang Fungsi SQL" untuk banyak contoh memilih nilai konstan dari DUAL.
Dimulai dengan Oracle Database 10g Release 1, I / O logis tidak dilakukan pada tabel DUAL saat menghitung ekspresi yang tidak termasuk kolom DUMMY. Optimasi ini terdaftar sebagai DUAL CEPAT dalam rencana eksekusi. Jika Anda MEMILIH kolom DUMMY dari DUAL, maka pengoptimalan ini tidak terjadi dan terjadi I / O yang logis.
DUAL
adalah tabel dengan persis satu baris seperti yang ditampilkan pada pernyataan SQL berikut:dual2
Meja Anda tidak memiliki baris. Jika Anda memasukkan satu, Anda akan melihat perilaku yang sama.4 * 5 adalah ekspresi yang dapat dievaluasi Oracle tanpa benar-benar menggunakan data dari tabel. Ini akan mengevaluasi satu kali untuk setiap baris, sama seperti yang akan dilakukan dengan ekspresi kolom normal. Jadi jika tidak ada baris, tidak ada hasil yang dikembalikan, jika ada dua baris, Anda akan mendapatkan 20 dua kali.
sumber
The
dual
table "bekerja" hampir hanya cara apapun karya meja lain: itu adalah tabel dari mana Anda dapat memilih catatan.Ini berarti, misalnya, Anda bisa menggambarkan tabel. Di sini, di
SQL*Plus
:Jadi, tabel tersebut memiliki satu kolom, bernama
dummy
yang adalah avarchar2(1)
.Tabel tersebut memiliki, menurut desain, satu catatan (setidaknya jika tidak ada yang mengotak-atiknya):
Jadi, untuk mendapatkan perilaku yang sama dengan yang
dual2
Anda milikidual
, Anda harus memasukkan satu rekaman menjadi dua. Lebih baik lagi, buat dengancreate table as select
(cta):Sekarang, permintaan Anda berfungsi:
Sebelumnya, saya mengatakan bahwa dual hampir berfungsi seperti tabel lainnya. Jadi, kapan itu tidak bekerja seperti meja lainnya?
Itu berperilaku berbeda, jika tidak ada nilai dari tabel itu sendiri dipilih. Sekali lagi, dengan pertanyaan Anda, saya biarkan Oracle menjelaskannya ...
... untuk melihat bagaimana tabel diakses:
Dapat dilihat bahwa pernyataan itu tidak
full table access
aktifdual2
.Sekarang, hal yang sama dengan
dual
:Di sinilah
dual
tabel berperilaku berbeda: nilaidummy
tidak diperlukan, sehinggafast dual
operasi dijalankan, agar instance tidak membaca nilai aktual pada disk.sumber
Secara kebetulan, DUAL adalah salah satu dari beberapa 'tabel' yang berfungsi ketika instance telah dimulai tetapi database belum dibuka.
Anda mendapatkan sesuatu seperti
sumber
Selain jawaban lain, Oracle tidak begitu pilih-pilih tentang spasi teks SQL (setidaknya di beberapa tempat). Parser SQL juga tokenizes oleh perbedaan kelas karakter dalam beberapa kasus, bukan hanya oleh spasi.
Misalnya, Anda dapat menjalankan pernyataan seperti itu:
Juga dimungkinkan untuk menjalankan SQL tanpa spasi di dalamnya:
Saya punya beberapa contoh lagi di sini:
http://blog.tanelpoder.com/2008/01/14/can-you-write-a-working-sql-statement-without-using-any-whitespace/
Tanel Poder
sumber
Operasi ganda cepat menulis ulang kode Anda ke kueri x $ ganda. Karena "tabel" ini adalah struktur data C dalam SGA, Anda dapat menanyakannya dalam mode nomount.
sumber
Pertanyaannya sudah dijawab. Ini adalah beberapa catatan untuk tujuan tabel ganda. Ganda dapat digunakan untuk mengevaluasi ekspresi dalam klausa pilih. Banyak sistem basis data lainnya tidak memerlukan tabel seperti itu untuk tujuan ini. MS SQL Server, MySql, Posgres dapat mengevaluasi pernyataan berikut
Oracle tidak bisa. Pernyataan pilih Oracle selalu membutuhkan "from" -clause.
Beberapa fungsi tidak dapat digunakan dalam ekspresi pl / sql seperti DUMP .
Begitu
akan memunculkan eksepsi tetapi
akan bekerja.
Itu bisa digunakan untuk memperluas set hasil dari suatu query
yang memberi
atau menghasilkan data dengan kueri pilihan menggunakan
CONNECT BY
:atau CTE rekursif:
yang kembali
di sqlfiddle
sumber
Untuk apa nilainya, ia bekerja dengan cara yang persis sama di MySQL.
Dan juga tampak bahwa DUAL adalah semacam struktur memori di MySQL juga. Perhatikan perbedaan dalam dua menjelaskan rencana - "tidak ada tabel yang digunakan" untuk DUAL di MySQL.
Namun yang menarik, saya tidak dapat melakukan DESC pada dual MySQL, yang berbeda dengan Oracle - tetapi diperkenalkan khusus AIUI untuk memungkinkan sintaks Oracle bekerja pada MySQL.
sumber
Dalam database oracle, tabel ganda pada dasarnya digunakan untuk mendapatkan nilai pseudo-kolom. Ini berisi properti berikut:
Jika Anda ingin mendapatkan detail lebih lanjut, periksa di sini
sumber