Z Wikipedii :
Tabela DUAL jest specjalną tabelą jednorzędową domyślnie występującą we wszystkich instalacjach baz danych Oracle. Jest odpowiedni do użycia przy wybieraniu pseudokolumny, takiej jak SYSDATE lub USER. Tabela ma jedną kolumnę VARCHAR2 (1) o nazwie DUMMY, która ma wartość „X”.
Zatem podwójna tabela jest sposobem na wykonywanie operacji w stosunku do pustej, ale nie zerowej tabeli. Jest to przydatne, gdy nie zależy nam na tabeli, ale trzeba wykonać operacje za pomocą instrukcji select. Jeśli tabela zawiera więcej niż jeden wiersz lub kolumnę, zostanie zwróconych wiele wyników (ze względu na działanie na całym zestawie krotek podczas wykonywania operacji).
Nie należy go używać w środowisku produkcyjnym, chyba że trzeba specjalnie wywołać określone procedury za pomocą SQL.
4*5
jest operacją matematyczną, podobnie jak 'Foo'
łańcuch. Tak więc, podobnie jak można wybrać 4 * 5 z dowolnej tabeli, tak jak można wybrać „Foo” z dowolnej tabeli, DUAL jest sposobem na wybranie go ze znanej dobrej tabeli, która nigdy nie przyniesie wielu wyników.
Z dokumentacji (POJĘCIA):
DUAL to mała tabela w słowniku danych, do której można odwoływać się do bazy danych Oracle i programów napisanych przez użytkownika, aby zagwarantować znany wynik. Podwójna tabela jest przydatna, gdy wartość musi zostać zwrócona tylko raz, na przykład bieżąca data i godzina. Wszyscy użytkownicy bazy danych mają dostęp do DUAL.
Tabela DUAL ma jedną kolumnę o nazwie DUMMY i jeden wiersz zawierający wartość X.
I odwołanie do SQL :
DUAL to tabela tworzona automatycznie przez Oracle Database wraz ze słownikiem danych. DUAL jest w schemacie użytkownika SYS, ale jest dostępny pod nazwą DUAL dla wszystkich użytkowników. Ma jedną kolumnę, DUMMY, zdefiniowaną jako VARCHAR2 (1) i zawiera jeden wiersz o wartości X. Wybieranie z tabeli DUAL jest przydatne do obliczania stałego wyrażenia za pomocą instrukcji SELECT. Ponieważ DUAL ma tylko jeden wiersz, stała jest zwracana tylko raz. Alternatywnie możesz wybrać stałą, pseudokolumnę lub wyrażenie z dowolnej tabeli, ale wartość zostanie zwrócona tyle razy, ile jest wierszy w tabeli. Zobacz „Informacje o funkcjach SQL”, aby uzyskać wiele przykładów wybierania stałej wartości z DUAL.
Począwszy od Oracle Database 10g Release 1, logiczne operacje we / wy nie są wykonywane w tabeli DUAL podczas obliczania wyrażenia, które nie zawiera kolumny DUMMY. Ta optymalizacja jest wymieniona jako FAST DUAL w planie wykonania. Jeśli wybierzesz kolumnę DUMMY z DUAL, wówczas ta optymalizacja nie nastąpi i nastąpi logiczne we / wy.
DUAL
jest tabelą zawierającą dokładnie jeden wiersz, jak pokaże następująca instrukcja SQL:Twój
dual2
stół nie ma wierszy. Jeśli wstawisz jeden, zobaczysz to samo zachowanie.4 * 5 to wyrażenie, które Oracle może ocenić bez faktycznego wykorzystania danych z tabeli. Oceni to raz dla każdego wiersza, tak jak zrobiłby to z normalnym wyrażeniem kolumny. Więc jeśli nie ma wiersza, wynik nie jest zwracany, jeśli są dwa wiersze, otrzymasz 20 razy dwa.
źródło
dual
Stół „działa” prawie tak, jak wszelkie inne prace stołowe: jest to tabela, z której można wybrać rekordy.Oznacza to na przykład, że możesz opisać tabelę. Tutaj w
SQL*Plus
:Tak więc tabela ma jedną kolumnę o nazwie,
dummy
która jestvarchar2(1)
.Tabela ma z założenia jeden rekord (przynajmniej jeśli nikt się nim nie bawił):
Tak więc, aby uzyskać takie samo zachowanie,
dual2
jak w przypadkudual
, musisz wstawić jeden rekord do podwójnego. Jeszcze lepiej, utwórz go za pomocącreate table as select
(ctas):Teraz twoje zapytanie działa:
Wcześniej powiedziałem, że dual działa prawie jak każdy inny stół. Więc kiedy to nie działa jak jakikolwiek inny stół?
Zachowuje się inaczej, jeśli nie wybrano żadnej wartości z samej tabeli. Znowu, dzięki twoim zapytaniom, pozwalam Oracle je wyjaśnić ...
... aby zobaczyć, w jaki sposób można uzyskać dostęp do tabeli:
Można zauważyć, że oświadczenie robi
full table access
ondual2
.Teraz to samo z
dual
:W tym przypadku
dual
tabela zachowuje się inaczej: wartośćdummy
nie jest potrzebna, więcfast dual
wykonywana jest operacja, aby instancja nie odczytała rzeczywistej wartości na dysku.źródło
Nawiasem mówiąc, DUAL jest jedną z niewielu „tabel”, która działa, gdy instancja została uruchomiona, ale baza danych nie została otwarta.
Dostajesz coś takiego
źródło
Oprócz innych odpowiedzi, Oracle nie jest tak wybredna co do spacji w tekście SQL (przynajmniej w niektórych miejscach). Analizator składni SQL tokenizuje także w niektórych przypadkach różnice klas znaków, a nie tylko spacje.
Na przykład możesz uruchomić takie instrukcje:
Możliwe jest również uruchamianie SQL bez spacji:
Mam tutaj kilka przykładów:
http://blog.tanelpoder.com/2008/01/14/can-you-write-a-working-sql-statement-without-using-any-whitespace/
Tanel Poder
źródło
Szybka podwójna operacja ponownie zapisuje kod w celu zapytania o x $ dual. Ponieważ ta „tabela” jest strukturą danych C w SGA, możesz przeszukiwać ją w trybie nomount.
źródło
Odpowiedź na pytanie jest już udzielona. Oto kilka uwag na temat celu podwójnego stołu. Podwójne mogą być użyte do oceny wyrażeń w klauzuli select. Wiele innych systemów baz danych nie potrzebuje takiej tabeli do tego celu. MS SQL Server, MySql, Posgres może ocenić następującą instrukcję
Oracle nie może. Instrukcja select Oracle zawsze wymaga klauzuli „z”.
Niektórych funkcji nie można używać w wyrażeniach pl / sql, takich jak DUMP .
Więc
zgłosi wyjątek, ale
będzie działać.
Można go użyć do rozszerzenia zestawu wyników zapytania
co dało
lub generuj dane za pomocą wybranych zapytań, używając
CONNECT BY
:lub rekurencyjne CTE:
który zwraca
w sqlfiddle
źródło
Za to, co jest warte, działa dokładnie tak samo w MySQL.
Wydaje się również, że DUAL jest także strukturą pamięci w MySQL. Zwróć uwagę na różnicę w dwóch planach wyjaśniania - „bez tabel” dla DUAL w MySQL.
Co ciekawe, nie mogę wykonać DESC na dualnym MySQL, który różni się od Oracle - ale został wprowadzony specjalnie AIUI, aby umożliwić składni Oracle działanie na MySQL.
źródło
W bazie danych Oracle, tabela Dual jest zasadniczo używana do uzyskania wartości pseudokolumn. Zawiera następujące właściwości:
Jeśli chcesz uzyskać więcej szczegółów, sprawdź tutaj
źródło