Udostępnij za pośrednictwem


Wybierz przykłady (Transact-SQL)

W tym temacie przedstawiono przykłady używania Zaznacz instrukcja.

A.Użycie polecenia SELECT do wierszy i kolumn

W poniższym przykładzie pokazano trzy przykłady kodu.W tym przykładzie pierwsza kod zwraca wszystkie wiersze (nie klauzula jest określona) i wszystkie kolumny (za pomocą *) z Product tabela w AdventureWorks2008R2 bazy danych.

USE AdventureWorks2008R2;
GO
SELECT *
FROM Production.Product
ORDER BY Name ASC;
-- Alternate way.
USE AdventureWorks2008R2;
GO
SELECT p.*
FROM Production.Product AS p
ORDER BY Name ASC;
GO

W tym przykładzie zwraca wszystkie wiersze (nie klauzula jest określona) i tylko podzbiór kolumn (Name, ProductNumber, ListPrice) z Product tabela w AdventureWorks2008R2 bazy danych.Ponadto dodaje się nagłówek kolumna .

USE AdventureWorks2008R2;
GO
SELECT Name, ProductNumber, ListPrice AS Price
FROM Production.Product 
ORDER BY Name ASC;
GO

W tym przykładzie zwraca tylko wiersze z Product mają linii produktów z R i mają dni produkcja jest mniejsza niż 4.

USE AdventureWorks2008R2;
GO
SELECT Name, ProductNumber, ListPrice AS Price
FROM Production.Product 
WHERE ProductLine = 'R' 
AND DaysToManufacture < 4
ORDER BY Name ASC;
GO

B.Użycie polecenia SELECT z nagłówków kolumna i obliczenia

Poniższe przykłady zwracać wszystkie wiersze z Product tabela.Pierwszy przykład zwraca wartość całkowitą sprzedaż i rabaty dla każdego produktu.W drugim przykładzie całkowity przychód jest obliczane dla każdego produktu.

USE AdventureWorks2008R2;
GO
SELECT p.Name AS ProductName, 
NonDiscountSales = (OrderQty * UnitPrice),
Discounts = ((OrderQty * UnitPrice) * UnitPriceDiscount)
FROM Production.Product AS p 
INNER JOIN Sales.SalesOrderDetail AS sod
ON p.ProductID = sod.ProductID 
ORDER BY ProductName DESC;
GO

To jest kwerenda, która oblicza przychodów dla każdego produktu w każdym zamówieniu sprzedaży.

USE AdventureWorks2008R2;
GO
SELECT 'Total income is', ((OrderQty * UnitPrice) * (1.0 - UnitPriceDiscount)), ' for ',
p.Name AS ProductName 
FROM Production.Product AS p 
INNER JOIN Sales.SalesOrderDetail AS sod
ON p.ProductID = sod.ProductID 
ORDER BY ProductName ASC;
GO

C.Przy użyciu SELECT DISTINCT

W poniższym przykładzie użyto DISTINCT Aby uniemożliwić pobieranie zduplikowane tytułów.

USE AdventureWorks2008R2;
GO
SELECT DISTINCT JobTitle
FROM HumanResources.Employee
ORDER BY JobTitle;
GO

D.Tworzenie tabel przy użyciu polecenia SELECT INTO

Poniższy przykład pierwszy tworzy tymczasową tabela o nazwie #Bicycles w tempdb.

USE tempdb;
GO
IF OBJECT_ID (N'#Bicycles',N'U') IS NOT NULL
DROP TABLE #Bicycles;
GO
SELECT * 
INTO #Bicycles
FROM AdventureWorks2008R2.Production.Product
WHERE ProductNumber LIKE 'BK%';
GO

Ten drugi przykład tworzy stałe tabela NewProducts.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('dbo.NewProducts', 'U') IS NOT NULL
    DROP TABLE dbo.NewProducts;
GO
ALTER DATABASE AdventureWorks2008R2 SET RECOVERY BULK_LOGGED;
GO

