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.

Notatki