Oracle intersect: INTERSECT ОПЕРАТОР — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite
Содержание
Использование операторов множеств — CoderLessons.com
Операторы множеств используются для объединения результатов двух (или более) операторов SELECT. Операторы SET, доступные в Oracle 11g, это UNION, UNION ALL, INTERSECT и MINUS.
Оператор набора UNION возвращает объединенные результаты двух операторов SELECT. По сути, он удаляет дубликаты из результатов, т. Е. Для каждого дублированного результата будет указана только одна строка. Чтобы противостоять этому поведению, используйте оператор набора UNION ALL, который сохраняет дубликаты в окончательный результат. INTERSECT перечисляет только те записи, которые являются общими для обоих запросов SELECT; оператор множества MINUS удаляет результаты второго запроса из выходных данных, если они также найдены в результатах первого запроса. Операции INTERSECT и MINUS set дают дублированные результаты.
Все операторы SET имеют одинаковую степень приоритета среди них. Вместо этого, во время выполнения запроса Oracle начинает оценку слева направо или сверху вниз. Если явно используются круглые скобки, порядок может отличаться, так как круглые скобки будут иметь приоритет над болтающиеся операторы.
Нужно помнить
Все участвующие операторы SELECT должны выбирать одинаковое количество столбцов. Имена столбцов, используемые на дисплее, берутся из первого запроса.
Типы данных списка столбцов должны быть совместимы / неявно преобразованы оракулом. Oracle не будет выполнять неявное преобразование типов, если соответствующие столбцы в запросах компонентов принадлежат разным группам типов данных. Например, если столбец в первом запросе компонента имеет тип данных DATE, а соответствующий столбец во втором запросе компонента – данные Тип CHAR, Oracle не будет выполнять неявное преобразование, но вызовет ошибку ORA-01790.
Позиционное упорядочение должно использоваться для сортировки набора результатов. Индивидуальное упорядочение набора результатов не допускается с помощью операторов Set. ORDER BY может появиться один раз в конце запроса. Например,
Операторы UNION и INTERSECT являются коммутативными, то есть порядок запросов не важен; это не меняет окончательный результат.
С точки зрения производительности, UNION ALL показывает лучшую производительность по сравнению с UNION, потому что ресурсы не тратятся впустую на фильтрацию дубликатов и сортировку результирующего набора.
Операторы множеств могут быть частью подзапросов.
Операторы set нельзя использовать в инструкциях SELECT, содержащих выражения коллекции TABLE.
Таблицы LONG, BLOB, CLOB, BFILE, VARRAY или вложенные таблицы не разрешены для использования в операторах Set. Предложение обновления для операторов набора недопустимо.
Все участвующие операторы SELECT должны выбирать одинаковое количество столбцов. Имена столбцов, используемые на дисплее, берутся из первого запроса.
Типы данных списка столбцов должны быть совместимы / неявно преобразованы оракулом. Oracle не будет выполнять неявное преобразование типов, если соответствующие столбцы в запросах компонентов принадлежат разным группам типов данных. Например, если столбец в первом запросе компонента имеет тип данных DATE, а соответствующий столбец во втором запросе компонента – данные Тип CHAR, Oracle не будет выполнять неявное преобразование, но вызовет ошибку ORA-01790.
Позиционное упорядочение должно использоваться для сортировки набора результатов. Индивидуальное упорядочение набора результатов не допускается с помощью операторов Set. ORDER BY может появиться один раз в конце запроса. Например,
Операторы UNION и INTERSECT являются коммутативными, то есть порядок запросов не важен; это не меняет окончательный результат.
С точки зрения производительности, UNION ALL показывает лучшую производительность по сравнению с UNION, потому что ресурсы не тратятся впустую на фильтрацию дубликатов и сортировку результирующего набора.
Операторы множеств могут быть частью подзапросов.
Операторы set нельзя использовать в инструкциях SELECT, содержащих выражения коллекции TABLE.
Таблицы LONG, BLOB, CLOB, BFILE, VARRAY или вложенные таблицы не разрешены для использования в операторах Set. Предложение обновления для операторов набора недопустимо.
UNION
Когда несколько запросов SELECT объединяются с использованием оператора UNION, Oracle отображает объединенный результат всех составных запросов SELECT после удаления всех дубликатов и в отсортированном порядке (по возрастанию по умолчанию), не игнорируя значения NULL.
Рассмотрим приведенные ниже пять запросов, объединенных с помощью оператора UNION. Окончательный объединенный набор результатов содержит значения из всех SQL-запросов. Обратите внимание на дублирование удаления и сортировку данных.
SELECT 1 NUM FROM DUAL UNION SELECT 5 FROM DUAL UNION SELECT 3 FROM DUAL UNION SELECT 6 FROM DUAL UNION SELECT 3 FROM DUAL; NUM ------- 1 3 5 6
Следует отметить, что столбцы, выбранные в запросах SELECT, должны иметь совместимый тип данных. Oracle выдает сообщение об ошибке при нарушении правила.
SELECT TO_DATE('12-OCT-03') FROM DUAL UNION SELECT '13-OCT-03' FROM DUAL; SELECT TO_DATE('12-OCT-03') FROM DUAL * ERROR at line 1: ORA-01790: expression must have same datatype as corresponding expression
СОЮЗ ВСЕХ
UNION и UNION ALL похожи по своему функционированию с небольшой разницей. Но UNION ALL дает набор результатов без устранения дублирования и сортировки данных. Например, в приведенном выше запросе UNION заменяется на UNION ALL, чтобы увидеть эффект.
Рассмотрим запрос, продемонстрированный в разделе UNION. Обратите внимание на разницу в выводе, который генерируется без сортировки и дедупликации.
SELECT 1 NUM FROM DUAL UNION ALL SELECT 5 FROM DUAL UNION ALL SELECT 3 FROM DUAL UNION ALL SELECT 6 FROM DUAL UNION ALL SELECT 3 FROM DUAL; NUM ------- 1 5 3 6 3
ПЕРЕСЕЧЕНИЕ
Используя оператор INTERSECT, Oracle отображает общие строки из обоих операторов SELECT без дубликатов и данных, расположенных в отсортированном порядке (по возрастанию по умолчанию).
Например, приведенный ниже запрос SELECT извлекает зарплату, которая является обычной в отделах 10 и 20. В соответствии со стандартами ISO SQL, INTERSECT превосходит другие по приоритетности при оценке операторов множеств, но это все еще не включено Oracle.
SELECT SALARY FROM employees WHERE DEPARTMENT_ID = 10 INTRESECT SELECT SALARY FROM employees WHERE DEPARTMENT_ID = 20 SALARY --------- 1500 1200 2000
МИНУС
Оператор минус отображает строки, которые присутствуют в первом запросе, но отсутствуют во втором запросе, без дубликатов и данных, расположенных по умолчанию в порядке возрастания.
SELECT JOB_ID FROM employees WHERE DEPARTMENT_ID = 10 MINUS SELECT JOB_ID FROM employees WHERE DEPARTMENT_ID = 20; JOB_ID ------------- HR FIN ADMIN
Соответствие инструкции SELECT
Возможны сценарии, в которых составные операторы SELECT могут иметь различное количество и тип данных выбранных столбцов. Поэтому, чтобы явно соответствовать списку столбцов, столбцы NULL вставляются в отсутствующие позиции, чтобы соответствовать количеству и типу данных выбранных столбцов в каждом операторе SELECT. Для числовых столбцов можно также заменить ноль, чтобы он соответствовал типу столбцов, выбранных в запросе.
В приведенном ниже запросе тип данных имени сотрудника (varchar2) и идентификатора местоположения (номера) не совпадают. Поэтому выполнение приведенного ниже запроса вызовет ошибку из-за проблемы совместимости.
SELECT DEPARTMENT_ID "Dept", first_name "Employee" FROM employees UNION SELECT DEPARTMENT_ID, LOCATION_ID FROM departments; ERROR at line 1: ORA-01790: expression must have same datatype as corresponding expression
Явно, столбцы могут быть сопоставлены путем замены NULL для идентификатора местоположения и имени сотрудника.
SELECT DEPARTMENT_ID "Dept", first_name "Employee", NULL "Location" FROM employees UNION SELECT DEPARTMENT_ID, NULL "Employee", LOCATION_ID FROM departments;
Использование предложения ORDER BY в операциях SET
Предложение ORDER BY может появляться только один раз в конце запроса, содержащего составные операторы SELECT. Это означает, что отдельные операторы SELECT не могут иметь предложение ORDER BY. Кроме того, сортировка может быть основана на столбцах, которые появляются только в первом запросе SELECT. По этой причине рекомендуется сортировать составной запрос с использованием позиций столбцов.
Приведенный ниже запрос на объединение объединяет результаты двух отделов и сортирует их по столбцу SALARY.
UNION, UNION ALL, INTERSECT, MINUS
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 клиентов, которые не сделали ни одного заказа.
Следующее
Предыдущее
Главная страница
Oracle Intersect, Minus, Union [операции SQL]
RelationalDBDesign
- SiteMap
Оператор Select
«Пред.
Следующий»
- Расширения SQL
- Компоненты базы данных
- Структура БД Oracle
- просмотров словаря данных
- Ведение журнала базы данных SQL Plus
- Oracle SQL отличается
- Заключение программного обеспечения базы данных
- Расширения Oracle — викторина
- Оператор выбора
- Условия операторов запросов
- Подключение к иерархическому поиску
- Союз пересечений минус
- Союз пересечений минус
- Оператор группы SQL
- Расширенные групповые операторы
- Псевдостолбцы Oracle
- Заключение по расширению Oracle
- Манипуляции с данными
- Функции строки символов
- Concat Substr Длина
- instr Синтаксис функции
- Верхний initcap rtrim
- to_char, круглый, усеченный
- круглый, ствол Функции
- Стандартный формат даты
- Формат даты Oracle
- Функции, связанные с действительным временем
- Функции возвращают значения
- Сравнение дат
- Декодирование функций NVL
- Суммировать с помощью декодирования
- Реализации расширения функций
- Запросы на объединение таблиц
- Внутреннее соединение Внешнее соединение — Викторина
- Расширенные запросы Заключение
- Среда SQL Plus
- SQL Plus TextEditor
- Местоположение файла SQL Plus сохранено
- Рабочий лист SQL Plus
- Создание структур таблиц
- Установка места для хранения
- Ограничения уникальности первичного ключа
Урок 4 | ОБЪЕДИНЕНИЕ, ПЕРЕСЕЧЕНИЕ и МИНУС |
Цель | Сравните команды ПЕРЕСЕЧЕНИЕ, МИНУС и ОБЪЕДИНЕНИЕ. |
Как объединить результаты двух отдельных запросов?
Oracle предоставляет три команды,
-
СОЕДИНЕНИЕ
, -
ПЕРЕСЕЧЕНИЕ
и -
МИНУС
,
которые обрабатывают объединение результатов запроса тремя различными способами.
Команда | Описание |
UNION | Наиболее часто используемая команда, UNION объединяет два набора ответов в один набор ответов. Он автоматически удаляет повторяющиеся строки из результатов. |
INTERSECT | INTERSECT дает вам строки, найденные в обоих запросах, путем исключения строк, которые находятся только в одном или другом запросе. |
МИНУС | МИНУС дает вам строки, которые находятся в первом запросе, а не во втором запросе, удаляя из результатов все строки, которые находятся только во втором запросе. |
Различия между командами
Следующая анимация показывает разницу между этими тремя командами с помощью двух кругов для представления двух наборов результатов запроса, помеченных
A и B. Анимация показывает, какие части двух наборов результатов возвращаются при объединении двух запросов с каждым из трех наборов.
команды: ПЕРЕСЕЧЕНИЕ, затем ОБЪЕДИНЕНИЕ, затем МИНУС.
ПЕРЕСЕЧЕНИЕ, затем ОБЪЕДИНЕНИЕ, затем МИНУС команды
Правила команд
При использовании этих команд необходимо соблюдать два важных правила:
- Оба запроса должны иметь совпадающие списки столбцов с соответствующими типами данных. Другими словами, если ваш первый запрос возвращает три столбца, дату, число и символьный столбец, ваш второй запрос также должен вернуть три столбца: дату, число и символьный столбец в указанном порядке. Два запроса не должны использовать одни и те же имена столбцов.
- Список столбцов первого запроса используется для окончательного набора результатов. Если два соответствующих столбца в двух запросах имеют разную длину, первый запрос используется для установки длины конечного набора результатов. Если столбец второго запроса длиннее, вы можете получить ошибку в результатах из-за усечения данных.
Вот пример двух запросов, связанных с командой INTERSECT
:
ВЫБЕРИТЕ TO_CHAR(LAST_UPDATE_DATE,'ГГГГ-ММ'), ОБНОВЛЕНО_BY_USER ИЗ ПРОДУКТА ПЕРЕСЕЧАТЬ ВЫБЕРИТЕ TO_CHAR (LAST_UPDATE_DATETIME, 'ГГГГ-ММ'), CREATED_BY_USER ОТ PET_CARE_LOG ЗАКАЗАТЬ ПО 1
Этот запрос находит одинаковые даты (только год и месяц) и имена сотрудников для изменений, внесенных в таблицу PRODUCT
, и записи журнала, внесенные в PET_CARE_LOG.
На следующем уроке вы узнаете, как использовать расширенные операторы множеств.
Объединение пересечений минус операции
Щелкните ссылку ниже, чтобы прочитать об операциях пересечения, объединения и минуса, используемых в Oracle.
Пересечение, объединение, минус Операции
Werbung
Werbung
Werbung
Werbung
Werbung
Werbung
Werbung
Select Statement
«Пред.
Следующий»
Операторы Oracle UNION, INTERSECT, MINUS и результат запроса сортировки
Oracle UNION, INTERSECT, MINUS ОПЕРАТОРЫ И ЗАПРОС СОРТИРОВКИ
РЕЗУЛЬТАТ
Операторы UNION [ALL], INTERSECT, MINUS
Вы можете комбинировать несколько запросов, используя операторы множества UNION, UNION ALL,
ПЕРЕСЕЧЕНИЕ и МИНУС. Все операторы множества имеют одинаковый приоритет. Если SQL
оператор содержит несколько операторов набора, Oracle оценивает их слева
вправо, если скобки явно не указывают другой порядок.
UNION Пример
Следующий оператор объединяет результаты с
Оператор UNION, который устраняет повторяющиеся выбранные
ряды.
выберите empno,ename,sal из emp
UNION
выберите
empno,ename,salary from oldemp
Что делать, если вам нужно выбрать строки из двух таблиц, но таблицы имеют
разные колонки?
В этой ситуации вы должны использовать TO_CHAR
функция для заполнения недостающих столбцов.
Например,
Этот оператор показывает, что вы должны сопоставить тип данных (используя
TO_CHAR), когда столбцы не существуют в той или иной таблице:
выберите empno, ename, sal, to_char(null) как «Дата передачи» из emp
UNION
выберите empno,ename,to_char(null) как «Sal»,tdate from oldemp;
EMPNO ENAME SAL
Дата перевода
—— —— ——
————-
101 Сами
5000
102 Смит
11 июля 2000 г.
201 Тамим
10 августа 2000 г.
209 Рави
2400
UNION ALL Пример
Оператор UNION возвращает только отдельные строки,
результат, а оператор UNION ALL возвращает все строки. Оператор UNION ALL
не удаляет повторяющиеся выбранные строки:
выбрать empno,ename из emp
объединение всех
выбрать empno,ename из oldemp;
INTERSECT Пример
Следующий оператор объединяет результаты с оператором INTERSECT
оператор, который возвращает только те строки, которые были возвращены обоими запросами:
SELECT empno FROM emp
INTERSECT
SELECT empno FROM oldemp;
МИНУС Пример
Следующий оператор объединяет результаты с оператором МИНУС, который
возвращает только строки, возвращенные первым запросом, но не возвращенные вторым:
ВЫБРАТЬ empno ИЗ emp
МИНУС
ВЫБРАТЬ empno ИЗ oldemp;
СОРТИРОВКА РЕЗУЛЬТАТОВ ЗАПРОСА
Чтобы отсортировать результат запроса, вы можете использовать предложение ORDER BY в операторе SELECT.