Выберите без предложения FROM в Oracle

в SQL Server можно выполнить SELECT без ссылки на таблицу; что-то вроде:

Select 1.2 +3, 'my dummy string' 

Поскольку Oracle не разрешает SELECT без FROM, я использую двойную таблицу для этого типа операции; что-то вроде:

 Select 1,2+3, 'my dummy string' FROM DUAL 

Существует лучший способ сделать этот тип запроса? хорошо ли использовать двойную таблицу?

Нет, в Oracle нет SELECT без FROM .

Хорошая практика – использование dual таблицы.

dual – это таблица с памятью. Если вы не выбрали DUMMY из него, он использует специальный путь доступа ( FAST DUAL ), который не требует I/O .

Когда-то, dual имело две записи (отсюда и название) и предназначалось для использования в качестве фиктивного набора записей для дублирования записей, к которым были присоединены.

Теперь у него есть только одна запись, но вы все равно можете создать с ней произвольное количество строк:

 SELECT level FROM dual CONNECT BY level <= 100 

MySQL также поддерживает dual (а также без синтаксиса).

не забывайте, что в большинстве случаев вам не нужно использовать SELECT.

Вместо:

 SELECT sysdate INTO l_date FROM dual; SELECT CASE WHEN i = j THEN 0 ELSE 1 END INTO l_foo FROM dual; ... 

вы можете использовать

 l_date := sysdate; l_foo := CASE WHEN i = j THEN 0 ELSE 1 END; ... 

рекомендуется использовать двойную таблицу

Да, для этой цели обычно используется двойная таблица. Это довольно стандартно в Oracle, когда у вас нет таблицы для выбора.

Я думаю, вы должны использовать двойное. он используется, когда вам нужно запустить SQL, у которого нет имени таблицы. Я не могу сказать, что я использую его гораздо больше, чем в сценариях SQL, чтобы повторить дату, когда что-то запущено или что-то глупое.

Да, двойная таблица – это обычный способ сделать это в Oracle. На самом деле, это было введено только для этого.

Главным преимуществом DUAL является то, что оптимизатор в Oracle знает, что он особенный, поэтому запросы, использующие его, могут быть быстрее, чем если бы вы использовали таблицу с одной строкой, которую вы сами создали. Кроме этого, в этом нет ничего особенного.

На самом деле реализация SQL Server нестандартна. Стандарт SQL-92 (раздел 7.9) требует предложения FROM в инструкции SELECT. DUAL – способ Oracle предоставить таблицу для выбора, чтобы получить скалярную строку.