SELECT * INTO dbo.NewProducts
FROM Production.Product
WHERE ListPrice > $25 
AND ListPrice < $100;
GO
ALTER DATABASE AdventureWorks2008R2 SET RECOVERY FULL;
GO

E.Za pomocą podkwerend skorelowanych

Poniższy przykład pokazuje kwerend, które są semantycznie równoważne i ilustruje różnicę między za pomocą EXISTS słowa kluczowego i IN słów kluczowych.Obie są przykłady prawidłowe podzapytanie , która pobiera jedno wystąpienie każdej nazwie produktu, dla którego model produktu jest jersey logo Tuleja długie oraz ProductModelID numery są zgodne między Product i ProductModel tabele.

USE AdventureWorks2008R2;
GO
SELECT DISTINCT Name
FROM Production.Product AS p 
WHERE EXISTS
    (SELECT *
     FROM Production.ProductModel AS pm 
     WHERE p.ProductModelID = pm.ProductModelID
           AND pm.Name LIKE 'Long-Sleeve Logo Jersey%');
GO

-- OR

USE AdventureWorks2008R2;
GO
SELECT DISTINCT Name
FROM Production.Product
WHERE ProductModelID IN
    (SELECT ProductModelID 
     FROM Production.ProductModel
     WHERE Name LIKE 'Long-Sleeve Logo Jersey%');
GO

W poniższym przykładzie użyto IN w skorelowanych lub powtarzane, podzapytanie.Jest to kwerenda, która zależy od zewnętrznej kwerendy dla jego wartości.Kwerenda jest wykonywana wielokrotnie, czas dla każdego wiersza, wybranego przez kwerendę zewnętrznego.Ta kwerenda pobiera jedno wystąpienie imię i nazwisko każdego pracownika, dla którego premii w SalesPerson tabela jest 5000.00 i dla których numery identyfikacyjne pracowników są zgodne w Employee i SalesPerson tabele.

USE AdventureWorks2008R2;
GO
SELECT DISTINCT p.LastName, p.FirstName 
FROM Person.Person AS p 
JOIN HumanResources.Employee AS e
    ON e.BusinessEntityID = p.BusinessEntityID WHERE 5000.00 IN
    (SELECT Bonus
     FROM Sales.SalesPerson AS sp
     WHERE e.BusinessEntityID = sp.BusinessEntityID);
GO

Poprzednie podzapytanie w tej instrukcja nie można ocenić niezależnie od zewnętrznej kwerendy.Wymaga wartość dla Employee.BusinessEntityID, ale wartość ta zmienia się jak Aparat baz danych programu SQL Server sprawdza, czy w różnych wierszach w Employee.

skorelowane podzapytanie mogą być również używane w HAVINGklauzula zewnętrznej kwerendy. W tym przykładzie znajdzie modeli produktów, dla których maksymalna cena rynkowa jest większa niż dwukrotna średnia dla modelu.

USE AdventureWorks2008R2;
GO
SELECT p1.ProductModelID
FROM Production.Product AS p1
GROUP BY p1.ProductModelID
HAVING MAX(p1.ListPrice) >= ALL
    (SELECT AVG(p2.ListPrice)
     FROM Production.Product AS p2
     WHERE p1.ProductModelID = p2.ProductModelID);
GO

W tym przykładzie użyto dwóch podkwerend skorelowanych, aby wyszukać nazwiska pracowników, którzy mają sprzedaży określonego produktu.

USE AdventureWorks2008R2;
GO
SELECT DISTINCT pp.LastName, pp.FirstName 
FROM Person.Person pp JOIN HumanResources.Employee e
ON e.BusinessEntityID = pp.BusinessEntityID WHERE pp.BusinessEntityID IN 
(SELECT SalesPersonID 
FROM Sales.SalesOrderHeader
WHERE SalesOrderID IN 
(SELECT SalesOrderID 
FROM Sales.SalesOrderDetail
WHERE ProductID IN 
(SELECT ProductID 
FROM Production.Product p 
WHERE ProductNumber = 'BK-M68B-42')));
GO

