Share via


ÖRNEKLER (Transact-sql)

Bu konu, kullanma örnekleri sağlar seçin deyimi.

A.Satır ve sütun almak için kullanma

Aşağıdaki örnek, üç kod örnekleri gösterir. Bu ilk kod örneği (where yan belirtilen) tüm satırları ve tüm sütunlar döndürür (kullanarak *) dan Productiçinde masa AdventureWorks2012 veritabanı.

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

Bu örnek (where yan belirtilen) tüm satırlar ve sütunlar yalnızca bir altkümesine verir (Name, ProductNumber, ListPrice) dan Productiçinde masa AdventureWorks2012 veritabanı. Ayrıca, bir sütun başlığını eklenir.

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

Bu örnek, yalnızca satırları verir ProductÜrün satırı var Rve bu gün yani üretmek için daha az 4.

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

B.Sütun başlıkları ve hesaplamaları ile kullanma

Aşağıdaki örnekler verir'den tüm satırlar Producttablosu. İlk örnek, toplam satış ve her ürün iskontolarını döndürür. İkinci örnekte, her ürün için toplam geliri hesaplanır.

USE AdventureWorks2012;
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

Her satış siparişi her ürün geliri hesaplar sorgudur.

USE AdventureWorks2012;
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.DISTINCT ile kullanarak seçin

Aşağıdaki örnek DISTINCTyinelenen başlıkları alınmasını önlemek için.

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

D.select INTO ile tablolar oluşturma

Aşağıdaki ilk örnek, adlı geçici bir tablo oluşturur #Bicyclesde tempdb.

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

Kalıcı bir tablo bu ikinci örnek oluşturur NewProducts.

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

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

E.İlişkili alt sorgular kullanma

Aşağıdaki örnek, anlam karşılığı sorguları gösterir ve kullanma arasındaki fark gösterilmektedir EXISTSanahtar kelime ve INanahtar. Hem de ürün modeli uzun sleeve logo jersey olan her ürün adının bir örnek alan geçerli sorgu örnekleri ve ProductModelIDnumara maç arasında Productve ProductModeltabloları.

USE AdventureWorks2012;
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 AdventureWorks2012;
GO
SELECT DISTINCT Name
FROM Production.Product
WHERE ProductModelID IN
    (SELECT ProductModelID 
     FROM Production.ProductModel
     WHERE Name LIKE 'Long-Sleeve Logo Jersey%');
GO

Aşağıdaki örnek INbir korelasyon veya yinelenen, alt sorgu. Bu dış sorgu için değerlerine bağlı bir sorgudur. Sorguyu tekrar tekrar yürütülür, her satır için bir kez dış sorgudan seçilmiş olabilir. Bu sorgu, her çalışan için hangi ad ve soyadı örneği alır bonus SalesPersontablo 5000.00ve hangi çalışan kimlik numaraları eşleşmesi için Employeeve SalesPersontabloları.

USE AdventureWorks2012;
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

Bu bildirimi önceki sorguda dış sorgu bağımsız değerlendirilemez. Bir değer gerektirir Employee.EmployeeID, ancak bu değer olarak değiştirir SQL Server Veritabanı Altyapısıfarklı satırlarında inceliyor Employee.

İlişkili alt sorgu da kullanılabilir HAVINGyan dış sorgusu. Bu örnek, en büyük liste fiyatı ortalama modeli iki katından daha fazla olduğu ürün modellerini bulur.

USE AdventureWorks2012;
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

Bu örnek, belirli bir ürün satan çalışanların adlarını bulmak için iki ilişkili alt sorgular kullanır.

USE AdventureWorks2012;
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.by kullanma

Aşağıdaki örnek, veritabanı içinde her satış siparişi toplam bulur.

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

Çünkü GROUP BYyan tümcesi, tüm satış toplamını içeren tek bir satır her satış siparişi için döndürülür.

G.group by ile birden çok grupları kullanma

Aşağıdaki örnek, ortalama fiyatı ve toplam yıllık tarihi satış, ürün koduna göre gruplandırılmış ve özel kimliği sunan bulur

USE AdventureWorks2012;
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.TARAFINDAN ve nerede kullanma

Aşağıdaki örnek sonuçlarını gruplar halinde liste fiyatları yalnızca satırları aldıktan sonra koyar $1000.

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

I.group by ile bir ifade kullanma

Aşağıdaki örnek gruplar tarafından bir ifade. İfade toplama işlevleri içermiyorsa ifade göre gruplandırabilirsiniz.

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

J.by ile order by kullanma

Aşağıdaki örnek, her ürün türü ortalama fiyatı bulur ve sonuçları ortalama fiyata göre sıralar.

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

K.HAVING yan tümcesi kullanarak

Gösterileri izleyen ilk örnek bir HAVINGyan tümcesi ile bir toplama işlevi. Satır grupları SalesOrderDetailÜrün Kımlığı tarafından tablo ve ürünleri, ortalama sipariş miktarları beş ya da daha az ortadan kaldıran. İkinci örnekte gösterildiği bir HAVINGyan tümcesi toplama işlevleri.

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

Bu sorguyu kullanır LIKEyan HAVINGtümcesi.

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

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

L.Kullanma ve Gruplandır

