пятница, 29 марта 2013 г.

Как произвести объединение, исключение и пересечение строк наборов

Для начинающих пользователей. Как работают UNION ALL и операции на множествах UNION, EXCEPT, INTERSECT.  В чем отличие UNION ALL и UNION

-- Как работают UNION ALL и операции на множествах UNION, EXCEPT, INTERSECT
-- В чем отличие UNION ALL и UNION


-- Подготовка
IF DB_ID('Specialist') IS NULL
CREATE DATABASE Specialist
GO
IF  EXISTS (SELECT name FROM Specialist.sys.tables
    WHERE name = 'A' AND schema_id = SCHEMA_ID('dbo'))
DROP TABLE A
CREATE TABLE A (X INT)
IF EXISTS (SELECT name FROM Specialist.sys.tables
    WHERE name = 'B' AND schema_id = SCHEMA_ID('dbo'))
DROP TABLE B
CREATE TABLE B (X INT)

-- Значения в A и B
USE Specialist
INSERT A VALUES
    (1),(1),(2),(3),(4)
INSERT B VALUES
    (3),(4),(4),(5),(7)

SELECT X AS A FROM A
SELECT X AS B FROM B

-- Объединение с повторениями

SELECT X AS A 
FROM A
    UNION ALL
SELECT X AS B
FROM B

-- Объединение A и B. возвращает уникальные строки
SELECT X AS A
FROM A
    UNION -- Объединение
SELECT X AS B
FROM B

-- Строки множества A не входящие в B. Возвращает уникальные строки
SELECT X AS A
FROM A
    EXCEPT -- Исключение B из A
SELECT X AS B
FROM B

-- Строки множества B не входящие в A. Возвращает уникальные строки
SELECT X AS B
FROM B
    EXCEPT -- Исключение A из B
SELECT X AS A
FROM A

-- Строки, принадлежащие множествам A и B одновременно. Возвращает уникальные строки
SELECT X AS A
FROM A
    INTERSECT -- Пересечение
SELECT X AS B
FROM B