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 Analytics Platform Sistemi (PDW) için 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ütununu ad veya sütun diğer adı olarak ya da seçme listesindeki sütunun konumunu temsil eden negatif olmayan bir tamsayı olarak belirtebilirsiniz.

Birden çok sıralama sütunu belirtebilirsiniz. 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. 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şvurabileceğiniz sütun adları, herhangi bir belirsizlik olmadan seçim listesindeki bir sütuna veya sütun diğer adına veya yan tümcesinde FROM belirtilen bir tabloda tanımlanan sütuna 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ını kendi başına kullanın. Yan tümcesindeki bir ifadenin ORDER BY parçası olarak sütun diğer adını kullanmayın.

Örneğin:

  • Doğru kullanım:

    SELECT SCHEMA_NAME(schema_id) AS SchemaName
    FROM sys.objects
    ORDER BY SchemaName; -- correct
    
  • Yanlış kullanım:

    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 belirttiğiniz 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, sorgu ifadesinden satır döndürmeye başlamadan önce atlanacak 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 kullandığınızda, 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, uzaklık satır sayısı değeri sorgu işlecinin Offset özniteliğinde TOP görünür.

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 kullandığınızda, 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ünür.

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, kullanıcılar gerçek sütun adını belirtmeye kıyasla anlaşılması zor olabilir. 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. Hangi satırların TOP etkileyeceğini tahmin edilebilir şekilde belirtmenin tek yolu budur. Daha fazla bilgi için bkz. TOP.

Interoperability

Başka bir kaynaktan satır eklemek için veya INSERT...SELECTSELECT...INTO deyimiyle kullandığınızdaORDER BY, 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.

Yan tümcesinde ntext, metin, görüntü, coğrafya, geometri veya xmlORDER BY türünde sütunlar kullanamazsınız.

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

Yan tümcesinde bir tablo adını diğer adla FROM adlandırırsanız, yan tümcesindeki sütunlarını nitelemek ORDER BY için diğer ad kullanmanız gerekir.

Deyimi aşağıdaki SELECT yan tümcelerden veya işleçlerden birini içeriyorsa, seçme listesindeki yan tümcesinde ORDER BY belirtilen sütun adlarını ve diğer adları tanımlamanız gerekir:

  • 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 listesi sütun adlarını veya sütun diğer adlarını belirtmelidir.

, veya INTERSECTEXCEPTişleçleri kullanan UNIONbir sorguda, yalnızca deyiminin sonunda kullanabilirsinizORDER BY. Bu kısıtlama yalnızca , UNIONve EXCEPT değerlerini alt sorguda değil, üst düzey sorguda belirttiğinizde INTERSECTgeçerlidir. Örnekler bölümüne bakın.

Veya ORDER BYOFFSET ve yan tümcelerini de belirtmediğiniz TOP sürece yan tümcesi görünümlerde, satır içi işlevlerde, türetilmiş tablolarda ve FETCH alt sorgularda geçerli değildir. Bu nesnelerde kullandığınızdaORDER BY, yan tümcesi yalnızca yan tümce veya OFFSET ve FETCH yan tümceleri tarafından TOP 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.

  • ve değerlerini doğrudan , UPDATE, MERGEve FETCHDELETE deyimlerinde INSERTbelirtemezsinizOFFSET, ancak bunları bu deyimlerde tanımlanan bir alt sorguda belirtebilirsiniz. Örneğin, deyiminde INSERT INTO SELECT ve FETCH deyiminde SELECT belirtebilirsinizOFFSET.

  • veya EXCEPTINTERSECT işleçleri kullanan UNIONbir sorguda, yalnızca sorgu sonuçlarının sırasını belirten son sorgu ve FETCHbelirtebilirOFFSET.

  • TOP aynı sorgu ifadesinde (aynı sorgu kapsamında) OFFSET ve FETCH birleştiremezsiniz.

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

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

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 koşul, sorgunun bir kez yürütüldüğü ve durumun sunucuda tutıldığı bir imlecin kullanılmasından farklı olarak, istemci uygulamasının durumu izlemekle 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. Sorgunun kullandığı temel alınan veriler değişmez. Başka bir ifadeyle, sorgu satırları güncelleştirmez 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.

Örnekler bölümündeki 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. Ö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. Sıralama düzeni belirtmediğiniz için sorgu varsayılan artan düzeni kullanır.

USE AdventureWorks2025;
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 listesinin içermediği bir sütuna göre sıralar, ancak FROM yan tümcesi sütunu içeren tabloyu belirtir.

USE AdventureWorks2025;
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 AdventureWorks2025;
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 AdventureWorks2025;
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 AdventureWorks2025;
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 AdventureWorks2025;
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 AdventureWorks2025;
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
);

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;
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 AdventureWorks2025;
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 AdventureWorks2025;
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 AdventureWorks2025;
GO

-- Specifying variables for OFFSET and FETCH values
DECLARE @RowsToSkip AS TINYINT = 2,
        @FetchRows AS 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 değeri belirtmek için ifadeyi @EndingRowNumber - @StartingRowNumber + 1FETCH kullanır. Buna ek olarak, sorgu ipucu, OPTIMIZE FORbelirtilir. Sorgu derlendiğinde ve iyileştirildiğinde yerel değişken için belirli bir değer sağlamak için bu ipucunu kullanın. 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 AdventureWorks2025;
GO

-- Specifying expressions for OFFSET and FETCH values
DECLARE @StartingRowNumber AS TINYINT = 1,
        @EndingRowNumber AS 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 AdventureWorks2025;
GO

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

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

DECLARE @StartingRowNumber AS 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 AdventureWorks2025;
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'AdventureWorks2025') = 0
ALTER DATABASE AdventureWorks2025
SET ALLOW_SNAPSHOT_ISOLATION ON;

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

-- Beginning the transaction.
BEGIN TRANSACTION;

-- Declare and set the variables for the OFFSET and FETCH values.
DECLARE @StartingRowNumber AS INT = 1,
        @RowCountPerPage AS 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
COMMIT TRANSACTION;

ORDER BY'ı UNION, EXCEPT ve INTERSECT ile kullanma

Sorgu , veya INTERSECTEXCEPTişleçlerini kullandığında UNIONdeyiminin ORDER BY sonunda yan tümcesini belirtin. Sorgu, birleştirilmiş sorguların sonuçlarını sıralar. 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 AdventureWorks2025;
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;