Оптимальный способ выполнить SELECT без FROM в Oracle
Быстрый ответ
Чтобы выбрать данные без использования таблицы в Oracle, применяйте системную таблицу dual
:
-- Выборка строки 'StackOverflow это весело' без обращения к таблицам
SELECT 'StackOverflow это весело' FROM dual;
Для создания последовательностей без привязки к физическим таблицам используйте CONNECT BY
:
-- Вам нужны номерки для лотереи, но забыли шары дома? Решение есть!
SELECT level FROM dual CONNECT BY level <= 6;
Этот запрос вернёт вам числа от 1 до 6, используя только dual
и CONNECT BY
. Только не стоит верить в удачу всем своим состоянием!
Использование DUAL
— самый быстрый способ получить данные в Oracle, без участия обычных таблиц:
-- Получаем данные из пустоты... Такое возможно только в Oracle
SELECT 'StackOverflow это весело' FROM dual;
Генерация последовательностей чисел без участия таблиц производится с помощью CONNECT BY
:
-- Забыли закупить игровые кубики для игры в Dungeons and Dragons?
SELECT level FROM dual CONNECT BY level <= 6;
Псевдоколонка level
в сочетании с dual
и CONNECT BY
позволит сгенерировать ряд чисел от 1 до 6.
Основы работы с DUAL
DUAL
— это специальная однострочная таблица, создаваемая при установке Oracle. К DUAL
имеют доступ все пользователи Oracle. Данная таблица полезна для получения данных без обращения к физическим таблицам.
Примеры использования DUAL
Генерация дат:
Когда потеряли календарь и хотите узнать даты на ближайшие 10 дней:
SELECT TRUNC(SYSDATE) + level – 1 AS date_generated
FROM dual
CONNECT BY level <= 10;
Этот запрос сгенерирует ряд дат, начиная с текущего дня.
Присвоение переменным значений:
Когда требуется назначить значения переменным без участия таблицы DUAL:
DECLARE
my_var VARCHAR2(100);
BEGIN
-- Привет, DUAL, давай присвоим значения напрямую.
SELECT 'Отличное присвоение' INTO my_var FROM dual;
-- Спасибо, DUAL, за помощь!
END;
Вычисления на ходу:
Когда хотите показать свои навыки SQL, не прибегая к использованию калькулятора:
-- А знаете ли вы, что SQL может помочь и с вашей домашней работой по математике?
SELECT SYSDATE, USER, 3.14159 * (2*2) AS area_of_circle
FROM dual;
Когда можно обойтись без DUAL
Есть случаи, когда использование DUAL не требуется.
Простые операции в PL/SQL:
Например, прямое назначение значения переменным в PL/SQL не требует обращения к DUAL:
DECLARE
todays_date DATE := SYSDATE; -- Прямое присвоение значения переменной
BEGIN
-- Продолжение PL/SQL блока без использования DUAL
END;
Работа с пользовательскими типами данных:
В случае работы с коллекциями или пользовательскими типами данных можно напрямую управлять ими, исключая DUAL.
Визуализация
Представьте, что вы находитесь на автобусной остановке и хотите узнать расписание (🚌). Обычно вы бы взглянули на расписание, расположенное на остановке (FROM Schedules
). Но что делать, если расписания нет?
SELECT 'Автобус приедет в 15:00' AS Info FROM DUAL;
Это как если бы вы спросили о времени у Bluetooth-колонки (🔊) и она ответила вам, не обращаясь к стороннему источнику:
Bluetooth-колонка 🔊✨: 'Автобус приедет в 15:00'
DUAL выдаёт ответ, не требуя наличием реального источника информации.
Ускорение работы с FAST DUAL
Как супергерой Флеш обгоняет обычных людей, так системная таблица DUAL
Oracle работает быстрее обычных таблиц. Оптимизация доступа к DUAL
через FAST DUAL позволяет обеспечить быстрейшую выдачу данных.
Повышение производительности
При выполнении запросов SELECT в Oracle, которые не обращаются к реальным таблицам, оптимизатор активирует специальный механизм FAST DUAL, который значительно ускоряет выдачу результатов.
Сравнение с MySQL
В отличие от Oracle, MySQL одобряет использование запросов SELECT без FROM, что позволяет производить выборку данных без привязки к таблицам:
SELECT 3.14159, 'Привет, StackOverflow!';
Работая с MySQL, придётся привыкнуть к использованию DUAL
при выполнении подобных операций в Oracle.
Полезные материалы
- While loop in Ruby Shoes GUI ToolKit – Stack Overflow — обсуждение на Stack Overflow о том, как выбирать данные без использования FROM в Oracle.
- SELECT – Документация Oracle — официальная документация, где от Oracle объясняются особенности использования SELECT.
- SQL Fiddle — онлайн-инструмент для тестирования и экспериментов с SQL.
- Вопросы – Ask TOM — площадка, где специалисты Oracle делаются своими знаниями об особенностях работы с SQL, в том числе и о выборке данных без FROM.