Aşağıdaki örnek kullanarak GROUP BY, HAVING, WHERE, ve ORDER BYyan tümceleri bir SELECTdeyimi. Bu gruplar üretir ve Özet değerleri ancak kadar ürün fiyatları üzerinden 25 $ sonra ortadan yok ve ortalama sipariş miktarları altında 5. Ayrıca sonuçlarına göre düzenleyen ProductID.

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

M.Topla ve avg ile kullanma

Aşağıdaki örnek gruplar SalesOrderDetailÜrün Kımlığı tarafından tablo ve yalnızca grupların toplam alma siparişlerinin ürünleri içerir birden fazla $1000000.00olup, ortalama sipariş miktarları az 3.

USE AdventureWorks2012;
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

Toplam satış daha büyük olan ürünleri görmek için $2000000.00, bu sorguyu kullanın:

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

Emin olmak istiyorsanız, en az bin beş yüz öğeler vardır her ürün için hesaplamalara dahil, kullanma HAVING COUNT(*) > 1500, daha az toplamları dönmek ürünleri ortadan kaldırmak için 1500satılan maddelerin. Sorguyu aşağıdaki gibi görünür:

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

N.Dizin iyileştirici ipucu kullanma

Aşağıdaki örnek kullanmanın iki yolu gösterir INDEXiyileştirici ipucu. İlk örnek tablodan satır almak için kümelendirilmemiş dizin kullanılacak iyileştirici gücü gösterilmiştir ve ikinci örnek, dizin 0'ı kullanarak bir tablo taraması zorlar.

USE AdventureWorks2012;
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 AdventureWorks2012;
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

M.SEÇENEK ve grup ipuçlarını kullanarak

Aşağıdaki örnekte gösterildiği nasıl OPTION (GROUP)yan tümcesi ile kullanılan bir GROUP BYtümcesi.

USE AdventureWorks2012;
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

O.UNION sorgu ipucu kullanma

Aşağıdaki örnek MERGE UNIONsorgu ipucu.

USE AdventureWorks2012;
GO
SELECT BusinessEntityID, JobTitle, HireDate, VacationHours, SickLeaveHours
FROM HumanResources.Employee AS e1
UNION
SELECT BusinessEntityID, JobTitle, HireDate, VacationHours, SickLeaveHours
FROM HumanResources.Employee AS e2
OPTION (MERGE UNION);
GO

P.Bir UNION kullanma

Aşağıdaki örnek, sonuç kümesi içeriğini içerir ProductModelIDve Namesütunlar her iki ProductModelve Glovestabloları.

USE AdventureWorks2012;
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 AdventureWorks2012;
GO
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID NOT IN (3, 4)
UNION
SELECT ProductModelID, Name
FROM dbo.Gloves
ORDER BY Name;
GO

Q.INTO UNION ile kullanma

Aşağıdaki örnekte, INTOikinci fıkrada SELECTadlı bu deyimi belirtir ProductResultsbelirlenmiş sütunları Birliği nihai sonuç kümesi tutan ProductModelve Glovestabloları. Not Glovesilk olarak oluşturulan tablonun SELECTdeyimi.

USE AdventureWorks2012;
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 AdventureWorks2012;
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 ProductModelID, Name 
FROM dbo.ProductResults;

R.order by ile iki select deyimleri UNION kullanma

BİRLEŞİM yan tümcesi ile belirli parametreleri sırası önemlidir. Aşağıdaki örnek, yanlış ve doğru kullanımını gösterir UNIONiki SELECTdeyimleri sütun olan çıkışı yeniden adlandırılması.

USE AdventureWorks2012;
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 AdventureWorks2012;
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 AdventureWorks2012;
GO
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID NOT IN (3, 4)
UNION
SELECT ProductModelID, Name
FROM dbo.Gloves
ORDER BY Name;
GO

S.select deyimleri UNION all etkilerini ve parantez göstermek için kullanma

Aşağıdaki örnekler UNIONüç tablo, hepsinde aynı 5 satır veri sonuçlarını birleştirmek için. İlk örnek UNION ALLmükerrer göstermek için kaydeder ve tüm 15 satır döndüren. İkinci örnek kullanır UNIONolmadan ALLüç kombine sonuçlarından yinelenen satırları ortadan kaldırmak için SELECTdeyimleri ve döner 5 satır.

Üçüncü örnek kullanır ALLile ilk UNIONve ikinci parantez içine UNIONkullandığı değil ALL. İkinci UNIONo parantez içinde ve 5 satırları çünkü verir çünkü ilk önce işleneceği ALLseçenek kullanılmaz ve çoğaltmaları kaldırılır. Bu 5 satır ilk sonuçları ile birlikte SELECTkullanarak UNION ALLanahtar. Bu 5 satır iki takım arasındaki çoğaltmaları kaldırmaz. Nihai sonucu 10 satır vardır.

USE AdventureWorks2012;
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

Ayrıca bkz.

Başvuru

CREATE TRIGGER (Transact-SQL)

CREATE VIEW (Transact-SQL)

Sil (Transact-sql)

execute (Transact-sql)

Ifadeler (Transact-sql)

Insert (Transact-sql)

LIKE (Transact-sql)

Birliği (Transact-sql)

DIŞINDA ve INTERSECT (Transact-sql)

Güncelleştirme (Transact-sql)

NEREDE (Transact-sql)

Yol adı (Transact-sql)

Yan (Transact-sql)