Aracılığıyla paylaş


SELECT - ORDER BY yan tümcesi (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnaliz Platformu Sistemi (PDW)Microsoft Fabric'teki SQL analiz uç noktasıMicrosoft Fabric'teki ambarMicrosoft Fabric'teki SQL veritabanı

SQL Server'da sorgu tarafından döndürülen verileri sıralar. Bu yan tümceyi kullanarak:

  • Sorgunun sonuç kümesini belirtilen sütun listesine göre sıralayın ve isteğe bağlı olarak, döndürülen satırları belirtilen bir aralığa sınırlayın. Sonuç kümesinde satırların döndürülmesi sırası, yan ORDER BY tümce belirtilmediği sürece garanti edilmez.

  • Sıralama işlevi değerlerinin sonuç kümesine uygulanma sırasını belirleyin.

Transact-SQL söz dizimi kuralları

Note

ORDER BY, Azure Synapse Analytics veya Analytics Platform Sistemi'nde SELECT/INTO(PDW) veya CREATE TABLE AS SELECT (CTAS) deyimlerinde desteklenmez.

Syntax

SQL Server ve Azure SQL Veritabanı için söz dizimi.

ORDER BY order_by_expression
    [ COLLATE collation_name ]
    [ ASC | DESC ]
    [ , ...n ]
[ <offset_fetch> ]

<offset_fetch> ::=
{
    OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }
    [
      FETCH { FIRST | NEXT } { integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY
    ]
}

Azure Synapse Analytics ve Paralel Veri Ambarı söz dizimi.

[ ORDER BY
    {
    order_by_expression
    [ ASC | DESC ]
    } [ , ...n ]
]

Arguments

order_by_expression

Sorgu sonuç kümesinin sıralanacağı sütunu veya ifadeyi belirtir. Sıralama sütunu ad veya sütun diğer adı olarak veya sütunun seçme listesindeki konumunu temsil eden negatif olmayan bir tamsayı olarak belirtilebilir.

Birden çok sıralama sütunu belirtilebilir. Sütun adları benzersiz olmalıdır. yan tümcesindeki ORDER BY sıralama sütunlarının sırası, sıralanmış sonuç kümesinin kuruluşunu tanımlar. Yani, sonuç kümesi ilk sütuna göre sıralanır ve sonra sıralı liste ikinci sütuna göre sıralanır ve bu şekilde devam edilir.

Yan tümcesinde ORDER BY başvuruda bulunan sütun adları, herhangi bir belirsizlik olmadan seçme listesindeki bir sütuna veya sütun diğer adına veya yan tümcesinde belirtilen bir tabloda tanımlanan sütuna FROM karşılık gelir. Yan tümcesi ORDER BY seçme listesinden bir sütun diğer adına başvuruda bulunuyorsa, sütun diğer adı yan tümcesindeki ORDER BY bir ifadenin parçası olarak değil kendi başına kullanılmalıdır, örneğin:

SELECT SCHEMA_NAME(schema_id) AS SchemaName
FROM sys.objects
ORDER BY SchemaName; -- correct

SELECT SCHEMA_NAME(schema_id) AS SchemaName
FROM sys.objects
ORDER BY SchemaName + ''; -- wrong

HARMANLAMA collation_name

İşlemin ORDER BY tablo veya görünümde tanımlandığı gibi sütunun harmanlamasına göre değil , collation_name belirtilen harmanlama göre gerçekleştirilmesi gerektiğini belirtir. collation_name bir Windows harmanlama adı veya SQL harmanlama adı olabilir. Daha fazla bilgi için bkz. Harmanlama ve Unicode desteği. COLLATE yalnızca char, varchar, ncharve nvarchartüründe sütunlar için geçerlidir.

ASC | DESC

Belirtilen sütundaki değerlerin artan veya azalan düzende sıralanması gerektiğini belirtir. ASC en düşük değerden en yüksek değere sıralar. DESC en yüksek değerden en düşük değere sıralar. ASC varsayılan sıralama düzenidir. NULL değerleri mümkün olan en düşük değerler olarak değerlendirilir.

OFFSET { integer_constant | offset_row_count_expression } { ROW | SATIRSAY }

Şunlar için geçerlidir: SQL Server 2012 (11.x) ve sonraki sürümleri, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği.

Sorgu ifadesinden satır döndürmeye başlamadan önce atlana satır sayısını belirtir. Değer, sıfırdan büyük veya sıfıra eşit bir tamsayı sabiti veya ifadesi olabilir.

offset_row_count_expression değişken, parametre veya sabit skaler alt sorgu olabilir. Bir alt sorgu kullanıldığında, dış sorgu kapsamında tanımlanan sütunlara başvuramaz. Başka bir ifadeyle, dış sorguyla bağıntılı olamaz.

ROW ve ROWS eş anlamlıdır ve ANSI uyumluluğu için sağlanır.

Sorgu yürütme planlarında, kaydırma satırı sayısı değeri sorgu işlecinin Offset özniteliğinde TOP görüntülenir.

FETCH { FIRST | NEXT } { integer_constant | fetch_row_count_expression } { ROW | YALNIZCA SATIR }

Şunlar için geçerlidir: SQL Server 2012 (11.x) ve sonraki sürümleri, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği.

Yan tümcesi işlendikten sonra OFFSET döndürülecek satır sayısını belirtir. Değer, bir tamsayı sabiti veya birden büyük veya buna eşit bir ifade olabilir.

fetch_row_count_expression değişken, parametre veya sabit skaler alt sorgu olabilir. Bir alt sorgu kullanıldığında, dış sorgu kapsamında tanımlanan sütunlara başvuramaz. Başka bir ifadeyle, dış sorguyla bağıntılı olamaz.

FIRST ve NEXT eş anlamlıdır ve ANSI uyumluluğu için sağlanır.

ROW ve ROWS eş anlamlıdır ve ANSI uyumluluğu için sağlanır.

Sorgu yürütme planlarında, kaydırma satırı sayısı değeri sorgu işlecinin Satırlar veya Üst özniteliğinde TOP görüntülenir.

En iyi yöntemler

Yan tümcesinde ORDER BY tamsayıları seçme listesindeki sütunların konumsal gösterimleri olarak belirtmekten kaçının. Örneğin, gibi SELECT ProductID, Name FROM Production.Production ORDER BY 2 bir deyim geçerli olsa da, deyimi gerçek sütun adını belirtmeye kıyasla başkaları tarafından kolayca anlaşılamaz. Ayrıca, sütun sırasını değiştirme veya yeni sütun ekleme gibi seçme listesinde yapılan değişiklikler, beklenmeyen sonuçlardan kaçınmak için yan tümcesinin ORDER BY değiştirilmesini gerektirir.

Deyiminde SELECT TOP (<n>) her zaman bir ORDER BY yan tümce kullanın. bu, TOPhangi satırların etkilendiğini tahmin edilebilir şekilde belirtmenin tek yoludur. Daha fazla bilgi için bkz. TOP.

Interoperability

Başka bir kaynaktan satır eklemek için veya SELECT...INTOINSERT...SELECT deyimiyle kullanıldığında, ORDER BY yan tümcesi satırların belirtilen sırada eklendiğini garanti etmez.

Ve'nin OFFSETFETCH bir görünümde kullanılması görünümün güncelleştirilebilirlik özelliğini değiştirmez.

Limitations

Yan tümcesindeki ORDER BY sütun sayısıyla ilgili bir sınır yoktur. Ancak, yan ORDER BY tümcesinde belirtilen sütunların toplam boyutu 8.060 baytı aşamaz.

Ntext, metin, görüntü, coğrafya, geometri ve xml türündeki sütunlar yan ORDER BY tümcede kullanılamaz.

Bir derecelendirme işlevinde order_by_expression göründüğünde bir tamsayı veya sabit belirtilemiyor. Daha fazla bilgi için bkz. SELECT - OVER yan tümcesi.

Yan tümcesinde FROM bir tablo adı diğer ad kullanılıyorsa, yan tümcesindeki sütunlarını nitelemek ORDER BY için yalnızca diğer ad kullanılabilir.

Deyimi aşağıdaki yan tümcelerden veya işleçlerden birini içeriyorsa, yan tümcesinde ORDER BY belirtilen sütun adları ve diğer adları seçme SELECT listesinde tanımlanmalıdır:

  • UNION operatör
  • EXCEPT operatör
  • INTERSECT operatör
  • SELECT DISTINCT

Ayrıca, deyimi bir UNION, EXCEPTveya INTERSECT işleci içeriyorsa, ilk (sol taraf) sorgunun seçme listesinde sütun adları veya sütun diğer adları belirtilmelidir.

, UNIONveya işleçleri kullanan EXCEPTbir sorguda yalnızca INTERSECT deyiminin sonunda izin ORDER BY verilir. Bu kısıtlama yalnızca , UNIONve EXCEPT değerlerini alt sorguda değil, üst düzey sorguda belirttiğinizde INTERSECTgeçerlidir. Aşağıdaki Örnekler bölümüne bakın.

ORDER BY veya TOP ve yan tümceleri de belirtilmediği süreceOFFSET, yan tümcesi görünümlerde, satır içi işlevlerde, türetilmiş tablolarda ve FETCH alt sorgularda geçerli değildir. ORDER BY Bu nesnelerde kullanıldığında yan tümcesi yalnızca yan tümce veya TOP ve OFFSET yan tümceleri tarafından FETCH döndürülen satırları belirlemek için kullanılır. ORDER BY yan tümcesi, sorgunun kendisinde de belirtilmediği sürece ORDER BY bu yapılar sorgulandığında sıralı sonuçları garanti etmez.

OFFSET ve FETCH dizinli görünümlerde veya yan tümcesi kullanılarak tanımlanan bir görünümde CHECK OPTION desteklenmez.

OFFSET ve FETCH aşağıdaki sınırlamalara izin veren TOP herhangi ORDER BY bir sorguda kullanılabilir:

  • yan tümcesi OVER ve OFFSET'yi desteklemezFETCH.

  • OFFSETve FETCH doğrudan , INSERT, UPDATEve MERGE deyimlerinde DELETEbelirtilmez, ancak bu deyimlerde tanımlanan bir alt sorguda belirtilebilir. Örneğin, deyiminde INSERT INTO SELECTOFFSET ve FETCH deyiminde SELECT belirtilebilir.

  • kullanan UNIONEXCEPTINTERSECT ve OFFSET yalnızca sorgu sonuçlarının FETCHsırasını belirten son sorguda belirtilebilen bir sorguda.

  • TOP ve ile OFFSETFETCH aynı sorgu ifadesinde (aynı sorgu kapsamında) birleştirilemiyor.

Döndürülen satırları sınırlamak için OFFSET ve FETCH kullanın

Sorgu disk belleği çözümü uygulamak ve istemci uygulamasına OFFSET gönderilen satır sayısını sınırlamak için yan tümcesi yerine ve FETCH yan tümcelerini kullanmanız TOP gerekir.

Ve'yi bir disk belleği çözümü olarak kullanmak, istemci uygulamasına döndürülen her veri OFFSET için sorgunun bir kez çalıştırılmasını gerektirir.FETCH Örneğin, bir sorgunun sonuçlarını 10 satırlık artışlarla döndürmek için, 1 ile 10 arası satırları döndürmek için sorguyu bir kez yürütmeniz ve ardından 11 ile 20 arası satırları döndürmek için sorguyu yeniden çalıştırmanız gerekir. Her sorgu bağımsızdır ve hiçbir şekilde birbiriyle ilişkili değildir. Bu, sorgunun bir kez yürütüldüğü ve durumun sunucuda tutıldığı bir imleç kullanmanın aksine, istemci uygulamasının izleme durumundan sorumlu olduğu anlamına gelir. ve OFFSETkullanarak FETCH sorgu istekleri arasında kararlı sonuçlar elde etmek için aşağıdaki koşulların karşılanması gerekir:

  1. Sorgu tarafından kullanılan temel alınan veriler değişmemelidir. Başka bir ifadeyle, sorgu tarafından dokunulan satırlar güncelleştirilmez veya sorgudaki sayfalara yönelik tüm istekler anlık görüntü veya serileştirilebilir işlem yalıtımı kullanılarak tek bir işlemde yürütülür. Bu işlem yalıtım düzeyleri hakkında daha fazla bilgi için bkz. SET TRANSACTION ISOLATION LEVEL.

  2. yan tümcesi ORDER BY , benzersiz olması garanti edilen bir sütun veya sütun bileşimi içerir.

Bu makalenin devamında yer alan Örnekler bölümünde yer alan "Tek bir işlemde birden çok sorgu çalıştırma" örneğine bakın.

Disk belleği çözümünüzde tutarlı yürütme planları önemliyse ve OPTIMIZE FOR parametreleri için sorgu ipucunu OFFSET kullanmayı FETCH göz önünde bulundurun. Bu makalenin devamında yer alan Örnekler bölümündeki OFFSET ve FETCH değerleri için ifadeleri belirtme bölümüne bakın. hakkında OPTIMIZE FORdaha fazla bilgi için bkz. Sorgu ipuçları.

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 ORDER BY
Artan ve azalan düzen belirtme DESC veya ASC
Harmanlama belirtme COLLATE
Koşullu sıra belirtme CASE ifadesi
Sıralama işlevinde ORDER BY kullanma Derecelendirme işlevleri
Döndürülen satır sayısını sınırlama OFFSET ve FETCH
ORDER BY'ı UNION, EXCEPT ve INTERSECT ile kullanma UNION

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. Seçme listesinde tanımlanmış tek bir sütun belirtme

Aşağıdaki örnek, sonuç kümesini sayısal ProductID sütuna göre sıralar. Belirli bir sıralama düzeni belirtilmediğinden varsayılan (artan düzen) kullanılır.

USE AdventureWorks2022;
GO

SELECT ProductID, Name
FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY ProductID;

B. Seçme listesinde tanımlanmayan bir sütun belirtin

Aşağıdaki örnek, sonuç kümesini seçme listesine dahil olmayan ancak yan tümcesinde FROM belirtilen tabloda tanımlanan bir sütuna göre sıralar.

USE AdventureWorks2022;
GO

SELECT ProductID, Name, Color
FROM Production.Product
ORDER BY ListPrice;

C. Sıralama sütunu olarak bir diğer ad belirtin

Aşağıdaki örnek, sıralama düzeni sütunu olarak sütun diğer adını SchemaName belirtir.

USE AdventureWorks2022;
GO

SELECT name, SCHEMA_NAME(schema_id) AS SchemaName
FROM sys.objects
WHERE type = 'U'
ORDER BY SchemaName;

D. Sıralama sütunu olarak ifade belirtme

Aşağıdaki örnekte sıralama sütunu olarak bir ifade kullanılır. İfade, çalışanların işe alındığı yıla göre ayarlanan sonucu sıralamak için işlevi kullanılarak DATEPART tanımlanır.

USE AdventureWorks2022;
GO

SELECT BusinessEntityID, JobTitle, HireDate
FROM HumanResources.Employee
ORDER BY DATEPART(year, HireDate);

Artan ve azalan sıralama düzenini belirtme

A. Azalan düzen belirtme

Aşağıdaki örnek, sayısal sütuna ProductID göre ayarlanan sonucu azalan düzende sıralar.

USE AdventureWorks2022;
GO

SELECT ProductID, Name
FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY ProductID DESC;

B. Artan düzen belirtme

Aşağıdaki örnek, sütuna göre Name ayarlanan sonucu artan düzende sıralar. Karakterler sayısal olarak değil alfabetik olarak sıralanır. Yani 10, 2'ye göre sıralanır.

USE AdventureWorks2022;
GO

SELECT ProductID, Name
FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY Name ASC;

C. Hem artan hem de azalan sırayı belirtin

Aşağıdaki örnek, sonuç kümesini iki sütuna göre sıralar. Sorgu sonuç kümesi önce sütuna göre artan düzende FirstName sıralanır ve ardından sütuna göre azalan düzende LastName sıralanır.

USE AdventureWorks2022;
GO

SELECT LastName, FirstName
FROM Person.Person
WHERE LastName LIKE 'R%'
ORDER BY FirstName ASC, LastName DESC;

Harmanlama belirtme

Aşağıdaki örnek, yan tümcesinde harmanlama belirtmenin ORDER BY sorgu sonuçlarının döndürülme sırasını nasıl değiştirebileceğini gösterir. Büyük/küçük harfe duyarlı olmayan, aksan duyarsız harmanlama kullanılarak tanımlanan bir sütun içeren bir tablo oluşturulur. Değerler çeşitli büyük/küçük harf ve vurgu farklılıklarıyla eklenir. Yan tümcesinde ORDER BY harmanlama belirtilmediğinden, ilk sorgu değerleri sıralarken sütunun harmanlamasını kullanır. İkinci sorguda, yan tümcesinde ORDER BY büyük/küçük harfe duyarlı, vurguya duyarlı bir harmanlama belirtilir ve bu da satırların döndürülme sırasını değiştirir.

USE tempdb;
GO

CREATE TABLE #t1 (name NVARCHAR(15) COLLATE Latin1_General_CI_AI);
GO

INSERT INTO #t1
VALUES (N'Sánchez'),
    (N'Sanchez'),
    (N'sánchez'),
    (N'sanchez');

-- This query uses the collation specified for the column 'name' for sorting.
SELECT name
FROM #t1
ORDER BY name;

-- This query uses the collation specified in the ORDER BY clause for sorting.
SELECT name
FROM #t1
ORDER BY name COLLATE Latin1_General_CS_AS;

Koşullu sıra belirtme

Aşağıdaki örnekler, belirli bir CASE sütun değerine göre satırların sıralama düzenini koşullu olarak belirlemek için yan tümcesindeki ifadeyi kullanırORDER BY. İlk örnekte, tablonun sütunundaki SalariedFlagHumanResources.Employee değer değerlendirilir. SalariedFlag 1 olarak ayarlanmış çalışanlar azalan düzende sırasıyla BusinessEntityID döndürülür. SalariedFlag 0 olarak ayarlanmış çalışanlar artan düzende sırasıyla BusinessEntityID döndürülür. İkinci örnekte sonuç kümesi, sütun 'ABD' değerine eşit olduğunda sütun TerritoryNameCountryRegionName tarafından ve diğer tüm satırlar için sıralanır CountryRegionName .

SELECT BusinessEntityID,
    SalariedFlag
FROM HumanResources.Employee
ORDER BY
    CASE SalariedFlag
        WHEN 1 THEN BusinessEntityID
    END DESC,
    CASE 
        WHEN SalariedFlag = 0 THEN BusinessEntityID
    END;
GO
SELECT BusinessEntityID,
    LastName,
    TerritoryName,
    CountryRegionName
FROM Sales.vSalesPerson
WHERE TerritoryName IS NOT NULL
ORDER BY
    CASE CountryRegionName
        WHEN 'United States' THEN TerritoryName
        ELSE CountryRegionName
    END;

Sıralama işlevinde ORDER BY kullanma

Aşağıdaki örnekte , , ORDER BYROW_NUMBERve RANKsıralama işlevlerinde DENSE_RANKyan tümcesi kullanılırNTILE.

USE AdventureWorks2022;
GO

SELECT p.FirstName,
    p.LastName,
    ROW_NUMBER() OVER (ORDER BY a.PostalCode) AS "Row Number",
    RANK() OVER (ORDER BY a.PostalCode) AS "Rank",
    DENSE_RANK() OVER (ORDER BY a.PostalCode) AS "Dense Rank",
    NTILE(4) OVER (ORDER BY a.PostalCode) AS "Quartile",
    s.SalesYTD,
    a.PostalCode
FROM Sales.SalesPerson AS s
INNER JOIN Person.Person AS p
    ON s.BusinessEntityID = p.BusinessEntityID
INNER JOIN Person.Address AS a
    ON a.AddressID = p.BusinessEntityID
WHERE TerritoryID IS NOT NULL
    AND SalesYTD <> 0;

Döndürülen satır sayısını sınırlama

Şunlar için geçerlidir: SQL Server 2012 (11.x) ve sonraki sürümleri, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği.

Aşağıdaki örneklerde, sorgu tarafından döndürülen satır sayısını sınırlamak için ve OFFSET kullanılırFETCH.

A. OFFSET ve FETCH değerleri için tamsayı sabitleri belirtme

Aşağıdaki örnek, ve OFFSET yan tümceleri için değer olarak bir tamsayı sabiti FETCH belirtir. İlk sorgu, sütununa DepartmentIDgöre sıralanmış tüm satırları döndürür. Bu sorgu tarafından döndürülen sonuçları, onu izleyen iki sorgunun sonuçlarıyla karşılaştırın. Sonraki sorgu, ilk beş satırı atlamak ve kalan tüm satırları döndürmek için yan tümcesini OFFSET 5 ROWS kullanır. Son sorgu, ilk satırla başlamak için yan tümcesini OFFSET 0 ROWS kullanır ve ardından döndürülen satırları sıralanmış sonuç kümesinden 10 satırla sınırlamak için kullanır FETCH NEXT 10 ROWS ONLY .

USE AdventureWorks2022;
GO

-- Return all rows sorted by the column DepartmentID.
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID;

-- Skip the first 5 rows from the sorted result set and return all remaining rows.
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID OFFSET 5 ROWS;

-- Skip 0 rows and return only the first 10 rows from the sorted result set.
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID OFFSET 0 ROWS
FETCH NEXT 10 ROWS ONLY;

B. OFFSET ve FETCH değerleri için değişkenleri belirtme

Aşağıdaki örnek değişkenleri @RowsToSkip bildirir ve @FetchRows ve OFFSET yan tümcelerinde FETCH bu değişkenleri belirtir.

USE AdventureWorks2022;
GO

-- Specifying variables for OFFSET and FETCH values
DECLARE
    @RowsToSkip TINYINT = 2,
    @FetchRows TINYINT = 8;

SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID ASC OFFSET @RowsToSkip ROWS
FETCH NEXT @FetchRows ROWS ONLY;

C. OFFSET ve FETCH değerleri için ifadeleri belirtme

Aşağıdaki örnek, değeri belirtmek için ifadeyi @StartingRowNumber - 1OFFSET ve FETCH değerini belirtmek için ifadeyi @EndingRowNumber - @StartingRowNumber + 1 kullanır. Buna ek olarak, sorgu ipucu, OPTIMIZE FORbelirtilir. Bu ipucu, sorgu derlendiğinde ve iyileştirildiğinde yerel değişken için belirli bir değer sağlamak için kullanılabilir. Değer, sorgu yürütme sırasında değil, yalnızca sorgu iyileştirmesi sırasında kullanılır. Daha fazla bilgi için bkz. Sorgu ipuçları.

USE AdventureWorks2022;
GO

-- Specifying expressions for OFFSET and FETCH values
DECLARE
    @StartingRowNumber TINYINT = 1,
    @EndingRowNumber TINYINT = 8;

SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID ASC OFFSET @StartingRowNumber - 1 ROWS
FETCH NEXT @EndingRowNumber - @StartingRowNumber + 1 ROWS ONLY
OPTION (OPTIMIZE FOR (@StartingRowNumber = 1, @EndingRowNumber = 20));

D. OFFSET ve FETCH değerleri için sabit bir skaler alt sorgu belirtme

Aşağıdaki örnek, yan tümcesinin değerini tanımlamak için FETCH sabit bir skaler alt sorgu kullanır. Alt sorgu, tablosundaki PageSizesütundan dbo.AppSettings tek bir değer döndürür.

-- Specifying a constant scalar subquery
USE AdventureWorks2022;
GO

CREATE TABLE dbo.AppSettings (
    AppSettingID INT NOT NULL,
    PageSize INT NOT NULL
);
GO

INSERT INTO dbo.AppSettings
VALUES (1, 10);
GO

DECLARE @StartingRowNumber TINYINT = 1;

SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID ASC OFFSET @StartingRowNumber ROWS
FETCH NEXT (
    SELECT PageSize
    FROM dbo.AppSettings
    WHERE AppSettingID = 1
) ROWS ONLY;

E. Tek bir işlemde birden çok sorgu çalıştırma

Aşağıdaki örnekte, sorgudan gelen tüm isteklerde kararlı sonuçların döndürülmesini sağlayan bir disk belleği çözümü uygulama yöntemi gösterilmektedir. Sorgu, anlık görüntü yalıtım düzeyi kullanılarak tek bir işlemde yürütülür ve yan tümcesinde ORDER BY belirtilen sütun sütun benzersizliğini sağlar.

USE AdventureWorks2022;
GO

-- Ensure the database can support the snapshot isolation level set for the query.
IF (
    SELECT snapshot_isolation_state
    FROM sys.databases
    WHERE name = N'AdventureWorks2022'
) = 0
ALTER DATABASE AdventureWorks2022
SET ALLOW_SNAPSHOT_ISOLATION ON;
GO

-- Set the transaction isolation level  to SNAPSHOT for this query.
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
GO

-- Beginning the transaction.
BEGIN TRANSACTION;
GO

-- Declare and set the variables for the OFFSET and FETCH values.
DECLARE
    @StartingRowNumber INT = 1,
    @RowCountPerPage INT = 3;

-- Create the condition to stop the transaction after all rows have been returned.
WHILE (
    SELECT COUNT(*)
    FROM HumanResources.Department
) >= @StartingRowNumber
BEGIN
    -- Run the query until the stop condition is met.
    SELECT DepartmentID, Name, GroupName
    FROM HumanResources.Department
    ORDER BY DepartmentID ASC OFFSET @StartingRowNumber - 1 ROWS
    FETCH NEXT @RowCountPerPage ROWS ONLY;

    -- Increment @StartingRowNumber value.
    SET @StartingRowNumber = @StartingRowNumber + @RowCountPerPage;

    CONTINUE
END;
GO

COMMIT TRANSACTION;
GO

ORDER BY'ı UNION, EXCEPT ve INTERSECT ile kullanma

Bir sorgu , UNIONveya EXCEPT işleçlerini kullandığındaINTERSECT, ORDER BY yan tümcesi deyiminin sonunda belirtilmelidir ve birleştirilmiş sorguların sonuçları sıralanır. Aşağıdaki örnek, kırmızı veya sarı olan tüm ürünleri döndürür ve bu birleşik listeyi sütununa ListPricegöre sıralar.

USE AdventureWorks2022;
GO

SELECT Name, Color, ListPrice
FROM Production.Product
WHERE Color = 'Red'
-- ORDER BY cannot be specified here.

UNION ALL

SELECT Name, Color, ListPrice
FROM Production.Product
WHERE Color = 'Yellow'
ORDER BY ListPrice ASC;

Örnekler: Azure Synapse Analytics ve Analytics Platform Sistemi (PDW)

Aşağıdaki örnekte, sayısal EmployeeKey sütuna göre bir sonuç kümesinin artan düzende sıralanması gösterilmektedir.

-- Uses AdventureWorks
SELECT EmployeeKey, FirstName, LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY EmployeeKey;

Aşağıdaki örnek, sayısal EmployeeKey sütuna göre azalan düzende ayarlanmış bir sonuç sıralar.

-- Uses AdventureWorks
SELECT EmployeeKey, FirstName, LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY EmployeeKey DESC;

Aşağıdaki örnekte sütun tarafından ayarlanan bir sonuç sıralanır LastName .

-- Uses AdventureWorks
SELECT EmployeeKey, FirstName, LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY LastName;

Aşağıdaki örnek iki sütuna göre sıralar. Bu sorgu önce sütuna göre artan düzende FirstName sıralar ve sonra ortak FirstName değerleri sütuna göre LastName azalan düzende sıralar.

-- Uses AdventureWorks
SELECT EmployeeKey, FirstName, LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY LastName, FirstName;