F.Za pomocą grupy według

Następujący przykład wyszukuje całkowitej każdego zamówienia sprzedaży w bazie danych.

USE AdventureWorks2008R2;
GO
SELECT SalesOrderID, SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
ORDER BY SalesOrderID;
GO

Ze względu na GROUP BY klauzulazwracane tylko jeden wiersz zawierający sumę wszystkich sprzedaży dla każdego zamówienia sprzedaży.

G.GRUPY przy użyciu z wieloma grupami

Poniższy przykład znalezienie średniej ceny i Suma roku-do-data sprzedaży, zgrupowanych według identyfikatorów produktów i specjalne oferty identyfikatora.

USE AdventureWorks2008R2;
GO
SELECT ProductID, SpecialOfferID, AVG(UnitPrice) AS 'Average Price', 
    SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail
GROUP BY ProductID, SpecialOfferID
ORDER BY ProductID;
GO

H.Za pomocą grupy poprzez i gdzie

Poniższy przykład umieszcza wyniki w grupach po pobraniu tylko wiersze z cenami listy jest większa niż $1000.

USE AdventureWorks2008R2;
GO
SELECT ProductModelID, AVG(ListPrice) AS 'Average List Price'
FROM Production.Product
WHERE ListPrice > $1000
GROUP BY ProductModelID
ORDER BY ProductModelID;
GO

I.GRUPY przy użyciu wyrażenie

Następujący przykład grupy przez wyrażenie.Jeśli wyrażenie zawiera funkcje wartość zagregowana , można pogrupować według wyrażenie .

USE AdventureWorks2008R2;
GO
SELECT AVG(OrderQty) AS 'Average Quantity', 
NonDiscountSales = (OrderQty * UnitPrice)
FROM Sales.SalesOrderDetail
GROUP BY (OrderQty * UnitPrice)
ORDER BY (OrderQty * UnitPrice) DESC;
GO

J.WEDŁUG grupy przy użyciu według kolejności

Następujący przykład wyszukuje średnia cena każdego rodzaju produktu oraz zamówienia wyniki przez średnią cenę.

USE AdventureWorks2008R2;
GO
SELECT ProductID, AVG(UnitPrice) AS 'Average Price'
FROM Sales.SalesOrderDetail
WHERE OrderQty > 10
GROUP BY ProductID
ORDER BY AVG(UnitPrice);
GO

K.Za pomocą klauzulaHAVING

Pierwszy przykład poniżej pokazuje HAVINGklauzula zfunkcja wartość zagregowana. Grupuje wiersze w SalesOrderDetail tabela przez identyfikator produktu i eliminuje produktów, których zamówienia średniej ilości są pięciu lub mniej.W drugim przykładzie HAVING klauzula bez funkcji wartość zagregowana .

USE AdventureWorks2008R2;
GO
SELECT ProductID 
FROM Sales.SalesOrderDetail
GROUP BY ProductID
HAVING AVG(OrderQty) > 5
ORDER BY ProductID;
GO

Ta kwerenda używa LIKEwklauzula HAVINGklauzula.

USE AdventureWorks2008R2 ;
GO
SELECT SalesOrderID, CarrierTrackingNumber 
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID, CarrierTrackingNumber
HAVING CarrierTrackingNumber LIKE '4BD%'
ORDER BY SalesOrderID ;
GO

L.Za pomocą HAVING i według grupy

W poniższym przykładzie za pomocą GROUP BY, HAVING, WHERE, i ORDER BY klauzul w jednym SELECT instrukcja.Daje grup i podsumowanie wartości, ale nie tak po wyeliminowaniu produktów o cenach ponad 25 zł i średniej ilości zamówienia poniżej 5.Organizuje on również wyniki przez ProductID.

