6/25/2016

UNION, UNION ALL, INTERSECT, MINUS

UNION, UNION ALL

Пример 1.
SELECT region_id, name
FROM dept
ORDER BY name;
SELECT id, name
FROM region;
REGION_ID  NAME
---------- ----------------------
1          Administration
1          Finance
1          Operations
2          Operations
5          Operations
4          Operations
3          Operations
1          Sales
2          Sales
3          Sales
4          Sales
5          Sales
ID         NAME
---------- ----------------------
1          North America
2          South America
3          Africa / Middle East
4          Asia
5          Europe



 SELECT name FROM region
 UNION
 SELECT name FROM dept;

 NAME
 --------------------------------------------------
 Administration
 Africa / Middle East Asia
 Europe
 Finance
 North
 America
 Operations
 Sales
 South
 America

Комментарий:
Оператор UNION позволяет объединить две или больше инструкций SELECT. Набор результатов каждой инструкции SELECT вычисляются и расположены друг над другом, а затем сортируются с целью устранения дубликатов.

Пример 2.
 SELECT name FROM region
 UNION ALL
 SELECT name FROM dept;


 NAME
 --------------------------------------------------
 North America
 South America
 Africa / Middle East
 Asia
 Europe
 Finance
 Sales
 Sales
 Sales
 Sales
 Sales
 Operations
 Operations
 Operations
 Operations
 . . .

Комментарий:
Оператор UNION ALL не устраняет дубликатов и не сортирует данные. Первые 5 строк из таблицы региона и последние 12 таблицы DEPT.

Пример 3.
 SELECT DISTINCT name FROM region
 UNION ALL
 SELECT DISTINCT name FROM dept
 ORDER BY 1 DESC;

 NAME
 --------------------------------------------------
 South America
 Sales
 Operations
 North America
 Finance
 Europe
 Asia
 Africa / Middle East
 Administration

Комментарий:
На этот раз мы использовали оператор DISTINCT, который вызвал устранения дубликатов. Конечный результат сортируется по убыванию - явно пользователем, а не автоматически.

INTERSECT

Пример 4.
 SELECT id FROM customer
 INTERSECT
 SELECT customer_id FROM ord;

         ID
 ----------
        201
        202
        203
        204
        205
        206
        208
        209
        210
        211
        212
        213
        214

Комментарий:
Оператор INTERSECT возвращает строки, которые появляются в обоих запросах SELECT. В нашем случае, возвращаемый результат следует читать следующим образом: результататом запроса является ID клиентов, которые имеют хотябы один заказ.

MINUS

Пример 5.
 SELECT id FROM customer
 MINUS
 SELECT customer_id FROM ord;

         ID
 ----------
        207
        215

Комментарий:
Оператор MINUS возвращает строки, которые появляются в первом запросе SELECT, и не встречаются во втором. В нашем случае, возвращаемый результат следует читать следующим образом: результататом запроса является ID клиентов, которые не сделали ни одного заказа.

Комментариев нет :

Отправить комментарий