Jump to content

Операции над наборами (SQL)

(Перенаправлено из Union (SQL) )

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

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

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

[ редактировать ]

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

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

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

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

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

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

Выполнение этого утверждения:

SELECT * FROM sales2005
UNION
SELECT * FROM sales2006;

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

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

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

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

SELECT * FROM sales2005
UNION ALL
SELECT * FROM sales2006;

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

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

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

Оператор ПЕРЕСЕЧЕНИЕ

[ редактировать ]

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

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

SELECT *
FROM   Orders
WHERE  Quantity BETWEEN 1 AND 100

INTERSECT

SELECT *
FROM   Orders
WHERE  Quantity BETWEEN 50 AND 200;

ЗА ИСКЛЮЧЕНИЕМ оператор

[ редактировать ]

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

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

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

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

SELECT *
FROM   Orders
WHERE  Quantity BETWEEN 1 AND 100

EXCEPT

SELECT *
FROM   Orders
WHERE  Quantity BETWEEN 50 AND 75;

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

SELECT o1.*
FROM (
    SELECT *
    FROM Orders
    WHERE Quantity BETWEEN 1 AND 100) o1
LEFT JOIN (
    SELECT *
    FROM Orders
    WHERE Quantity BETWEEN 50 AND 75) o2
ON o1.id = o2.id
WHERE o2.id IS NULL

См. также

[ редактировать ]
  1. ^ «Операторы СОЮЗ [ВСЕ], ПЕРЕСЕЧЕНИЕ, МИНУС» . Оракул . Проверено 14 июля 2016 г.
  2. ^ " а UNION ALL рассматривает технику управления обслуживанием и производительностью в среде большого хранилища данных... Это UNION ALL Этот метод избавил многих моих клиентов от проблем, связанных с проектированием баз данных, чувствительных ко времени. Эти базы данных обычно имеют чрезвычайно изменчивую часть текущего периода, месяца или дня, а более старые данные редко обновляются. Используя различные распределения контейнеров DASD, табличные пространства, таблицы и определения индексов, параметры можно настроить с учетом конкретных требований производительности для этих различных уровней волатильности и ситуаций с частотой обновления. Варианты дизайна таблиц хранилища данных Terabyte - Часть 2 (по состоянию на 25 июля 2006 г.)
  3. ^ "E071-03, EXCEPT DISTINCT оператор таблицы: Используйте MINUS вместо EXCEPT DISTINCT" «Соответствие Oracle базовому SQL:2003» . Docs.oracle.com . Проверено 7 июля 2022 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 2b06c7f8cf7a292100be39c2a8a9f831__1689862740
URL1:https://arc.ask3.ru/arc/aa/2b/31/2b06c7f8cf7a292100be39c2a8a9f831.html
Заголовок, (Title) документа по адресу, URL1:
Set operations (SQL) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)