USE AdventureWorks2008R2;
GO
SELECT ProductID 
FROM Sales.SalesOrderDetail
WHERE UnitPrice < 25.00
GROUP BY ProductID
HAVING AVG(OrderQty) > 5
ORDER BY ProductID;
GO

M.Przy użyciu HAVING Suma i średnia

Następujące grupy przykład SalesOrderDetail tabela przez identyfikator produktu i zawiera tylko tych grup produktów, którzy złożyli zamówień Sumowanie więcej niż $1000000.00 i których zamówienia średniej ilości są mniej niż 3.

USE AdventureWorks2008R2;
GO
SELECT ProductID, AVG(OrderQty) AS AverageQuantity, SUM(LineTotal) AS Total
FROM Sales.SalesOrderDetail
GROUP BY ProductID
HAVING SUM(LineTotal) > $1000000.00
AND AVG(OrderQty) < 3;
GO

Aby wyświetlić produkty, które miały całkowitej sprzedaży większe niż $2000000.00, należy użyć tej kwerendy:

USE AdventureWorks2008R2;
GO
SELECT ProductID, Total = SUM(LineTotal)
FROM Sales.SalesOrderDetail
GROUP BY ProductID
HAVING SUM(LineTotal) > $2000000.00;
GO

Jeśli chcesz upewnić się, są zaangażowane w obliczenia dla każdego produktu przynajmniej jednego tysiąca pięćset elementów, użyj HAVING COUNT(*) > 1500 do wyeliminowania produktów, które zwracają sum dla mniej niż 1500 przedmiotów sprzedanych.Kwerenda wygląda następująco:

USE AdventureWorks2008R2;
GO
SELECT ProductID, SUM(LineTotal) AS Total
FROM Sales.SalesOrderDetail
GROUP BY ProductID
HAVING COUNT(*) > 1500;
GO

RZECZOWNIKObliczanie sumy grup przy użyciu COMPUTE BY

W poniższym przykładzie użyto dwa przykłady kodu, aby wyświetlić użycie COMPUTE BY.W pierwszym przykładzie kodu używa jednego COMPUTE BY z jednym wartość zagregowana funkcjai drugi przykład kodu używa jednego COMPUTE BY element i dwie funkcje wartość zagregowana .

Ta kwerenda oblicza sumę zamówień, w przypadku produktów o cenach mniej niż $5.00, dla każdego typu produktu.

USE AdventureWorks2008R2;
GO
SELECT ProductID, LineTotal
FROM Sales.SalesOrderDetail
WHERE UnitPrice < $5.00
ORDER BY ProductID, LineTotal
COMPUTE SUM(LineTotal) BY ProductID;
GO

Ta kwerenda pobiera typ produktu i kolejność całkowita produktów ceny jednostkowe w $5.00.COMPUTE BYklauzula używa dwóch różnych wartość zagregowana funkcje.

USE AdventureWorks2008R2;
GO
SELECT ProductID, LineTotal
FROM Sales.SalesOrderDetail
WHERE UnitPrice < $5.00
ORDER BY ProductID, LineTotal
COMPUTE SUM(LineTotal), MAX(LineTotal) BY ProductID;
GO

O.Obliczanie sumy wartości za pomocą obliczeń bez według

Słowo kluczowe obliczeń można bez według do generowania sum, zliczeń sumy i tak dalej.

Następujący przykład wyszukuje sumy cen i zaliczek dla wszystkich typów produktów wartości mniejszej niż $2.00.

USE AdventureWorks2008R2;
GO
SELECT ProductID, OrderQty, UnitPrice, LineTotal
FROM Sales.SalesOrderDetail
WHERE UnitPrice < $2.00
COMPUTE SUM(OrderQty), SUM(LineTotal);
GO

Można użyć COMPUTE BY i OBLICZYĆ bez według tej samej kwerendy.Następująca kwerenda znajduje sumy wiersza sumy według rodzaju produktu i ilości zamówienia i następnie oblicza wiersza sumy i sumy ilości zamówienia.

USE AdventureWorks2008R2;
GO
SELECT ProductID, OrderQty, UnitPrice, LineTotal
FROM Sales.SalesOrderDetail
WHERE UnitPrice < $5.00
ORDER BY ProductID
COMPUTE SUM(OrderQty), SUM(LineTotal) BY ProductID
COMPUTE SUM(OrderQty), SUM(LineTotal);
GO

P.Obliczanie obliczone sumy wszystkich wierszy

Poniższy przykład pokazuje tylko trzy kolumny na liście wybierz i daje sumy na podstawie wszystkich ilości zamówień i wszystkie sumy wiersza na końcu wyniki.

USE AdventureWorks2008R2;
GO
SELECT ProductID, OrderQty, LineTotal
FROM Sales.SalesOrderDetail
COMPUTE SUM(OrderQty), SUM(LineTotal);
GO

Q.Za pomocą więcej niż jednego obliczeń klauzula

Następujący przykład wyszukuje sumę cen wszystkich zamówień, których cena jednostkowa jest mniejsza niż 5 USD organizowanych przez identyfikator produktu oraz ilość zamówienia, jak również sumę cen wszystkich zamówień mniej niż 5 USD zorganizowane według tylko identyfikator produktu.Za pomocą różnych wartość zagregowana funkcje w tej samej instrukcja przez więcej niż jeden COMPUTE BY klauzula.

USE AdventureWorks2008R2;
GO
SELECT ProductID, OrderQty, UnitPrice, LineTotal
FROM Sales.SalesOrderDetail
WHERE UnitPrice < $5.00
ORDER BY ProductID, OrderQty, LineTotal
COMPUTE SUM(LineTotal) BY ProductID, OrderQty
COMPUTE SUM(LineTotal) BY ProductID;
GO

R.Porównanie według grupy z obliczeń

Pierwszy przykład poniżej zastosowań COMPUTE klauzula , aby obliczyć sumę wszystkich zamówień produktów, których cena jednostkowa jest mniejsza niż $5.00, według rodzaju produktu.Drugi przykład daje te same informacje podsumowujące za pomocą tylko GROUP BY.

USE AdventureWorks2008R2;
GO
SELECT ProductID, LineTotal
FROM Sales.SalesOrderDetail
WHERE UnitPrice < $5.00
ORDER BY ProductID
COMPUTE SUM(LineTotal) BY ProductID;
GO

To jest drugą kwerendę, która korzysta z GROUP BY.

USE AdventureWorks2008R2;
GO
SELECT ProductID, SUM(LineTotal) AS Total
FROM Sales.SalesOrderDetail
WHERE UnitPrice < $5.00
GROUP BY ProductID
ORDER BY ProductID;
GO

S.Przy użyciu Grupuj według, obliczeń i ORDER BY klauzule SELECT

Poniższy przykład zwraca tylko zamówienia którego cena jednostkowa jest mniejsza niż 5 $, a następnie oblicza całkowitą sumę linii produktu i Suma końcowa.Wszystkie obliczona czy kolumny są wyświetlane na liście select.

USE AdventureWorks2008R2;
GO
SELECT ProductID, OrderQty, SUM(LineTotal) AS Total
FROM Sales.SalesOrderDetail
WHERE UnitPrice < $5.00
GROUP BY ProductID, OrderQty
ORDER BY ProductID, OrderQty
COMPUTE SUM(SUM(LineTotal)) BY ProductID, OrderQty
COMPUTE SUM(SUM(LineTotal));
GO

T.Korzystanie z podpowiedzi Optymalizator INDEKSU

W poniższym przykładzie przedstawiono dwa sposoby używania INDEX Optymalizator wskazówka.Pierwszy przykład przedstawia sposób wymusić optymalizatora do pobrania wierszy z tabelaza pomocą indeks nieklastrowany i drugi przykład wymusza skanowanie tabela przy użyciu indeksu 0.

