Программирование >>  Преобразование значений null 

1 ... 15 16 17 [ 18 ] 19 20 21 ... 219


20 30 40

Использование UNION вместо UNION ALL, вероятнее всего, приведет к операции сортировки с целью устранения дубликатов. Об этом необходимо помнить при работе с большими результирующими множествами. Операция UNION примерно эквивалентна следующему запросу, в котором к результату операции UNION ALL применяется ключевое

слово DISTINCT:

Решение

Объединение строк из нескольких таблиц осуществляется с помощью операции над множествами UNION ALL (объединить все):

1 select ename as ename and dname, deptno

2 from emp

3 where deptno = 10

4 union all

5 select ----------null

6 from t1

7 union all

8 select dname, deptno

9 from dept

Обсуждение

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

select deptno select deptno, dname

from dept from dept

union all union

select ename select deptno

from emp from emp

Важно отметить, что UNION ALL включит и дубликаты, если они есть. Если дубликаты не нужны, используется оператор UNION. Например, в результате объединения оператором UNION столбцов EMP.DEPTNO и DEPT.DEPTNO возвращаются только четыре строки:

select deptno

from emp union

select deptno

from dept

DEPTNO



select distinct deptno

from ( select deptno from emp union all select deptno from dept )

DEPTNO

10 20 30 40

DISTINCT следует применять в запросах только в случае необходимости. То же правило относится и к операции UNION: не используйте ее вместо UNION ALL, если в этом нет необходимости.

Объединение взаимосвязанных строк Задача

Требуется возвратить строки нескольких таблиц, объединяя их по известному общему столбцу или по столбцам с общими значениями. Например, необходимо вывести имена всех служащих 10-го отдела, а также местонахождение отдела для каждого служащего, но эти данные хранятся в двух разных таблицах. Должно быть получено следующее результирующее множество:

ENAME LOC

CLARK NEW YORK

KING NEW YORK MILLER NEW YORK

Решение

Объедините таблицу EMP с таблицей DEPT по столбцу DEPTNO:

1 select e.ename, d.loc

2 from emp e, dept d

3 where e.deptno = d.deptno

4 and e.deptno = 10

Обсуждение

Решение является примером объединения (join) или, чтобы быть более точным, эквиобъединения (equi-join), которое является разновидностью внутреннего объединения (inner join). Объединение - это операция, в результате которой строки двух таблиц соединяются в одну. Эк-



виобъединение - это объединение, в котором условием объединения является равенство (например, равенство номеров отделов). Внутреннее объединение - исходный тип объединения; возвращаемые строки содержат данные всех таблиц.

Концептуально при выполнении объединения сначала создается декартово произведение (все возможные сочетания строк) таблиц, перечисленных в конструкции FROM, как показано ниже:

select

e.ename, d.loc,

e.deptno as emp deptno,

d.deptno as dept deptno

from

emp e, dept d

where e.deptno = 10

ENAME

LOC EMP DEPTNO DEPT DEPTNO

CLARK

NEW YORK

10 10

KING

NEW YORK

10 10

MILLER

NEW YORK

10 10

CLARK

DALLAS

10 20

KING

DALLAS

10 20

MILLER

DALLAS

10 20

CLARK

CHICAGO

10 30

KING

CHICAGO

10 30

MILLER

CHICAGO

10 30

CLARK

BOSTON

10 40

KING

BOSTON

10 40

MILLER

BOSTON

10 40

Каждому служащему из таблицы EMP (10-го отдела) ставится в соответствие каждый отдел из таблицы DEPT. Затем выражение предиката WHERE, включающее столбцы e.deptno и d.deptno (объединение), ограничивает результирующее множество таким образом, что возвращены будут только те строки, для которых значения EMP.DEPTNO иDEPT.DEPTNO равны:

select e.ename, d.loc,

e.deptno as emp deptno, d.deptno as dept deptno from emp e, dept d where e.deptno = d.deptno and e.deptno = 10

ENAME

EMP DEPTNO DEPT DEPTNO

CLARK

KING

MILLER

NEW YORK NEW YORK NEW YORK

10 10 10

10 10 10

Альтернативное решение - явное использование оператора JOIN (объединить) (ключевое слово INNER (внутренний) является необязательным):



1 ... 15 16 17 [ 18 ] 19 20 21 ... 219

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика