ДВОЙНОЙ таблица представляет собой специальный один ряд, один столбец таблицы присутствует по умолчанию в Oracle и других баз данных установок. В Oracle таблица имеет единственный столбец VARCHAR2 (1) с именем DUMMY, который имеет значение «X». Он подходит для использования при выборе псевдостолбца, такого как SYSDATE или USER.
Пример использования
Синтаксис Oracle SQL требует наличия предложения FROM , но для некоторых запросов не требуются таблицы - в этих случаях можно использовать DUAL.
ВЫБЕРИТЕ 1 + 1 ИЗ двойного ;ВЫБЕРИТЕ 1 ИЗ двойного ;ВЫБРАТЬ ПОЛЬЗОВАТЕЛЯ ИЗ двойного ;ВЫБРАТЬ SYSDATE ИЗ двойного ;ВЫБРАТЬ * ИЗ двойного ;
История
Чарльз Вайс объясняет, почему он создал DUAL:
Я создал таблицу DUAL как базовый объект в Oracle Data Dictionary. Он никогда не предназначался для того, чтобы его видели, а вместо этого использовался внутри представления, которое должно было быть запрошено. Идея заключалась в том, что вы можете выполнить JOIN с таблицей DUAL и создать две строки в результате для каждой строки в вашей таблице. Затем, используя GROUP BY, полученное соединение можно суммировать, чтобы показать объем хранилища для экстента DATA и экстента (ов) INDEX. Название DUAL казалось подходящим для процесса создания пары строк из одной. [1]
Оптимизация
Начиная с версии 10g Release 1, Oracle больше не выполняет физический или логический ввод-вывод для таблицы DUAL, хотя таблица все еще существует. [2]
DUAL доступен для всех пользователей базы данных.
В других системах баз данных
Несколько других баз данных (включая Microsoft SQL Server, MySQL, PostgreSQL, SQLite и Teradata) позволяют полностью опустить предложение FROM, если таблица не требуется. Это избавляет от необходимости использовать какой-либо фиктивный стол.
- Firebird имеет однострочную системную таблицу RDB $ DATABASE, которая используется так же, как Oracle DUAL, хотя она также имеет собственное значение.
- В IBM DB2 есть представление, которое разрешает DUAL при использовании совместимости с Oracle. [3] В нем также есть таблица sysibm.sysdummy1, которая имеет свойства, аналогичные таблице Oracle DUAL.
- Informix : Informix версии 11.50 и более поздних имеет таблицу с той же функциональностью, но с более подробным именем. [4] Вы можете использовать для создания имени в текущей базе данных с той же функциональностью.
sysmaster:"informix".sysdual
CREATE PUBLIC SYNONYM dual FOR sysmaster:"informix".sysdual
dual
- Microsoft Access : таблица с именем DUAL может быть создана, и ограничение одной строки может быть применено через ADO ( запрос UNION без таблицы в MS Access )
- Microsoft SQL Server : SQL Server не требует фиктивной таблицы. Такие запросы, как «select 1 + 1», можно запускать без предложения / имени таблицы «from». [5]
- MySQL позволяет указывать DUAL в виде таблицы в запросах, которым не нужны данные из каких-либо таблиц. [6] Он подходит для использования при выборе функции результата, такой как SYSDATE () или USER () , хотя это не обязательно.
- PostgreSQL : можно добавить DUAL-view, чтобы упростить перенос с Oracle. [7]
- Snowflake : DUAL поддерживается, но явно не задокументирован. Он появляется в образце SQL для других операций в документации.
- SQLite : ВИД с именем "dual", который работает так же, как "двойная" таблица Oracle, может быть создан следующим образом:
CREATE VIEW dual AS SELECT 'x' AS dummy;
- В SAP HANA есть таблица DUMMY, которая работает так же, как «двойная» таблица Oracle.
- База данных Teradata не требует фиктивной таблицы. Такие запросы, как «select 1 + 1», можно запускать без предложения / имени таблицы «from».
Заметки
- ^ "Подробнее об истории Oracle" . Журнал Oracle . Январь-февраль 2002 года Архивировано из оригинала 5 декабря 2004 года . Проверено 4 сентября 2013 года .
- ^ Oracle Database SQL Language Reference 11g Release 2 (11.2), выбор из таблицы DUAL
- ^ DB2 10.1 InfoCenter :: DB2 Версия 10.1 для Linux, UNIX и Windows - таблица DUAL
- ^ Informix 12.10 InfoCenter :: Справочник администратора :: База данных sysmaster :: Таблицы интерфейса системного мониторинга :: sysdual
- ^ Что такое Oracle эквивалент «двойной» таблицы в SqlServer?
- ^ "Справочное руководство MySQL :: MySQL 5.0 :: 13.2.8 SELECT Syntax" . Архивировано из оригинала на 2012-01-03 . Проверено 14 марта 2009 .
- ^ PostgreSQL :: PostgreSQL Wiki :: Преобразование Oracle в Postgres