USE AdventureWorks2008R2;
GO
SELECT pp.FirstName, pp.LastName, e.NationalIDNumber
FROM HumanResources.Employee AS e WITH (INDEX(AK_Employee_NationalIDNumber))
JOIN Person.Person AS pp on e.BusinessEntityID = pp.BusinessEntityID
WHERE LastName = 'Johnson';
GO

-- Force a table scan by using INDEX = 0.
USE AdventureWorks2008R2;
GO
SELECT pp.LastName, pp.FirstName, e.JobTitle
FROM HumanResources.Employee AS e WITH (INDEX = 0) JOIN Person.Person AS pp
ON e.BusinessEntityID = pp.BusinessEntityID
WHERE LastName = 'Johnson';
GO

U.Za pomocą opcji i wskazówki dotyczące grupy

W poniższym przykładzie OPTION (GROUP)jest używanaklauzula z GROUP BYklauzula.

USE AdventureWorks2008R2;
GO
SELECT ProductID, OrderQty, SUM(LineTotal) AS Total
FROM Sales.SalesOrderDetail
WHERE UnitPrice < $5.00
GROUP BY ProductID, OrderQty
ORDER BY ProductID, OrderQty
OPTION (HASH GROUP, FAST 10);
GO

V.Za pomocą wskazówki dotyczącej kwerendy SKŁADAJĄCEJ

W poniższym przykładzie użyto MERGE UNION wskazówkę dotyczącą kwerendy.

USE AdventureWorks2008R2;
GO
SELECT *
FROM HumanResources.Employee AS e1
UNION
SELECT *
FROM HumanResources.Employee AS e2
OPTION (MERGE UNION);
GO

W.Za pomocą prostego Unii

W poniższym przykładzie zestaw wyników zawiera zawartość ProductModelID i Name kolumny obu ProductModel i Gloves tabele.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('dbo.Gloves', 'U') IS NOT NULL
DROP TABLE dbo.Gloves;
GO
-- Create Gloves table.
SELECT ProductModelID, Name
INTO dbo.Gloves
FROM Production.ProductModel
WHERE ProductModelID IN (3, 4);
GO

-- Here is the simple union.
USE AdventureWorks2008R2;
GO
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID NOT IN (3, 4)
UNION
SELECT ProductModelID, Name
FROM dbo.Gloves
ORDER BY Name;
GO

X.Przy użyciu Unii SELECT INTO

W poniższym przykładzie INTO klauzula w drugim SELECT instrukcja Określa, że tabela o nazwie ProductResults przechowuje końcowe zestaw wyników Unii w kolumnach wyznaczonych ProductModel i Gloves tabele.Należy zauważyć, że Gloves tabela jest tworzona w pierwszym SELECT instrukcja.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('dbo.ProductResults', 'U') IS NOT NULL
DROP TABLE dbo.ProductResults;
GO
IF OBJECT_ID ('dbo.Gloves', 'U') IS NOT NULL
DROP TABLE dbo.Gloves;
GO
-- Create Gloves table.
SELECT ProductModelID, Name
INTO dbo.Gloves
FROM Production.ProductModel
WHERE ProductModelID IN (3, 4);
GO

USE AdventureWorks2008R2;
GO
SELECT ProductModelID, Name
INTO dbo.ProductResults
FROM Production.ProductModel
WHERE ProductModelID NOT IN (3, 4)
UNION
SELECT ProductModelID, Name
FROM dbo.Gloves;
GO

SELECT * 
FROM dbo.ProductResults;

Y.Przy użyciu Unii dwóch instrukcji SELECT ORDER BY

