Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
Analiz Platformu Sistemi (PDW)
Microsoft Fabric'teki SQL analiz uç noktası
Microsoft Fabric'teki ambar
Microsoft Fabric'teki SQL veritabanı
Sorgu sonuç kümesinde döndürülen satırları SQL Server'da belirtilen sayıda satır veya satır yüzdesiyle sınırlar.
TOP yan tümcesiyle ORDER BY kullandığınızda, sonuç kümesi ilk n sıralı satır sayısıyla sınırlıdır. Aksi takdirde, TOP tanımlanmamış bir sırada ilk n satır sayısını döndürür.
SELECT deyiminden döndürülen satır sayısını belirtmek için bu yan tümceyi kullanın. Veya TOP, INSERT, UPDATEveya MERGE deyiminden etkilenen satırları belirtmek için DELETE kullanın.
Transact-SQL söz dizimi kuralları
Syntax
SQL Server ve Azure SQL Veritabanı söz dizimi:
[
TOP (expression) [ PERCENT ]
[ WITH TIES ]
]
Azure Synapse Analytics ve Analytics Platform Sistemi (PDW) için söz dizimi:
[
TOP ( expression )
[ WITH TIES ]
]
Arguments
expression
Döndürülecek satır sayısını belirten sayısal ifade.
ifade, belirtirseniz örtük olarak PERCENT değerine dönüştürülür. Aksi takdirde, ifadebigintdönüştürülür.
PERCENT
Sorgunun sonuç kümesindeki satırların yüzdesini yalnızca ilk
BAĞLI
Sınırlı sonuç kümesindeki son yer için birbirine bağlı iki veya daha fazla satır döndürür. Bu bağımsız değişkeni ORDER BY yan tümcesiyle kullanmanız gerekir. 5 olarak ayarlandıysa ancak 5. satırdaki ORDER BY sütunlarının değerleriyle eşleşen iki satır daha varsa, sonuç kümesi yedi satır içerir.
TOP yan tümcesini yalnızca WITH TIES deyimlerinde SELECT bağımsız değişkeniyle ve yalnızca ORDER BY yan tümcesini de belirtirseniz belirtebilirsiniz. Döndürülen kayıt bağlama sırası rastgeledir.
ORDER BY bu kuralı etkilemez.
En iyi yöntemler
SELECT deyiminde her zaman ORDER BY yan tümcesiyle bir TOP yan tümcesi kullanın. bu, TOPhangi satırların etkilendiğini tahmin edilebilir şekilde belirtmenin tek yoludur.
Sorgu disk belleği çözümü uygulamak için OFFSET yan tümcesi yerine FETCH yan tümcesinde ORDER BY ve TOP kullanın. Disk belleği çözümünün (örneğin, istemciye veri öbekleri veya
Döndürülen satır sayısını sınırlamak için TOP yerine OFFSET (veya FETCH ve SET ROWCOUNT) kullanın. Bu yöntemler, aşağıdaki nedenlerle SET ROWCOUNT kullanmak yerine tercih edilir:
-
SELECTdeyiminin bir parçası olarak, sorgu iyileştiricisi sorgu iyileştirme sırasında veyaTOPyan tümcelerindeFETCHdeğerini göz önünde bulundurabilir. Sorgu çalıştıran bir deyimin dışındaSET ROWCOUNTkullandığınızdan, değeri sorgu planında dikkate alınamaz.
Uyumluluk desteği
Geriye dönük uyumluluk için ifade bir tamsayı sabitiyse SELECT deyimlerinde parantezler isteğe bağlıdır.
TOP deyimlerinde SELECT için her zaman parantez kullanmanızı öneririz. Bunu yapmak, INSERT, UPDATE, MERGEve DELETE deyimlerinde gerekli kullanımıyla tutarlılık sağlar.
Interoperability
TOP ifadesi, tetikleyici nedeniyle çalışabilecek deyimleri etkilemez. Tetikleyicilerdeki inserted ve deleted tabloları yalnızca INSERT, UPDATE, MERGEveya DELETE deyimlerinden gerçekten etkilenen satırları döndürür. Örneğin, bir INSERT TRIGGERINSERT yan tümcesi kullanan bir TOP deyiminin sonucu olarak tetiklendiğinde.
SQL Server, görünümler aracılığıyla satırların güncelleştirilmesini sağlar.
TOP yan tümcesini görünüm tanımına ekleyebildiğiniz için, satırlar artık güncelleştirme nedeniyle TOP ifadesinin gereksinimlerini karşılamıyorsa, bazı satırlar görünümden kaybolabilir.
TOP yan tümcesi, birleştirilen satır sayısını belirtilen değere daha da azaltır ve kalan birleştirilmiş satırlara sıralamasız bir şekilde ekleme, güncelleştirme veya silme eylemleri uygulanır. Yani, satırların WHEN yan tümcelerinde tanımlanan eylemler arasında dağıtıldığı bir sıra yoktur. Örneğin, TOP (10) belirtilmesi 10 satırı etkiliyorsa, bu satırlardan yedisi güncelleştirilebilir ve üç satır eklenebilir. Ya da biri silinmiş, beş tanesi güncelleştirilmiş, dört tanesi eklenmiş vb. olabilir.
MERGE deyimi hem kaynak hem de hedef tabloların tam tablo taramasını yaptığı için, birden çok toplu işlem oluşturarak büyük bir tabloyu değiştirmek için TOP yan tümcesini kullandığınızda G/Ç performansı etkilenebilir. Bu senaryoda, ardışık tüm toplu işlerde yeni satırların hedeflediğinden emin olmak önemlidir.
TOP, UNION, UNION ALLveya EXCEPT işleci içeren bir sorguda INTERSECT yan tümcesini belirtirken dikkatli olun.
TOP ve ORDER BY yan tümcelerinin mantıksal olarak işlenme sırası, bu işleçler seçme işleminde kullanıldığında her zaman sezgisel olmadığından beklenmeyen sonuçlar döndüren bir sorgu yazabilirsiniz. Örneğin, aşağıdaki tablo ve veriler göz önüne alındığında, en düşük maliyetli kırmızı ve en düşük maliyetli mavi arabayı döndürmek istediğinizi varsayalım. Yani, kırmızı sedan ve mavi minibüs.
CREATE TABLE dbo.Cars
(
Model VARCHAR (15),
Price MONEY,
Color VARCHAR (10)
);
INSERT dbo.Cars
VALUES ('sedan', 10000, 'red'),
('convertible', 15000, 'blue'),
('coupe', 20000, 'red'),
('van', 8000, 'blue');
Bu sonuçları elde etmek için aşağıdaki sorguyu yazabilirsiniz.
SELECT TOP (1) Model, Color, Price
FROM dbo.Cars
WHERE Color = 'red'
UNION ALL
SELECT TOP (1) Model, Color, Price
FROM dbo.Cars
WHERE Color = 'blue'
ORDER BY Price ASC;
GO
Sonuç kümesi aşağıdadır.
Model Color Price
------------- ---------- -------
sedan red 10000.00
convertible blue 15000.00
beklenmeyen sonuçlar döndürülür çünkü TOP yan tümcesi, işlecin sonuçlarını sıralayan ORDER BY yan tümcesi (bu durumdaUNION ALL) önce mantıksal olarak çalışır. Bu nedenle, önceki sorgu herhangi bir kırmızı arabayı ve herhangi bir mavi arabayı döndürür ve ardından bu birleşimin sonucunu fiyata göre sipariş verir. Aşağıdaki örnekte, istenen sonucu elde etmek için bu sorguyu yazmanın doğru yöntemi gösterilmektedir.
SELECT Model, Color, Price
FROM (SELECT TOP (1) Model, Color, Price
FROM dbo.Cars
WHERE Color = 'red'
ORDER BY Price ASC) AS a
UNION ALL
SELECT Model, Color, Price
FROM (SELECT TOP (1) Model, Color, Price
FROM dbo.Cars
WHERE Color = 'blue'
ORDER BY Price ASC) AS b;
GO
Alt seçim işleminde TOP ve ORDER BY kullanarak, ORDER BY yan tümcesinin sonuçlarının TOP işleminin sonucunu sıralamamak için UNION yan tümcesine uygulandığından emin olursunuz.
Sonuç kümesi aşağıdadır.
Model Color Price
------------- ---------- -------
sedan red 10000.00
van blue 8000.00
Limitations
TOP, INSERT, UPDATEveya MERGEile DELETE kullandığınızda, başvuruda bulunan satırlar herhangi bir sırada düzenlenemez. Ayrıca, bu deyimlerde ORDER BY yan tümcesini doğrudan belirtemezsiniz. Anlamlı bir kronolojik sırada satır eklemek, silmek veya değiştirmek için TOP kullanmanız gerekiyorsa, TOP alt seçim deyiminde belirtilen bir ORDER BY yan tümcesiyle kullanın. Bu makaledeki Örnekleri bölümüne bakın.
bölümlenmiş görünümlerde TOP veya UPDATE deyimlerinde DELETE kullanamazsınız.
TOP aynı sorgu ifadesinde (aynı sorgu kapsamında) OFFSET ve FETCH birleştiremezsiniz. Daha fazla bilgi için bkz. select - ORDER BY yan tümcesi
Examples
Bu makaledeki kod örnekleri, AdventureWorks2025 giriş sayfasından indirebileceğiniz AdventureWorksDW2025 veya örnek veritabanını kullanır.
| Category | Öne çıkan söz dizimi öğeleri |
|---|---|
| Temel sözdizimi | TOP * PERCENT |
| Bağlama değerleri dahil | WITH TIES |
| DELETE, INSERT veya UPDATE etkilenen satırları sınırlama |
DELETE, INSERT, UPDATE |
Temel söz dizimi
Bu bölümdeki örneklerde, gerekli en düşük söz dizimi kullanılarak ORDER BY yan tümcesinin temel işlevleri gösterilmektedir.
A. SABIT değerle TOP kullanma
Aşağıdaki örneklerde, sorgu sonuç kümesinde döndürülen çalışan sayısını belirtmek için sabit bir değer kullanılır. İlk örnekte, ORDER BY yan tümcesi kullanılmadığından ilk 10 tanımsız satır döndürülür. İkinci örnekte, en son işe alınan ilk 10 çalışanı döndürmek için bir ORDER BY yan tümcesi kullanılır.
USE AdventureWorks2022;
GO
-- Select the first 10 random employees.
SELECT TOP (10) JobTitle, HireDate
FROM HumanResources.Employee;
GO
-- Select the first 10 employees hired most recently.
SELECT TOP (10) JobTitle, HireDate
FROM HumanResources.Employee
ORDER BY HireDate DESC;
GO
B. TOP'i değişkenle kullanma
Aşağıdaki örnek, sorgu sonuç kümesinde döndürülen çalışan sayısını belirtmek için bir değişken kullanır.
USE AdventureWorks2022;
GO
DECLARE @p AS INT = 10;
SELECT TOP (@p) JobTitle, HireDate, VacationHours
FROM HumanResources.Employee
ORDER BY VacationHours DESC;
GO
C. Yüzde belirtme
Aşağıdaki örnek, sorgu sonuç kümesinde döndürülen çalışan sayısını belirtmek için PERCENT kullanır.
HumanResources.Employee tablosunda 290 çalışan vardır. 290'ın yüzde beşi kesirli bir değer olduğundan, değer bir sonraki tamsayıya yuvarlanir.
USE AdventureWorks2022;
GO
SELECT TOP (5) PERCENT JobTitle, HireDate
FROM HumanResources.Employee
ORDER BY HireDate DESC;
GO
Bağlama değerlerini dahil et
A. Son satırdaki değerlerle eşleşen satırları eklemek için WITH TIES kullanma
Aşağıdaki örnek, en yüksek maaşa sahip tüm çalışanların ilk 10 yüzdesini alır ve maaşlarına göre azalan düzende döndürür.
WITH TIES belirtilmesi, maaşları döndürülen en düşük maaşa (son satır) eşit olan çalışanların, çalışanların yüzde 10'sini aşsa bile sonuç kümesine dahil edilmesini sağlar.
USE AdventureWorks2022;
GO
SELECT TOP (10) PERCENT WITH TIES pp.FirstName,
pp.LastName,
e.JobTitle,
e.Gender,
r.Rate
FROM Person.Person AS pp
INNER JOIN HumanResources.Employee AS e
ON pp.BusinessEntityID = e.BusinessEntityID
INNER JOIN HumanResources.EmployeePayHistory AS r
ON r.BusinessEntityID = e.BusinessEntityID
ORDER BY Rate DESC;
GO
DELETE, INSERT veya UPDATE'in etkilediği satırları sınırlama
A. Silinen satır sayısını sınırlamak için TOP kullanın
TOP (<n>)ile bir DELETE yan tümcesi kullandığınızda, silme işlemi n sayıda satırdan oluşan tanımsız bir seçimde gerçekleştirilir. Başka bir DELETE deyimi, yan tümcesinde tanımlanan ölçütleri karşılayan satır sayısını (WHERE) seçer. Aşağıdaki örnek, son tarihleri 1 Temmuz 2002'den önce olan 20 tablosundan PurchaseOrderDetail satırları siler.
USE AdventureWorks2022;
GO
DELETE TOP (20)
FROM Purchasing.PurchaseOrderDetail
WHERE DueDate < '20020701';
GO
Satırları anlamlı bir kronolojik sırayla silmek için TOP kullanmak istiyorsanız, alt seçim deyiminde TOP ile ORDER BY kullanın. Aşağıdaki sorgu, PurchaseOrderDetail tablosunun en erken son tarihlere sahip 10 satırını siler. Yalnızca 10 satırın silindiğinden emin olmak için, alt seçim deyiminde (PurchaseOrderID) belirtilen sütun tablonun birincil anahtarıdır. Subselect deyiminde anahtar olmayan bir sütun kullanılması, belirtilen sütun yinelenen değerler içeriyorsa 10'dan fazla satırın silinmesine neden olabilir.
USE AdventureWorks2022;
GO
DELETE Purchasing.PurchaseOrderDetail
WHERE PurchaseOrderDetailID IN (
SELECT TOP 10 PurchaseOrderDetailID
FROM Purchasing.PurchaseOrderDetail
ORDER BY DueDate ASC
);
GO
B. Eklenen satır sayısını sınırlamak için TOP kullanın
Aşağıdaki örnek, tablo EmployeeSales oluşturur ve HumanResources.Employeetablosundan ilk beş çalışanın adını ve yıllık satış verilerini ekler.
INSERT deyimi, SELECT yan tümcesinde tanımlanan ölçütleri karşılayan WHERE deyimi tarafından döndürülen beş satırı seçer.
OUTPUT yan tümcesi, EmployeeSales tablosuna eklenen satırları görüntüler.
ORDER BY deyimindeki SELECT yan tümcesi ilk beş çalışanı belirlemek için kullanılmaz.
USE AdventureWorks2022;
GO
IF OBJECT_ID('dbo.EmployeeSales', 'U') IS NOT NULL
DROP TABLE dbo.EmployeeSales;
GO
CREATE TABLE dbo.EmployeeSales
(
EmployeeID NVARCHAR (11) NOT NULL,
LastName NVARCHAR (20) NOT NULL,
FirstName NVARCHAR (20) NOT NULL,
YearlySales MONEY NOT NULL
);
GO
INSERT TOP (5) INTO dbo.EmployeeSales
OUTPUT
inserted.EmployeeID,
inserted.FirstName,
inserted.LastName,
inserted.YearlySales
SELECT sp.BusinessEntityID,
c.LastName,
c.FirstName,
sp.SalesYTD
FROM Sales.SalesPerson AS sp
INNER JOIN Person.Person AS c
ON sp.BusinessEntityID = c.BusinessEntityID
WHERE sp.SalesYTD > 250000.00
ORDER BY sp.SalesYTD DESC;
GO
Anlamlı bir kronolojik sırada satır eklemek için TOP kullanmak istiyorsanız, alt seçim deyiminde TOP ile ORDER BY kullanın. Aşağıdaki örnekte bunun nasıl yapıldığını gösterilmektedir.
OUTPUT yan tümcesi, EmployeeSales tablosuna eklenen satırları görüntüler. İlk beş çalışan artık tanımlanmamış satırlar yerine ORDER BY yan tümcesinin sonuçlarına göre eklenir.
INSERT INTO dbo.EmployeeSales
OUTPUT
inserted.EmployeeID,
inserted.FirstName,
inserted.LastName,
inserted.YearlySales
SELECT TOP (5) sp.BusinessEntityID,
c.LastName,
c.FirstName,
sp.SalesYTD
FROM Sales.SalesPerson AS sp
INNER JOIN Person.Person AS c
ON sp.BusinessEntityID = c.BusinessEntityID
WHERE sp.SalesYTD > 250000.00
ORDER BY sp.SalesYTD DESC;
GO
C. Güncelleştirilen satır sayısını sınırlamak için TOP kullanın
Aşağıdaki örnekte tablodaki satırları güncelleştirmek için TOP yan tümcesi güncelleştirilir.
TOP (<n>)ile bir UPDATE yan tümcesi kullandığınızda, güncelleştirme işlemi tanımlanmamış sayıda satırda çalışır. Başka bir UPDATE deyimi, yan tümcesinde tanımlanan ölçütleri karşılayan satır sayısını (WHERE) seçer. Aşağıdaki örnek, bir satış temsilcisinden diğerine 10 müşteri atar.
USE AdventureWorks2022;
UPDATE TOP (10)
Sales.Store
SET SalesPersonID = 276
WHERE SalesPersonID = 275;
GO
Güncelleştirmeleri anlamlı bir kronolojide uygulamak için TOP kullanmanız gerekiyorsa, alt seçim deyimindeki TOP ile birlikte ORDER BY kullanmanız gerekir. Aşağıdaki örnek, 10 çalışanın tatil saatlerini en erken işe alma tarihleriyle güncelleştirir.
UPDATE HumanResources.Employee
SET VacationHours = VacationHours + 8
FROM (SELECT TOP 10 BusinessEntityID
FROM HumanResources.Employee
ORDER BY HireDate ASC) AS th
WHERE HumanResources.Employee.BusinessEntityID = th.BusinessEntityID;
GO
Örnekler: Azure Synapse Analytics ve Analytics Platform Sistemi (PDW)
Aşağıdaki örnek, sorgu ölçütlerine uyan ilk 31 satırı döndürür.
ORDER BY yan tümcesi, döndürülen 31 satırın LastName sütununun alfabetik sırasına göre ilk 31 satır olmasını sağlar.
Bağlama belirtmeden TOP kullanma.
SELECT TOP (31) FirstName, LastName
FROM DimEmployee
ORDER BY LastName;
Sonuç: 31 satır döndürülür.
TOPkullanarak WITH TIESbelirtin.
SELECT TOP (31) WITH TIES FirstName, LastName
FROM DimEmployee
ORDER BY LastName;
Sonuç: 31. satır için Brown adlı üç çalışan bağlı olduğundan 33 satır döndürülür.