Stół PODWÓJNY
Tabela DUAL to specjalna jednorzędowa i jednokolumnowa tabela obecna domyślnie w instalacjach Oracle i innych baz danych . W Oracle tabela ma pojedynczą kolumnę VARCHAR2(1) o nazwie DUMMY, która ma wartość „X”. Nadaje się do użycia przy wybieraniu pseudokolumny, takiej jak SYSDATE lub USER.
Przykładowe zastosowanie
SQL Oracle wymaga klauzuli FROM , ale niektóre zapytania nie wymagają żadnych tabel - w takich przypadkach można użyć DUAL.
WYBIERZ 1 + 1 Z podwójnego ; WYBIERZ 1 Z podwójnego ; WYBIERZ UŻYTKOWNIKA Z podwójnego ; WYBIERZ SYSDATE Z dual ; WYBIERZ * Z podwójnego ;
Historia
Charles Weiss wyjaśnia, dlaczego stworzył DUAL:
Stworzyłem tabelę DUAL jako podstawowy obiekt w Oracle Data Dictionary. Nigdy nie miał być widziany jako taki, ale zamiast tego był używany w widoku, który miał zostać zapytany. Pomysł polegał na tym, że możesz wykonać JOIN do tabeli DUAL i utworzyć dwa wiersze w wyniku dla każdego wiersza w tabeli. Następnie, używając GROUP BY, wynikowe łączenie można podsumować, aby pokazać ilość pamięci dla zakresu DATA i dla zakresu INDEX. Nazwa DUAL wydawała się odpowiednia dla procesu tworzenia pary rzędów z jednego.
Optymalizacja
Począwszy od wersji 10g Release 1, Oracle nie wykonuje już fizycznych ani logicznych operacji we/wy na tablicy DUAL, chociaż tabela nadal istnieje.
DUAL jest łatwo dostępny dla wszystkich autoryzowanych użytkowników w bazie danych SQL.
W innych systemach bazodanowych
Kilka innych baz danych (w tym Microsoft SQL Server, MySQL, PostgreSQL, SQLite i Teradata) umożliwia całkowite pominięcie klauzuli FROM, jeśli żadna tabela nie jest potrzebna. Eliminuje to konieczność stosowania jakiegokolwiek atrapy stołu.
- ClickHouse ma jednowierszową tabelę systemową system.one z pojedynczą kolumną o nazwie „dummy” typu UInt8 i wartością 0. Ta tabela jest niejawnie używana, gdy w zapytaniu SELECT nie określono żadnej tabeli.
- Firebird ma jednorzędową tabelę systemową RDB $ DATABASE, która jest używana w taki sam sposób jak DUAL firmy Oracle, chociaż ma również własne znaczenie.
- IBM Db2 ma widok, który rozwiązuje DUAL podczas korzystania z Oracle Compatibility. Ma również tabelę o nazwie sysibm.sysdummy1, która ma podobne właściwości do Oracle DUAL.
-
Informix : Informix w wersji 11.50 i nowszych ma tabelę o nazwie
sysmaster : "informix" . sysdual
z tą samą funkcjonalnością, ale bardziej szczegółową nazwą. Możesz użyćCREATE PUBLIC SYNONIM dual FOR sysmaster : "informix" . sysdual , aby utworzyć
podwójną
nazwę w bieżącej bazie danych o tej samej funkcjonalności. - Microsoft Access : Można utworzyć tabelę o nazwie DUAL i wymusić ograniczenie jednego wiersza za pośrednictwem ADO ( beztabelowe zapytanie UNION w MS Access )
- Microsoft SQL Server : SQL Server nie wymaga tabeli fikcyjnej. Zapytania takie jak „wybierz 1 + 1” można uruchamiać bez klauzuli/nazwy tabeli „od”.
- MySQL umożliwia określenie DUAL jako tabeli w zapytaniach, które nie wymagają danych z żadnych tabel. Jest odpowiedni do użycia przy wybieraniu funkcji wynikowej, takiej jak SYSDATE() lub USER() , chociaż nie jest to konieczne.
- PostgreSQL : Można dodać widok DUAL, aby ułatwić przenoszenie z Oracle.
- Płatek śniegu : DUAL jest obsługiwany, ale nie jest wyraźnie udokumentowany. Pojawia się w przykładowym SQL dla innych operacji w dokumentacji.
-
SQLite : WIDOK o nazwie „dual”, który działa tak samo jak „podwójna” tabela Oracle, można utworzyć w następujący sposób:
CREATE VIEW dual AS SELECT 'x' AS dummy ;
- SAP HANA ma tabelę o nazwie DUMMY, która działa tak samo jak „podwójna” tabela Oracle.
- Teradata nie wymaga fikcyjnej tabeli. Zapytania takie jak „wybierz 1 + 1” można uruchamiać bez klauzuli/nazwy tabeli „z”.
- Vertica obsługuje tabelę DUAL w swojej oficjalnej dokumentacji.