|
Программирование >> Преобразование значений null
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, как показано ниже:
Каждому служащему из таблицы 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 (внутренний) является необязательным):
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |