SELECT - ORDER BY Clause (Transact-SQL)
Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)Titik akhir analitik SQL di Microsoft FabricWarehouse di Microsoft Fabric
Mengurutkan data yang dikembalikan oleh kueri di SQL Server. Gunakan klausa ini untuk:
Urutkan kumpulan hasil kueri menurut daftar kolom yang ditentukan dan, secara opsional, batasi baris yang dikembalikan ke rentang tertentu. Urutan di mana baris dikembalikan dalam kumpulan hasil tidak dijamin kecuali klausul ORDER BY ditentukan.
Tentukan urutan penerapan nilai fungsi peringkat ke tataan hasil.
Catatan
ORDER BY tidak didukung dalam pernyataan SELECT/INTO atau CREATE TABLE AS SELECT (CTAS) di Azure Synapse Analytics atau Analytics Platform System (PDW).
Sintaksis
-- Syntax for SQL Server and Azure SQL Database
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
]
}
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse
[ ORDER BY
{
order_by_expression
[ ASC | DESC ]
} [ ,...n ]
]
Catatan
Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.
Argumen
order_by_expression
Menentukan kolom atau ekspresi untuk mengurutkan kumpulan hasil kueri. Kolom pengurutan dapat ditentukan sebagai nama atau alias kolom, atau bilangan bulat nonnegatif yang mewakili posisi kolom dalam daftar pemilihan.
Beberapa kolom pengurutan dapat ditentukan. Nama kolom harus unik. Urutan kolom pengurutan dalam klausul ORDER BY menentukan organisasi kumpulan hasil yang diurutkan. Artinya, tataan hasil diurutkan menurut kolom pertama lalu daftar yang diurutkan diurutkan menurut kolom kedua, dan sebagainya.
Nama kolom yang dirujuk dalam klausul ORDER BY harus sesuai dengan alias kolom atau kolom dalam daftar pilih atau ke kolom yang ditentukan dalam tabel yang ditentukan dalam klausul FROM tanpa ambiguitas apa pun. Jika klausa ORDER BY mereferensikan alias kolom dari daftar pilih, alias kolom harus digunakan mandiri, dan bukan sebagai bagian dari beberapa ekspresi dalam klausa ORDER BY, misalnya:
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
MENYUSUN collation_name
Menentukan bahwa operasi ORDER BY harus dilakukan sesuai dengan kolase yang ditentukan dalam collation_name, dan tidak sesuai dengan kolase kolom seperti yang ditentukan dalam tabel atau tampilan. collation_name bisa berupa nama kolase Windows atau nama kolase SQL. Untuk informasi selengkapnya, lihat Dukungan Kolate dan Unicode. COLLATE hanya berlaku untuk kolom jenis karakter, varchar, nchar, dan nvarchar.
ASC | DESC
Menentukan bahwa nilai dalam kolom tertentu harus diurutkan dalam urutan naik atau turun. ASC mengurutkan dari nilai terendah ke nilai tertinggi. DESC mengurutkan dari nilai tertinggi ke nilai terendah. ASC adalah urutan pengurutan default. Nilai kosong diperlakukan sebagai nilai serendah mungkin.
OFFSET { integer_constant | offset_row_count_expression } { ROW | BARIS }
Menentukan jumlah baris yang akan dilewati sebelum mulai mengembalikan baris dari ekspresi kueri. Nilai dapat berupa konstanta bilangan bulat atau ekspresi yang lebih besar dari atau sama dengan nol.
Berlaku untuk: SQL Server 2012 (11.x) dan yang lebih baru dan Azure SQL Database.s
offset_row_count_expression dapat berupa variabel, parameter, atau subkueri skalar konstan. Saat subkueri digunakan, subkueri tidak dapat mereferensikan kolom apa pun yang ditentukan dalam cakupan kueri luar. Artinya, tidak dapat dikorelasikan dengan kueri luar.
ROW dan ROWS adalah sinonim dan disediakan untuk kompatibilitas ANSI.
Dalam rencana eksekusi kueri, nilai jumlah baris offset ditampilkan di atribut Offset operator kueri TOP.
AMBIL { FIRST | NEXT } { integer_constant | fetch_row_count_expression } { ROW | BARIS } SAJA
Menentukan jumlah baris yang akan dikembalikan setelah klausul OFFSET diproses. Nilai dapat berupa konstanta bilangan bulat atau ekspresi yang lebih besar dari atau sama dengan konstanta bilangan bulat.
Berlaku untuk: SQL Server 2012 (11.x) dan yang lebih baru dan Azure SQL Database.
fetch_row_count_expression dapat berupa variabel, parameter, atau subkueri skalar konstan. Saat subkueri digunakan, subkueri tidak dapat mereferensikan kolom apa pun yang ditentukan dalam cakupan kueri luar. Artinya, tidak dapat dikorelasikan dengan kueri luar.
PERTAMA dan BERIKUTNYA adalah sinonim dan disediakan untuk kompatibilitas ANSI.
ROW dan ROWS adalah sinonim dan disediakan untuk kompatibilitas ANSI.
Dalam rencana eksekusi kueri, nilai jumlah baris offset ditampilkan di atribut Baris atau Teratas dari operator kueri TOP.
Praktik Terbaik
Hindari menentukan bilangan bulat dalam klausa ORDER BY sebagai representasi posisi kolom dalam daftar pilih. Misalnya, meskipun pernyataan seperti SELECT ProductID, Name FROM Production.Production ORDER BY 2
valid, pernyataan tidak mudah dipahami oleh orang lain dibandingkan dengan menentukan nama kolom aktual. Selain itu, perubahan pada daftar pemilihan, seperti mengubah urutan kolom atau menambahkan kolom baru, memerlukan modifikasi klausa ORDER BY untuk menghindari hasil yang tidak terduga.
Dalam pernyataan SELECT TOP (N), selalu gunakan klausa ORDER BY. Ini adalah satu-satunya cara untuk menunjukkan baris mana yang dipengaruhi oleh TOP. Untuk informasi selengkapnya, lihat TOP (Transact-SQL).
Interoperabilitas
Ketika digunakan dengan SELECT... INTO atau INSERT... Pernyataan SELECT untuk menyisipkan baris dari sumber lain, klausa ORDER BY tidak menjamin baris disisipkan dalam urutan yang ditentukan.
Menggunakan OFFSET dan FETCH dalam tampilan tidak mengubah properti pembaruan tampilan.
Batasan dan Pembatasan
Tidak ada batasan jumlah kolom dalam klausa ORDER BY; namun, ukuran total kolom yang ditentukan dalam klausul ORDER BY tidak boleh melebihi 8.060 byte.
Kolom jenis ntext, teks, gambar, geografi, geometri, dan xml tidak dapat digunakan dalam klausa ORDER BY.
Bilangan bulat atau konstanta tidak dapat ditentukan ketika order_by_expression muncul dalam fungsi peringkat. Untuk informasi selengkapnya, lihat Klausul OVER (Transact-SQL).
Jika nama tabel diberi alias dalam klausa FROM, hanya nama alias yang dapat digunakan untuk memenuhi syarat kolomnya dalam klausa ORDER BY.
Nama kolom dan alias yang ditentukan dalam klausul ORDER BY harus ditentukan dalam daftar pilih jika pernyataan SELECT berisi salah satu klausa atau operator berikut:
Operator UNION
Operator EXCEPT
Operator INTERSECT
PILIH BERBEDA
Selain itu, ketika pernyataan menyertakan operator UNION, EXCEPT, atau INTERSECT, nama kolom, atau alias kolom harus ditentukan dalam daftar pemilihan kueri pertama (sisi kiri).
Dalam kueri yang menggunakan operator UNION, EXCEPT, atau INTERSECT, ORDER BY hanya diizinkan di akhir pernyataan. Pembatasan ini hanya berlaku untuk saat Anda menentukan UNION, EXCEPT, dan INTERSECT dalam kueri tingkat atas dan bukan dalam subkueri. Lihat bagian Contoh yang berikut ini.
Klausa ORDER BY tidak valid dalam tampilan, fungsi sebaris, tabel turunan, dan subkueri, kecuali klausa TOP atau OFFSET dan FETCH juga ditentukan. Ketika ORDER BY digunakan dalam objek ini, klausa hanya digunakan untuk menentukan baris yang dikembalikan oleh klausa TOP atau klausa OFFSET dan FETCH. Klausa ORDER BY tidak menjamin hasil yang diurutkan ketika konstruksi ini dikueri, kecuali ORDER BY juga ditentukan dalam kueri itu sendiri.
OFFSET dan FETCH tidak didukung dalam tampilan terindeks atau dalam tampilan yang ditentukan dengan menggunakan klausa CHECK OPTION.
OFFSET dan FETCH dapat digunakan dalam kueri apa pun yang memungkinkan TOP dan ORDER BY dengan batasan berikut:
Klausa OVER tidak mendukung OFFSET dan FETCH.
OFFSET dan FETCH tidak dapat ditentukan langsung dalam pernyataan INSERT, UPDATE, MERGE, dan DELETE, tetapi dapat ditentukan dalam subkueri yang ditentukan dalam pernyataan ini. Misalnya, dalam pernyataan INSERT INTO SELECT, OFFSET dan FETCH dapat ditentukan dalam pernyataan SELECT.
Dalam kueri yang menggunakan operator UNION, EXCEPT, atau INTERSECT, OFFSET dan FETCH hanya dapat ditentukan dalam kueri akhir yang menentukan urutan hasil kueri.
TOP tidak dapat dikombinasikan dengan OFFSET dan FETCH dalam ekspresi kueri yang sama (dalam cakupan kueri yang sama).
Menggunakan OFFSET dan FETCH untuk membatasi baris yang dikembalikan
Kami menyarankan agar Anda menggunakan klausul OFFSET dan FETCH alih-alih klausul TOP untuk menerapkan solusi penomoran halaman kueri dan membatasi jumlah baris yang dikirim ke aplikasi klien.
Menggunakan OFFSET dan FETCH sebagai solusi halaman memerlukan menjalankan kueri satu kali untuk setiap "halaman" data yang dikembalikan ke aplikasi klien. Misalnya, untuk mengembalikan hasil kueri dalam kenaikan 10 baris, Anda harus menjalankan kueri satu kali untuk mengembalikan baris 1 hingga 10 lalu menjalankan kueri lagi untuk mengembalikan baris 11 hingga 20 dan seterusnya. Setiap kueri bersifat independen dan tidak terkait satu sama lain dengan cara apa pun. Ini berarti bahwa, tidak seperti menggunakan kursor di mana kueri dijalankan sekali dan status dipertahankan di server, aplikasi klien bertanggung jawab untuk melacak status. Untuk mencapai hasil yang stabil antara permintaan kueri menggunakan OFFSET dan FETCH, kondisi berikut harus dipenuhi:
Data yang mendasar yang digunakan oleh kueri tidak boleh berubah. Artinya, baris yang disentuh oleh kueri tidak diperbarui atau semua permintaan halaman dari kueri dijalankan dalam satu transaksi menggunakan rekam jepret atau isolasi transaksi yang dapat diserialisasikan. Untuk informasi selengkapnya tentang tingkat isolasi transaksi ini, lihat MENGATUR TINGKAT ISOLASI TRANSAKSI (Transact-SQL).
Klausa ORDER BY berisi kolom atau kombinasi kolom yang dijamin unik.
Lihat contoh "Menjalankan beberapa kueri dalam satu transaksi" di bagian Contoh nanti dalam topik ini.
Jika rencana eksekusi yang konsisten penting dalam solusi halaman Anda, pertimbangkan untuk menggunakan petunjuk kueri OPTIMIZE FOR untuk parameter OFFSET dan FETCH. Lihat "Menentukan ekspresi untuk nilai OFFSET dan FETCH" di bagian Contoh nanti dalam topik ini. Untuk informasi selengkapnya tentang OPTIMIZE FOR, lihat Petunjuk Kueri (Transact-SQL).
Contoh
Kategori | Elemen sintaksis unggulan |
---|---|
Sintaks dasar | ORDER BY |
Menentukan urutan naik dan turun | DESC * ASC |
Menentukan kolatasi | COLLATE |
Menentukan urutan bersyarah | Ekspresi huruf besar/kecil |
Menggunakan ORDER BY dalam fungsi peringkat | Fungsi pemberian peringkat |
Membatasi jumlah baris yang dikembalikan | OFFSET * AMBIL |
Menggunakan ORDER BY dengan UNION, EXCEPT, dan INTERSECT | GABUNGAN |
Sintaks dasar
Contoh di bagian ini menunjukkan fungsionalitas dasar klausul ORDER BY menggunakan sintaks minimum yang diperlukan.
J. Menentukan satu kolom yang ditentukan dalam daftar pilih
Contoh berikut mengurutkan hasil yang ditetapkan oleh kolom numerik ProductID
. Karena urutan pengurutan tertentu tidak ditentukan, default (urutan naik) digunakan.
USE AdventureWorks2022;
GO
SELECT ProductID, Name FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY ProductID;
B. Menentukan kolom yang tidak ditentukan dalam daftar pemilihan
Contoh berikut mengurutkan hasil yang ditetapkan oleh kolom yang tidak disertakan dalam daftar pilih, tetapi ditentukan dalam tabel yang ditentukan dalam klausa FROM.
USE AdventureWorks2022;
GO
SELECT ProductID, Name, Color
FROM Production.Product
ORDER BY ListPrice;
C. Menentukan alias sebagai kolom pengurutan
Contoh berikut menentukan alias SchemaName
kolom sebagai kolom urutan pengurutan.
USE AdventureWorks2022;
GO
SELECT name, SCHEMA_NAME(schema_id) AS SchemaName
FROM sys.objects
WHERE type = 'U'
ORDER BY SchemaName;
D. Menentukan ekspresi sebagai kolom pengurutan
Contoh berikut menggunakan ekspresi sebagai kolom pengurutan. Ekspresi didefinisikan dengan menggunakan fungsi DATEPART untuk mengurutkan hasil yang ditetapkan oleh tahun di mana karyawan dipekerjakan.
USE AdventureWorks2022;
GO
SELECT BusinessEntityID, JobTitle, HireDate
FROM HumanResources.Employee
ORDER BY DATEPART(year, HireDate);
Menentukan urutan urutan naik dan turun
J. Menentukan urutan turun
Contoh berikut mengurutkan hasil yang ditetapkan oleh kolom ProductID
numerik dalam urutan turun.
USE AdventureWorks2022;
GO
SELECT ProductID, Name FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY ProductID DESC;
B. Menentukan urutan naik
Contoh berikut mengurutkan hasil yang ditetapkan oleh Name
kolom dalam urutan naik. Karakter diurutkan menurut abjad, bukan numerik. Artinya, 10 sortir sebelum 2.
USE AdventureWorks2022;
GO
SELECT ProductID, Name FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY Name ASC ;
C. Menentukan urutan naik dan turun
Contoh berikut mengurutkan hasil yang ditetapkan oleh dua kolom. Kumpulan hasil kueri pertama-tama diurutkan dalam urutan naik menurut FirstName
kolom lalu diurutkan dalam urutan turun menurut LastName
kolom.
USE AdventureWorks2022;
GO
SELECT LastName, FirstName FROM Person.Person
WHERE LastName LIKE 'R%'
ORDER BY FirstName ASC, LastName DESC ;
Menentukan kolatasi
Contoh berikut menunjukkan cara menentukan kolase dalam klausul ORDER BY dapat mengubah urutan hasil kueri dikembalikan. Tabel dibuat yang berisi kolom yang ditentukan dengan menggunakan kolatasi yang tidak peka huruf besar/kecil dan tidak peka huruf besar/kecil. Nilai disisipkan dengan berbagai perbedaan huruf besar/kecil dan aksen. Karena kolatasi tidak ditentukan dalam klausa ORDER BY, kueri pertama menggunakan kolater kolom saat mengurutkan nilai. Di kueri kedua, kolase peka huruf besar/kecil dan peka huruf besar/kecil ditentukan dalam klausa ORDER BY, yang mengubah urutan pengembalian baris.
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;
Menentukan urutan bersyarah
Contoh berikut menggunakan ekspresi CASE dalam klausul ORDER BY untuk menentukan urutan urutan baris secara kondisional berdasarkan nilai kolom tertentu. Dalam contoh pertama, nilai dalam SalariedFlag
kolom HumanResources.Employee
tabel dievaluasi. Karyawan yang memiliki SalariedFlag
set ke 1 dikembalikan dalam BusinessEntityID
urutan menurut. Karyawan yang memiliki SalariedFlag
set ke 0 dikembalikan dalam urutan BusinessEntityID
naik. Dalam contoh kedua, tataan hasil diurutkan menurut kolom TerritoryName
saat kolom CountryRegionName
sama dengan 'Amerika Serikat' dan untuk CountryRegionName
semua baris lainnya.
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;
Menggunakan ORDER BY dalam fungsi peringkat
Contoh berikut menggunakan klausa ORDER BY dalam fungsi peringkat ROW_NUMBER, RANK, DENSE_RANK, dan NTILE.
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;
Membatasi jumlah baris yang dikembalikan
Contoh berikut menggunakan OFFSET dan FETCH untuk membatasi jumlah baris yang dikembalikan oleh kueri.
Berlaku untuk: SQL Server 2012 (11.x) dan yang lebih baru dan Azure SQL Database.
J. Menentukan konstanta bilangan bulat untuk nilai OFFSET dan FETCH
Contoh berikut menentukan konstanta bilangan bulat sebagai nilai untuk klausa OFFSET dan FETCH. Kueri pertama mengembalikan semua baris yang diurutkan menurut kolom DepartmentID
. Bandingkan hasil yang dikembalikan oleh kueri ini dengan hasil dua kueri yang mengikutinya. Kueri berikutnya menggunakan klausa OFFSET 5 ROWS
untuk melewati 5 baris pertama dan mengembalikan semua baris yang tersisa. Kueri akhir menggunakan klausa OFFSET 0 ROWS
untuk memulai dengan baris pertama lalu menggunakan FETCH NEXT 10 ROWS ONLY
untuk membatasi baris yang dikembalikan ke 10 baris dari kumpulan hasil yang diurutkan.
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. Menentukan variabel untuk nilai OFFSET dan FETCH
Contoh berikut mendeklarasikan variabel @RowsToSkip
dan @FetchRows
dan menentukan variabel ini dalam klausa OFFSET dan FETCH.
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. Menentukan ekspresi untuk nilai OFFSET dan FETCH
Contoh berikut menggunakan ekspresi @StartingRowNumber - 1
untuk menentukan nilai OFFSET dan ekspresi @EndingRowNumber - @StartingRowNumber + 1
untuk menentukan nilai FETCH. Selain itu, petunjuk kueri, OPTIMIZE FOR, ditentukan. Petunjuk ini dapat digunakan untuk memberikan nilai tertentu untuk variabel lokal saat kueri dikompilasi dan dioptimalkan. Nilai hanya digunakan selama pengoptimalan kueri, dan bukan selama eksekusi kueri. Untuk informasi selengkapnya, lihat Petunjuk Kueri (Transact-SQL).
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. Menentukan subkueri skalar konstan untuk nilai OFFSET dan FETCH
Contoh berikut menggunakan subkueri skalar konstan untuk menentukan nilai klausa FETCH. Subkueri mengembalikan satu nilai dari kolom PageSize
dalam tabel dbo.AppSettings
.
-- 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. Menjalankan beberapa kueri dalam satu transaksi
Contoh berikut menunjukkan satu metode penerapan solusi halaman yang memastikan hasil yang stabil dikembalikan di semua permintaan dari kueri. Kueri dijalankan dalam satu transaksi menggunakan tingkat isolasi rekam jepret, dan kolom yang ditentukan dalam klausa ORDER BY memastikan keunikan kolom.
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
Menggunakan ORDER BY dengan UNION, EXCEPT, dan INTERSECT
Saat kueri menggunakan operator UNION, EXCEPT, atau INTERSECT, klausa ORDER BY harus ditentukan di akhir pernyataan dan hasil kueri gabungan diurutkan. Contoh berikut mengembalikan semua produk yang berwarna merah atau kuning dan mengurutkan daftar gabungan ini menurut kolom ListPrice
.
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;
Contoh: Azure Synapse Analytics and Analytics Platform System (PDW)
Contoh berikut menunjukkan pengurutan hasil yang ditetapkan oleh kolom numerik EmployeeKey
dalam urutan naik.
-- Uses AdventureWorks
SELECT EmployeeKey, FirstName, LastName FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY EmployeeKey;
Contoh berikut mengurutkan hasil yang ditetapkan oleh kolom numerik EmployeeKey
dalam urutan turun.
-- Uses AdventureWorks
SELECT EmployeeKey, FirstName, LastName FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY EmployeeKey DESC;
Contoh berikut mengurutkan hasil yang ditetapkan oleh LastName
kolom.
-- Uses AdventureWorks
SELECT EmployeeKey, FirstName, LastName FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY LastName;
Contoh berikut mengurutkan menurut dua kolom. Kueri ini pertama-tama mengurutkan dalam urutan naik menurut FirstName
kolom, lalu mengurutkan nilai umum FirstName
dalam urutan turun menurut LastName
kolom.
-- Uses AdventureWorks
SELECT EmployeeKey, FirstName, LastName FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY LastName, FirstName;
Lihat Juga
Ekspresi (Transact-SQL)
SELECT (Transact-SQL)
FROM (Transact-SQL)
Fungsi Peringkat (Transact-SQL)
TOP (Transact-SQL)
Petunjuk Kueri (T-SQL)
EXCEPT dan INTERSECT (Transact-SQL)
UNION (Transact-SQL)
CASE (Transact-SQL)
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk