Установить операции (SQL) - Википедия - Set operations (SQL)

Установить операции позволяют объединить результаты нескольких запросов в один набор результатов.[1] Операторы набора включают СОЮЗ, ПЕРЕСЕЧЕНИЕ, и КРОМЕ.

Оператор UNION

В SQL то СОЮЗ предложение объединяет результаты двух запросов SQL в один стол всех подходящих ряды. Два запроса должны привести к одинаковому количеству столбцы и совместимый типы данных чтобы объединиться. Любые повторяющиеся записи автоматически удаляются, если СОЮЗ ВСЕ используется.

СОЮЗ может быть полезным в хранилище данных приложения, где таблицы не идеальны нормализованный.[2] Простым примером может служить база данных с таблицами продажи2005 и продажи2006 которые имеют идентичную структуру, но разделены по соображениям производительности. А СОЮЗ запрос может объединить результаты из обеих таблиц.

Обратите внимание, что СОЮЗ ВСЕ не гарантирует порядок строк. Строки второго операнда могут появляться до, после или вместе со строками первого операнда. В ситуациях, когда желателен конкретный порядок, СОРТИРОВАТЬ ПО должны быть использованы.

Обратите внимание, что СОЮЗ ВСЕ может быть намного быстрее обычного СОЮЗ.

Примеры

Учитывая эти две таблицы:

продажи2005
человекколичество
Джо1000
Алекс2000
Боб5000
продажи2006
человекколичество
Джо2000
Алекс2000
Зак35000

Выполнение этого оператора:

ВЫБРАТЬ * ИЗ продажи2005СОЮЗВЫБРАТЬ * ИЗ продажи2006;

дает этот набор результатов, хотя порядок строк может варьироваться, потому что нет СОРТИРОВАТЬ ПО была поставлена ​​статья:

человекколичество
Джо1000
Алекс2000
Боб5000
Джо2000
Зак35000

Обратите внимание, что для Джо есть две строки, потому что эти строки различны по своим столбцам. Для Alex есть только одна строка, потому что эти строки не различны для обоих столбцов.

СОЮЗ ВСЕ дает разные результаты, потому что не удаляет дубликаты. Выполнение этого оператора:

ВЫБРАТЬ * ИЗ продажи2005СОЮЗ ВСЕВЫБРАТЬ * ИЗ продажи2006;

даст эти результаты, опять же допуская отклонение из-за отсутствия СОРТИРОВАТЬ ПО утверждение:

человекколичество
Джо1000
Джо2000
Алекс2000
Алекс2000
Боб5000
Зак35000

Обсуждение полные внешние соединения также есть пример, который использует СОЮЗ.

Оператор INTERSECT

SQL ПЕРЕСЕЧЕНИЕ Оператор принимает результаты двух запросов и возвращает только строки, которые появляются в обоих наборах результатов. В целях дублирования удаления ПЕРЕСЕЧЕНИЕ оператор не различает NULL. В ПЕРЕСЕЧЕНИЕ Оператор удаляет повторяющиеся строки из окончательного набора результатов. В ПЕРЕСЕЧИТЬ ВСЕ Оператор не удаляет повторяющиеся строки из окончательного набора результатов, но если строка появляется X раз в первом запросе и Y раз во втором, она появится минимум (X, Y) раз в наборе результатов.

Пример

Следующий пример ПЕРЕСЕЧЕНИЕ Запрос возвращает все строки из таблицы заказов, где количество находится в диапазоне от 50 до 100.

ВЫБРАТЬ *ИЗ   ЗаказыКУДА  Количество МЕЖДУ 1 И 100ПЕРЕСЕЧЕНИЕВЫБРАТЬ *ИЗ   ЗаказыКУДА  Количество МЕЖДУ 50 И 200;

КРОМЕ оператора

SQL КРОМЕ Оператор берет отдельные строки одного запроса и возвращает строки, которые не появляются во втором наборе результатов. Для удаления строк и дублирования КРОМЕ оператор не различает NULL. В ИСКЛЮЧАЯ ВСЕ Оператор не удаляет дубликаты, но если строка появляется X раз в первом запросе и Y раз во втором, она появится максимум (X - Y, 0) раз в наборе результатов.

Примечательно, что платформа Oracle предоставляет МИНУС оператор, который функционально эквивалентен Стандарт SQL КРОМЕ РАЗЛИЧНОГО оператор [1].

Пример

Следующий пример КРОМЕ Запрос возвращает все строки из таблицы заказов, где количество находится в диапазоне от 1 до 49, и те, которые имеют количество от 76 до 100.

Другими словами; запрос возвращает все строки, в которых количество составляет от 1 до 100, за исключением строк, в которых количество составляет от 50 до 75.

ВЫБРАТЬ *ИЗ   ЗаказыКУДА  Количество МЕЖДУ 1 И 100КРОМЕВЫБРАТЬ *ИЗ   ЗаказыКУДА  Количество МЕЖДУ 50 И 75;

Пример

Следующий пример эквивалентен приведенному выше, но без использования КРОМЕ оператор.

ВЫБРАТЬ o1.*ИЗ (    ВЫБРАТЬ *    ИЗ Заказы    КУДА Количество МЕЖДУ 1 И 100) o1ОСТАВИЛИ ПРИСОЕДИНИТЬСЯ (    ВЫБРАТЬ *    ИЗ Заказы    КУДА Количество МЕЖДУ 50 И 75) o2НА o1.я бы = o2.я быКУДА o2.я бы ЯВЛЯЕТСЯ НОЛЬ

Смотрите также

Рекомендации

  1. ^ «Операторы UNION [ALL], INTERSECT, MINUS». Oracle. Получено 14 июля 2016.
  2. ^ "а СОЮЗ ВСЕ рассматривает методику управления обслуживанием и производительностью в среде большого хранилища данных ... Это СОЮЗ ВСЕ Техника избавила многих моих клиентов от проблем, связанных с временным проектированием баз данных. Эти базы данных обычно имеют чрезвычайно изменчивую часть текущего периода, месяца или дня, а старые данные редко обновляются. Используя различные распределения контейнеров DASD, табличные пространства, таблицы и определения индексов, можно настроить параметры с учетом конкретных соображений производительности для этих различных уровней волатильности и ситуаций с частотой обновления." Варианты дизайна таблицы хранилища терабайтных данных - часть 2 (URL-адрес доступен 25 июля 2006 г.)

внешняя ссылка