Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Синтаксически нельзя явно задать элемент distinct. Вместо этого он предполагается, когда явно не задан элемент all.




 

Объединение (UNION) R S отношений R и S можно получить в результате их конкатенации с образованием одного отношения с исключением кортежей-дубликатов. При этом отношения R и S должны быть совместимы, т.е. иметь одинаковое количество полей с совпадающими типами данных. Иначе говоря, отношения должны быть совместимы по объединению.

Объединением двух таблиц R и S является таблица, содержащая все строки, которые имеются в первой таблице R, во второй таблице S или в обеих таблицах сразу.

 

R
a1 a2
A  
A  
B  
B  
B  
S
b1 b2
  H
  G
  H

 

 

SELECT R.a1, R.a2

FROM R

UNION

SELECT S.b2, S.b1

FROM S

 

a1 a2
A  
A  
B  
B  
B  
G  
H  
H  

 

SELECT S1.b1, S1.b2

FROM S1

UNION

SELECT R1.a2, R1.a1

FROM R1

b1 b2
  A
  B
  H
  A
  G
  B
  H
  B

 

В языке T-SQL операция над множествами union объединяет результирующие наборы двух входных запросов. Если строка присутствует в любом из входных наборов, бна пой результате операции union. T-SQL поддерживает обе разновидности операции union all и union (неявный элемент distinct).

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

Основные правила объединения результирующих наборов двух запросов с помощью операции UNION:

· Количество и порядок столбцов должны быть одинаковыми во всех запросах.

· Тип данных должен быть совестимым.

Синтаксис

{ <query_specification> | (<query_expression>) }

UNION [ ALL ]

<query_specification | (<query_expression>)

[ UNION [ ALL ] <query_specification> | (<query_expression>)

[... n ] ]

Аргументы

<query_specification> | (<query_expression>) - Спецификация запроса или выражение запроса, возвращающее данные для объединения с данными из другой спецификации запроса или выражения запроса.

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

UNION -Указывает на то, что несколько результирующих наборов следует объединить и возвратить в виде единого результирующего набора.

ALL - Объединяет в результирующий набор все строки. Это относится и к дублирующимся строкам.

Операция над множествами UNION ALL возвращает все строки, которые встречаются в любом из результирующих мультимножеств, полученных во входных запросах операции, без реального сравнения строк и исключения дубликатов. Если Запрос1 возвращает т строк, а Запрос2 — п строк, тогда Запрос1 UNION ALL Запрос2 вернет т + п строк.

Пример:

Запрос

USE AdventureWorks;

GO

SELECT ProductModelID, Name

FROM Production.ProductModel

WHERE ProductModelID IN (98, 118, 61, 3)

дает результат

Запрос

USE AdventureWorks;

GO

SELECT ProductModelID, Name

FROM dbo.Gloves

ORDER BY Name;

дает результат

Запрос

USE AdventureWorks;

GO

SELECT ProductModelID, Name

FROM Production.ProductModel

WHERE ProductModelID IN (98, 118, 61, 3)

UNION All

SELECT ProductModelID, Name

FROM dbo.Gloves

ORDER BY Name

дает результат

Обратите внимание на строки дубликаты.

 

Операция над множествами UNION DISTINCT (операция union с неявным элементом distinct) на логическом уровне действует как преобразователь входных мультимножеств в настоящие множества за счет удаления дубликатов и возвращает множество со всеми строками, встречающимися в любом из входных множеств.

Пример:

USE AdventureWorks;

GO

SELECT ProductModelID, Name

FROM Production.ProductModel

WHERE ProductModelID IN (98, 118, 61, 3)

UNION

SELECT ProductModelID, Name

FROM dbo.Gloves

ORDER BY Name;

дает результат без повторяющихся строк

Когда следует применять операцию union all, а когда — union? Если дубликаты возможны после объединения двух множеств операцией объединения, и необходимо вернуть дубликаты, то следует применять union all. Если вероятность наличия дубликатов существует, но нужно вернуть только отличающиеся друг от друга строки, следует использовать union. Если дубликатов быть не может после объединения двух множеств, операции union и Union all логически равнозначны. В этом случае рекомендуется применять Union all, потому что элемент all устраняет дополнительные затраты SQL Server, связанные с про­веркой на наличие дубликатов.

 

Пересечение (INTERSECT) R S определяет отношение, которое содержит кортежи, присутствующие как в отношении R, так и в отношении S. Отношения R и S должны быть совместимы по объединению.

Пересечением двух таблиц R и S является таблица, содержащая все строки, присутствующие в обеих исходных таблицах одновременно.

R.a1 R.a2 S.b1 S.b2
A   A  
A   G  
B   H  
B   B  

 

SELECT R.a1, R.a2

FROM R

INTERSECT

SELECT S.b1, S.b2

FROM S

 

R.a1 R.a2
A  
B  

 

Разность множеств (EXCEPT) – это множество элементов, принадлежащих первому и не принадлежащих второму. В языке T-SQL разность множеств реализуется с помощью операции except. Операция except действует на результирующие наборы двух входных запросов и возвращает строки, которые встречаются в первом наборе, но не встречаются во втором.

SELECT R.a1, R.a2

FROM R

EXCEPT

SELECT S.b1, S.b2

FROM S

Результат:

 

 

В Transact-SQL имеются операторы EXCEPT и INTERSECT.

Эти операторы возвращают различные значения, сравнивая результаты двух запросов.

Оператор EXCEPT возвращает все различные значения, возвращенные левым запросом и отсутствующие в результатах выполнения правого запроса.

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...