В этом учебном материале вы узнаете, как использовать Oracle оператор UNION с синтаксисом и примерами.
Описание
Oracle оператор UNION используется для объединения наборов результатов из 2-х или более Oracle запросов SELECT. Он удаляет повторяющиеся строки между различными запросами SELECT.
Каждый запрос SELECT внутри оператора UNION должен иметь одинаковое количество полей в результирующих наборах с одинаковыми типами данных.
Синтаксис
Синтаксис оператора UNION в Oracle/PLSQL:
FROM tables
[WHERE conditions]
UNION
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
Параметры или аргументы
expression1, expression2, expression_n - Столбцы или расчеты, которые вы хотите получить.
tables - Таблицы из которых вы хотите получить записи.
WHERE conditions - Необязательный. Условия, которые должны быть выполнены для выбранных записей.
Примечание
- В обоих запросах SELECT должно быть одинаковое количество выражений.
Пример с одним полем
Следующий пример Oracle оператора UNION, возвращает одно поле из двух запросов SELECT (и оба поля имеют один и тот же тип данных):
1 2 3 4 5 |
SELECT supplier_id FROM suppliers UNION SELECT supplier_id FROM order_details; |
В этом примере оператора UNION, если supplier_id присутствует в обоих таблицах suppliers и order_details, то supplier_id появляется один в наборе результатов. Оператор Oracle UNION удаляет дубликаты. Если вы не хотите, чтобы дубликаты были удалены, попробуйте использовать Oracle оператора UNION ALL.
Пример использования ORDER BY
Oracle оператор UNION может использовать оператор ORDER BY, чтобы упорядочить результаты запроса.
Например:
1 2 3 4 5 6 7 8 |
SELECT supplier_id, supplier_name FROM suppliers WHERE supplier_id <= 500 UNION SELECT company_id, company_name FROM companies WHERE company_name = 'Apple' ORDER BY 2; |
В этом примере UNION, так как имена столбцов в двух запросах SELECT отличаются, то в ORDER BY выгоднее ссылаться на положение столбцов в результирующем наборе. В этом примере, мы отсортировали результаты по supplier_name / company_name в порядке возрастания, как это обозначено в ORDER BY 2.
Поля supplier_name / company_name находятся в позиции # 2 в результирующем наборе.
Часто задаваемые вопросы
Вопрос: Мне нужно сравнить две даты и вернуть количество строк поля, основанного на значении дат. Например, у меня есть в таблице поле даты, которое называется дата последнего обновления. Я должен проверить, если TRUNC (last_updated_date)> = TRUNC (Sysdate-13).
Ответ: Поскольку вы используете функцию COUNT, которая является агрегатной функцией, то мы рекомендуем использовать Oracle оператор UNION. Например, вы можете попробовать следующее:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
SELECT a.code AS Code, a.name AS Name, COUNT(b.Ncode) FROM cdmaster a, nmmaster b WHERE a.code = b.code AND a.status = 1 AND b.status = 1 AND b.Ncode <> 'a10' AND TRUNC(last_updated_date) <= TRUNC(sysdate-13) GROUP BY a.code, a.name UNION SELECT a.code AS Code, a.name AS Name, COUNT(b.Ncode) FROM cdmaster a, nmmaster b WHERE a.code = b.code AND a.status = 1 AND b.status = 1 AND b.Ncode <> 'a10' AND TRUNC(last_updated_date) > TRUNC(sysdate-13) GROUP BY a.code, a.name; |
Oracle оператор UNION позволит выполнить подсчет на основе одного набора критериев.
А также выполнить подсчет на основе другого набора критериев.