Kolejność pewne parametry używane w Unii klauzula jest ważna.W poniższym przykładzie przedstawiono nieprawidłowe i właściwego stosowania UNION w dwóch SELECT sprawozdania, w których kolumna jest zmieniona w danych wyjściowych.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('dbo.Gloves', 'U') IS NOT NULL
DROP TABLE dbo.Gloves;
GO
-- Create Gloves table.
SELECT ProductModelID, Name
INTO dbo.Gloves
FROM Production.ProductModel
WHERE ProductModelID IN (3, 4);
GO

/* INCORRECT */
USE AdventureWorks2008R2;
GO
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID NOT IN (3, 4)
ORDER BY Name
UNION
SELECT ProductModelID, Name
FROM dbo.Gloves;
GO

/* CORRECT */
USE AdventureWorks2008R2;
GO
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID NOT IN (3, 4)
UNION
SELECT ProductModelID, Name
FROM dbo.Gloves
ORDER BY Name;
GO

Z.Pokaż wszystkie efekty i nawiasy za pomocą Unii trzech instrukcji SELECT

W następujących przykładach użyto UNION połączyć wyniki trzech tabelach wszystkie mają ten sam 5 wierszy danych.W pierwszym przykładzie użyto UNION ALL Aby wyświetlić zduplikowane rekordy, a następnie zwraca wszystkie wiersze 15.W drugim przykładzie użyto UNION bez ALL wyeliminowanie zduplikowanych wierszy z otrzymanych wyniki trzech SELECT instrukcji i zwraca 5 wierszy.

W trzecim przykładzie użyto ALL z pierwszym UNION i drugi otaczają nawiasy UNION nie korzystający z ALL.Drugi UNION jest przetwarzane jako pierwsze, ponieważ jest w nawiasach i zwraca 5 wierszy, ponieważ ALL nie jest używana opcja i usuwane są duplikaty.Te 5 wierszy są łączone z wyniki pierwszego SELECT za pomocą UNION ALL słowa kluczowe.Nie usuwa duplikaty pomiędzy dwoma zestawami 5 wierszy.Ostateczny wynik ma 10 wierszy.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('dbo.EmployeeOne', 'U') IS NOT NULL
DROP TABLE dbo.EmployeeOne;
GO
IF OBJECT_ID ('dbo.EmployeeTwo', 'U') IS NOT NULL
DROP TABLE dbo.EmployeeTwo;
GO
IF OBJECT_ID ('dbo.EmployeeThree', 'U') IS NOT NULL
DROP TABLE dbo.EmployeeThree;
GO

SELECT pp.LastName, pp.FirstName, e.JobTitle 
INTO dbo.EmployeeOne
FROM Person.Person AS pp JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = pp.BusinessEntityID
WHERE LastName = 'Johnson';
GO
SELECT pp.LastName, pp.FirstName, e.JobTitle 
INTO dbo.EmployeeTwo
FROM Person.Person AS pp JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = pp.BusinessEntityID
WHERE LastName = 'Johnson';
GO
SELECT pp.LastName, pp.FirstName, e.JobTitle 
INTO dbo.EmployeeThree
FROM Person.Person AS pp JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = pp.BusinessEntityID
WHERE LastName = 'Johnson';
GO
-- Union ALL
SELECT LastName, FirstName, JobTitle
FROM dbo.EmployeeOne
UNION ALL
SELECT LastName, FirstName ,JobTitle
FROM dbo.EmployeeTwo
UNION ALL
SELECT LastName, FirstName,JobTitle 
FROM dbo.EmployeeThree;
GO

SELECT LastName, FirstName,JobTitle
FROM dbo.EmployeeOne
UNION 
SELECT LastName, FirstName, JobTitle 
FROM dbo.EmployeeTwo
UNION 
SELECT LastName, FirstName, JobTitle 
FROM dbo.EmployeeThree;
GO

SELECT LastName, FirstName,JobTitle 
FROM dbo.EmployeeOne
UNION ALL
(
SELECT LastName, FirstName, JobTitle 
FROM dbo.EmployeeTwo
UNION
SELECT LastName, FirstName, JobTitle 
FROM dbo.EmployeeThree
);
GO