stringtranslate.com

Операции над множествами (SQL)

Операции над множествами в SQL — это тип операций, которые позволяют объединять результаты нескольких запросов в один набор результатов . [1]

Операторы множеств в SQL включают UNION, INTERSECT, и EXCEPT, которые математически соответствуют концепциям объединения , пересечения и разности множеств .

СОЮЗ оператор

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

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

Обратите внимание, что это UNION ALLне гарантирует порядок строк. Строки из второго операнда могут появляться до, после или вперемешку со строками из первого операнда. В ситуациях, когда требуется определенный порядок, ORDER BYнеобходимо использовать .

Обратите внимание, что это UNION ALLможет быть намного быстрее, чем обычный UNION.

Примеры

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

Выполнение этого заявления:

ВЫБРАТЬ * ИЗ ОБЪЕДИНЕНИЯ sales2005 ВЫБРАТЬ * ИЗ sales2006 ;      

выдает следующий набор результатов, хотя порядок строк может меняться, поскольку не ORDER BYбыло указано ни одного предложения:

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

UNION ALLдает разные результаты, потому что не устраняет дубликаты. Выполнение этого оператора:

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

даст следующие результаты, снова допуская дисперсию из-за отсутствия утверждения ORDER BY:

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

Оператор INTERSECT

Оператор SQL INTERSECTберет результаты двух запросов и возвращает только строки, которые появляются в обоих наборах результатов. Для целей удаления дубликатов INTERSECTоператор не различает NULLs. INTERSECTОператор удаляет дубликаты строк из окончательного набора результатов. INTERSECT ALLОператор не удаляет дубликаты строк из окончательного набора результатов, но если строка появляется X раз в первом запросе и Y раз во втором, она появится раз в наборе результатов.

Пример

Следующий пример INTERSECTзапроса возвращает все строки из таблицы Orders, где Quantity находится в диапазоне от 50 до 100.

ВЫБЕРИТЕ * ИЗ заказов , ГДЕ КОЛИЧЕСТВО ОТ 1 ДО 100       ПЕРЕСЕЧЕНИЕВЫБЕРИТЕ * ИЗ ЗАКАЗОВ , ГДЕ КОЛИЧЕСТВО ОТ 50 ДО 200 ;       

Оператор EXCEPT

Оператор SQL EXCEPTберет отдельные строки одного запроса и возвращает строки, которые не появляются во втором наборе результатов. В целях устранения строк и удаления дубликатов EXCEPTоператор не различает NULLs. EXCEPT ALLОператор не удаляет дубликаты, но если строка появляется X раз в первом запросе и Y раз во втором, она появится раз в наборе результатов.

Примечательно, что платформа Oracle предоставляет MINUSоператор, функционально эквивалентный стандартному оператору SQL EXCEPT DISTINCT . [3]

Пример

Следующий пример EXCEPTзапроса возвращает все строки из таблицы Orders, где Quantity находится в диапазоне от 1 до 49, а также те, где Quantity находится в диапазоне от 76 до 100.

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

ВЫБЕРИТЕ * ИЗ заказов , ГДЕ КОЛИЧЕСТВО ОТ 1 ДО 100       КРОМЕВЫБЕРИТЕ * ИЗ ЗАКАЗОВ , ГДЕ КОЛИЧЕСТВО ОТ 50 ДО 75 ;       

Пример

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

SELECT o1 . * FROM ( SELECT * FROM OrdersWHEREQuantityBETWEEN 1AND 100 ) o1 LEFT JOIN ( SELECT * FROM OrdersWHEREQuantityBETWEEN 50AND 75 ) o2 ON o1.id = o2.idWHERE o2.idISNULL                                

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

Ссылки

  1. ^ "Операторы UNION [ALL], INTERSECT, MINUS". Oracle . Получено 14 июля 2016 г. .
  2. ^ " метод UNION ALLпредставлений для управления обслуживанием и производительностью в вашей большой среде хранилища данных ... Этот UNION ALLметод избавил многих моих клиентов от проблем, связанных с чувствительными ко времени проектами баз данных. Эти базы данных обычно имеют чрезвычайно изменчивые текущие временные рамки, месяцы или дни, а старые данные редко обновляются. Используя различные распределения контейнеров DASD, табличные пространства, таблицы и определения индексов, параметры можно настроить для конкретных соображений производительности для этих различных уровней изменчивости и ситуаций частоты обновления ". Выбор дизайна таблиц хранилища данных Terabyte - Часть 2 (проверено 25 июля 2006 г.)
  3. ^ "E071-03, EXCEPT DISTINCTоператор таблицы: используйте MINUSвместо EXCEPT DISTINCT" "Oracle Compliance To Core SQL:2003". Docs.oracle.com . Получено 7 июля 2022 г. .

Внешние ссылки