ДВОЙНОЙ стол

Таблица DUAL — это специальная таблица с одной строкой и одним столбцом, которая по умолчанию присутствует в Oracle и других установках баз данных . В Oracle таблица имеет один столбец VARCHAR2(1), называемый DUMMY, который имеет значение 'X'. Он подходит для использования при выборе псевдостолбца, такого как SYSDATE или USER.

Пример использования

Синтаксис SQL Oracle требует использования предложения FROM , но для некоторых запросов не требуются никакие таблицы — в этих случаях можно использовать DUAL.

ВЫБЕРИТЕ 1 + 1 ИЗ двойного ;  ВЫБЕРИТЕ 1 ИЗ двойного ;   ВЫБЕРИТЕ ПОЛЬЗОВАТЕЛЯ ИЗ dual ;   ВЫБРАТЬ SYSDATE ИЗ dual ;   ВЫБРАТЬ * ИЗ двойного ;   

История

Чарльз Вайс объясняет, почему он создал DUAL:

Я создал таблицу DUAL как базовый объект в Oracle Data Dictionary. Она никогда не предназначалась для просмотра сама по себе, а вместо этого использовалась внутри представления, которое, как ожидалось, будет запрошено. Идея заключалась в том, что вы могли бы выполнить JOIN к таблице DUAL и создать две строки в результате для каждой строки в вашей таблице. Затем, используя GROUP BY, результирующее соединение можно было бы суммировать, чтобы показать объем хранилища для экстента DATA и для экстента(ов) INDEX. Название DUAL показалось подходящим для процесса создания пары строк из одной. [1]

Оптимизация

Начиная с версии 10g Release 1, Oracle больше не выполняет физический или логический ввод-вывод в таблице DUAL, хотя эта таблица все еще существует. [2]

DUAL доступен всем авторизованным пользователям в базе данных SQL.

В других системах баз данных

Несколько других баз данных (включая Microsoft SQL Server, MySQL, PostgreSQL, SQLite и Teradata) позволяют полностью опустить предложение FROM, если таблица не нужна. Это позволяет избежать необходимости в какой-либо фиктивной таблице.

  • ClickHouse имеет однострочную системную таблицу system.one с одним столбцом с именем «dummy» типа UInt8 и значением 0. Эта таблица неявно используется, когда в запросе SELECT не указана таблица.
  • В Firebird имеется однострочная системная таблица RDB$DATABASE, которая используется так же, как DUAL в Oracle, хотя она также имеет собственное значение.
  • IBM Db2 имеет представление, которое разрешает DUAL при использовании Oracle Compatibility. [3] В нем также есть таблица sysibm.sysdummy1, свойства которой схожи со свойствами таблицы Oracle DUAL.
  • Informix : Informix версии 11.50 и более поздних версий имеет таблицу с тем же функционалом, но более многословным именем. [4] Вы можете использовать для создания имени в текущей базе данных с тем же функционалом.sysmaster:"informix".sysdualCREATE PUBLIC SYNONYM dual FOR sysmaster:"informix".sysdualdual
  • Microsoft Access : можно создать таблицу с именем DUAL и применить ограничение по одной строке с помощью ADO (запрос UNION без таблиц в MS Access)
  • Microsoft SQL Server : SQL Server не требует фиктивной таблицы. Запросы типа «select 1 + 1» можно запускать без предложения «from»/имени таблицы. [5]
  • MySQL позволяет указывать DUAL как таблицу в запросах, которым не нужны данные из каких-либо таблиц. [6] Он подходит для использования при выборе результирующей функции, такой как SYSDATE() или USER(), хотя это не является обязательным.
  • PostgreSQL : для упрощения переноса из Oracle можно добавить DUAL-view. [7]
  • Snowflake : DUAL поддерживается, но явно не документировано. Он появляется в образце SQL для других операций в документации.
  • SQLite : Представление с именем «dual», работающее так же, как таблица Oracle «dual», можно создать следующим образом:CREATE VIEW dual AS SELECT 'x' AS dummy;
  • В SAP HANA есть таблица DUMMY, которая работает так же, как «двойная» таблица Oracle.
  • База данных Teradata не требует фиктивной таблицы. Запросы типа «select 1 + 1» можно запускать без предложения «from»/имени таблицы.
  • Vertica поддерживает таблицу DUAL в своей официальной документации. [8]

Примечания

  1. ^ "More About Oracle's History". Oracle Magazine . Январь–февраль 2002. Архивировано из оригинала 5 декабря 2004. Получено 4 сентября 2013 .
  2. ^ Справочник языка SQL базы данных Oracle 11g, выпуск 2 (11.2), Выбор из таблицы DUAL
  3. ^ DB2 10.1 InfoCenter :: DB2 версии 10.1 для Linux, UNIX и Windows - таблица DUAL
  4. ^ Informix 12.10 InfoCenter :: Справочник администратора :: База данных sysmaster :: Таблицы интерфейса системного мониторинга :: sysdual
  5. ^ Какой эквивалент таблицы «Dual» в Oracle в SqlServer?
  6. ^ "MySQL :: MySQL 5.0 Reference Manual :: 13.2.8 SELECT Syntax". Архивировано из оригинала 2012-01-03 . Получено 2009-03-14 .
  7. ^ PostgreSQL :: PostgreSQL Wiki :: Преобразование Oracle в Postgres
  8. ^ "DUAL". www.vertica.com . Получено 2022-03-10 .
Взято с "https://en.wikipedia.org/w/index.php?title=DUAL_table&oldid=1161940044"