Читайте также:
|
|
Иногда возникает необходимость объединить строки, возвращаемые несколькими запросами, в одно результирующее множество, не сравнивая содержимое соответствующих столбцов. SQL поддерживает такую возможность с помощью операторов множеств. Операторы множеств комбинируют строки, возвращаемые двумя запросами в одно результирующее множество. Количество и типы данных колонок в объединяемых с помощью операторов множеств запросах должны совпадать. Длины и имена колонок могут быть разными. Если имена колонок отличаются, то имена колонок результирующего множества будут совпадать с именами колонок первой таблицы.
UNION – возвращает все строки, выбранные первым и вторым запросами (реляционная операция «Объединение»)
UNION ALL – возвращает все строки, включая повторяющиеся, выбранные первым и вторым запросами
INTERSECT – возвращает строки, выбранные и первым, и вторым запросами (реляционная операция «Пересечение»)
MINUS - возвращает строки, выбранные первым запросом, из которых исключены строки, выбранные вторым запросом (реляционная операция «Вычитание»)
SELECT [ ALL | DISTINCT] список_выбора FROM таблица1 [WHERE условие1 ]
{UNION | UNION ALL | INTERSECT | MINUS}
SELECT [ ALL | DISTINCT] список_выбора FROM таблица2 [WHERE условие2 ]
[ORDER BY { столбец | псевдоним | позиция } [ ASC | DESC]];
SQL> SELECT * FROM emp_bonus;
ENAME JOB BONUS
---------- --------- ---------
SCOTT ANALYST 3000
FORD ANALYST 3000
STONE ADVISER 2000
SQL> SELECT ename, job, sal FROM emp
2 WHERE job<='CLERK';
ENAME JOB SAL
---------- --------- ---------
SMITH CLERK 800
SCOTT ANALYST 3000
ADAMS CLERK 1100
JAMES CLERK 950
FORD ANALYST 3000
MILLER CLERK 1300
6 rows selected.
SQL> SELECT * FROM emp_bonus
2 UNION
3 SELECT ename, job, sal FROM emp WHERE job<='CLERK';
ENAME JOB BONUS
---------- --------- ---------
ADAMS CLERK 1100
FORD ANALYST 3000
JAMES CLERK 950
MILLER CLERK 1300
SCOTT ANALYST 3000
SMITH CLERK 800
STONE ADVISER 2000
7 rows selected.
SQL> SELECT * FROM emp_bonus
2 UNION ALL
3 SELECT ename, job, sal FROM emp WHERE job<='CLERK';
ENAME JOB BONUS
---------- --------- ---------
SCOTT ANALYST 3000
FORD ANALYST 3000
STONE ADVISER 2000
SMITH CLERK 800
SCOTT ANALYST 3000
ADAMS CLERK 1100
JAMES CLERK 950
FORD ANALYST 3000
MILLER CLERK 1300
9 rows selected.
SQL> SELECT * FROM emp_bonus
2 INTERSECT
3 SELECT ename, job, sal FROM emp WHERE job<='CLERK';
ENAME JOB BONUS
---------- --------- ---------
FORD ANALYST 3000
SCOTT ANALYST 3000
SQL> SELECT * FROM emp_bonus
2 MINUS
3 SELECT ename, job, sal FROM emp
4 WHERE job<='CLERK';
ENAME JOB BONUS
---------- --------- ---------
STONE ADVISER 2000
SQL> SELECT * FROM emp_bonus
2 UNION
3 SELECT ename, job, sal FROM emp WHERE job<='CLERK'
4 ORDER BY 1;
ENAME JOB BONUS
---------- --------- ---------
ADAMS CLERK 1100
FORD ANALYST 3000
JAMES CLERK 950
MILLER CLERK 1300
SCOTT ANALYST 3000
SMITH CLERK 800
STONE ADVISER 2000
7 rows selected.
Дата добавления: 2014-12-18; просмотров: 82 | Поможем написать вашу работу | Нарушение авторских прав |