Выберите без предложения FROM в Oracle
в SQL Server можно выполнить SELECT без ссылки на таблицу; что-то вроде:
Select 1.2 +3, 'my dummy string'
Как Oracle не позволяет SELECT без FROM, я использую двойную таблицу для этого типа операции; что-то вроде:
Select 1,2+3, 'my dummy string' FROM DUAL
Существует лучший способ сделать этот тип запроса? полезно использовать двойную таблицу?
Ответы
Ответ 1
Нет, в Oracle
нет SELECT
без FROM
.
Использование таблицы dual
является хорошей практикой.
dual
- это таблица в памяти. Если вы не выбрали DUMMY
из него, он использует специальный путь доступа (FAST DUAL
), который не требует I/O
.
Когда-то время dual
имело две записи (отсюда и название) и предназначалось для использования в качестве фиктивного набора записей для дублирования замещаемых записей.
Теперь у него есть только одна запись, но вы все равно можете создать с ней произвольное количество строк:
SELECT level
FROM dual
CONNECT BY
level <= 100
MySQL
также поддерживает dual
(а также без синтаксиса).
Ответ 2
не забывайте, что в большинстве случаев вам не нужно использовать 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;
...
Ответ 3
хорошо использовать двойную Таблица
Да, для этой цели обычно используется двойная таблица. Это довольно стандартно в Oracle, когда у вас нет таблицы для выбора.
Ответ 4
Думаю, вам нужно использовать двойное. он используется, когда вам нужно запустить SQL, у которого нет имени таблицы. Я не могу сказать, что я использую его гораздо больше, чем в сценариях SQL, чтобы повторить, что что-то запущено или что-то глупое.
Ответ 5
Да, двойная таблица - это обычный способ сделать это в Oracle. На самом деле, это было введено только для этого.
Основным преимуществом DUAL является то, что оптимизатор в Oracle знает, что он особенный, поэтому запросы, использующие его, могут выполняться быстрее, чем если бы вы использовали таблицу из одной строки, которую вы сделали самостоятельно. Кроме этого, в этом нет ничего особенного.
Ответ 6
Собственно, реализация SQL Server нестандартна. SQL-92 Standard (раздел 7.9) требует предложения FROM в инструкции SELECT. DUAL - это Oracle способ предоставления таблицы для выбора, чтобы получить скалярную строку.