ORDER BY
klausa biasanya digunakan dalam SQL untuk mengurutkan hasil kueri.
Ini memungkinkan Anda untuk menentukan urutan pengembalian hasil.
Anda dapat menentukan apakah hasil diurutkan dalam urutan menaik atau menurun. Anda juga dapat menentukan beberapa kolom untuk diurutkan.
Contoh
Berikut adalah contoh untuk mendemonstrasikan ORDER BY
klausa.
SELECT
VendorId,
ProductName,
ProductPrice
FROM Products
ORDER BY VendorId ASC;
Hasil:
+------------+---------------------------------+----------------+ | VendorId | ProductName | ProductPrice | |------------+---------------------------------+----------------| | 1001 | Left handed screwdriver | 25.99 | | 1001 | Long Weight (blue) | 14.75 | | 1001 | Long Weight (green) | 11.99 | | 1002 | Sledge Hammer | 33.49 | | 1003 | Chainsaw | 245.00 | | 1003 | Straw Dog Box | 55.99 | | 1004 | Bottomless Coffee Mugs (4 Pack) | 9.99 | +------------+---------------------------------+----------------+
ASC
bagian berarti naik . Saat Anda menggunakan ORDER BY
klausa, defaultnya naik, jadi Anda bisa menghilangkan ASC
bagian jika Anda mau.
Jadi kita juga bisa menulis query seperti ini:
SELECT
VendorId,
ProductName,
ProductPrice
FROM Products
ORDER BY VendorId;
Pesanan Turun
Untuk mengurutkannya dalam descending pesan, gunakan DESC
.
SELECT
VendorId,
ProductName,
ProductPrice
FROM Products
ORDER BY VendorId DESC;
Hasil:
+------------+---------------------------------+----------------+ | VendorId | ProductName | ProductPrice | |------------+---------------------------------+----------------| | 1004 | Bottomless Coffee Mugs (4 Pack) | 9.99 | | 1003 | Chainsaw | 245.00 | | 1003 | Straw Dog Box | 55.99 | | 1002 | Sledge Hammer | 33.49 | | 1001 | Left handed screwdriver | 25.99 | | 1001 | Long Weight (blue) | 14.75 | | 1001 | Long Weight (green) | 11.99 | +------------+---------------------------------+----------------+
Pesan Berdasarkan Beberapa Kolom
Anda dapat menentukan beberapa kolom yang akan digunakan untuk mengurutkan. Ini memungkinkan Anda untuk menentukan bagaimana baris harus diurutkan ketika ada beberapa baris dengan nilai yang sama di kolom yang diurutkan pertama.
Mungkin lebih mudah untuk mendemonstrasikan ini dengan sebuah contoh.
SELECT
VendorId,
ProductName,
ProductPrice
FROM Products
ORDER BY VendorId DESC, ProductName DESC, ProductPrice DESC;
Hasil:
+------------+---------------------------------+----------------+ | VendorId | ProductName | ProductPrice | |------------+---------------------------------+----------------| | 1004 | Bottomless Coffee Mugs (4 Pack) | 9.99 | | 1003 | Straw Dog Box | 55.99 | | 1003 | Chainsaw | 245.00 | | 1002 | Sledge Hammer | 33.49 | | 1001 | Long Weight (green) | 11.99 | | 1001 | Long Weight (blue) | 14.75 | | 1001 | Left handed screwdriver | 25.99 | +------------+---------------------------------+----------------+
Jika kita fokus pada tiga baris dengan VendorId
dari 1001
, kita dapat melihat bahwa contoh sebelumnya mengembalikan nama produk dalam urutan menaik, tetapi dalam contoh ini kita mengembalikannya dalam urutan menurun. Ini karena, kami menominasikan ProductName
sebagai kolom kedua di ORDER BY
klausa, dan kami menentukan DESC
untuk urutan menurun.
Kolom kedua hanya berlaku jika ada duplikat di ORDER BY
pertama kolom. Jika tidak, kolom berikutnya tidak relevan sejauh penyortiran lebih lanjut.
Jika kita melihat ProductPrice
kolom, kita dapat melihat bahwa kolom ini tidak berpengaruh pada pengurutan, meskipun kita menentukan ProductPrice DESC
. Kita dapat melihat bahwa semua harga dalam urutan menaik, meskipun kami bersikeras bahwa mereka harus dalam urutan menurun. Alasan kolom ini tidak berpengaruh adalah karena tidak ada duplikat di kolom yang diurutkan sebelumnya. Oleh karena itu, urutan dua kolom pertama memengaruhi hasil, tetapi urutan kolom ketiga tidak.
Ini bukan untuk mengatakan bahwa kolom ketiga tidak akan pernah berpengaruh. Jika nanti kita masukkan lagi Left handed screwdriver
, tetapi dengan harga yang berbeda, maka ProductPrice
pengurutan kolom akan berlaku, karena ada nilai duplikat di ProductName
kolom.
Menggabungkan Ascending dengan Descending
Anda dapat mencampur setiap kolom dengan urutan naik dan turun. Mereka tidak semua harus sama. Misalnya, kita bisa melakukan ini:
SELECT
VendorId,
ProductName,
ProductPrice
FROM Products
ORDER BY VendorId DESC, ProductName ASC, ProductPrice DESC;
Hasil:
+------------+---------------------------------+----------------+ | VendorId | ProductName | ProductPrice | |------------+---------------------------------+----------------| | 1004 | Bottomless Coffee Mugs (4 Pack) | 9.99 | | 1003 | Chainsaw | 245.00 | | 1003 | Straw Dog Box | 55.99 | | 1002 | Sledge Hammer | 33.49 | | 1001 | Left handed screwdriver | 25.99 | | 1001 | Long Weight (blue) | 14.75 | | 1001 | Long Weight (green) | 11.99 | +------------+---------------------------------+----------------+
Pesan dengan Alias Kolom
ORDER BY
klausa menerima alias kolom sebagai kolom yang akan dipesan.
Misalnya, kita bisa melakukan ini:
SELECT
VendorId AS ID,
ProductName AS Name,
ProductPrice AS Price
FROM Products
ORDER BY ID DESC, Name DESC, Price DESC;
Hasil:
+------+---------------------------------+---------+ | ID | Name | Price | |------+---------------------------------+---------| | 1004 | Bottomless Coffee Mugs (4 Pack) | 9.99 | | 1003 | Straw Dog Box | 55.99 | | 1003 | Chainsaw | 245.00 | | 1002 | Sledge Hammer | 33.49 | | 1001 | Long Weight (green) | 11.99 | | 1001 | Long Weight (blue) | 14.75 | | 1001 | Left handed screwdriver | 25.99 | +------+---------------------------------+---------+
Urutkan berdasarkan Kolom yang Tidak Ada di Daftar PILIH
ORDER BY
klausa menerima kolom yang tidak ditentukan dalam SELECT
daftar.
Dengan kata lain, Anda tidak diharuskan memilih kolom untuk mengurutkan berdasarkan kolom tersebut.
Contoh:
SELECT
ProductName AS Name,
ProductPrice AS Price
FROM Products
ORDER BY VendorId DESC, Name DESC, Price DESC;
Hasil:
+---------------------------------+---------+ | Name | Price | |---------------------------------+---------| | Bottomless Coffee Mugs (4 Pack) | 9.99 | | Straw Dog Box | 55.99 | | Chainsaw | 245.00 | | Sledge Hammer | 33.49 | | Long Weight (green) | 11.99 | | Long Weight (blue) | 14.75 | | Left handed screwdriver | 25.99 | +---------------------------------+---------+
Di sini, kami memesan dengan VendorId
kolom, meskipun kami tidak memasukkannya ke dalam SELECT
daftar.
Pesan berdasarkan ID Kolom
ORDER BY
klausa juga menerima ID kolom sebagai ganti nama kolom.
Misalnya, kita bisa melakukan ini:
SELECT
VendorId AS ID,
ProductName AS Name,
ProductPrice AS Price
FROM Products
ORDER BY 1 DESC, 2 DESC, 3 DESC;
Hasil:
+------+---------------------------------+---------+ | ID | Name | Price | |------+---------------------------------+---------| | 1004 | Bottomless Coffee Mugs (4 Pack) | 9.99 | | 1003 | Straw Dog Box | 55.99 | | 1003 | Chainsaw | 245.00 | | 1002 | Sledge Hammer | 33.49 | | 1001 | Long Weight (green) | 11.99 | | 1001 | Long Weight (blue) | 14.75 | | 1001 | Left handed screwdriver | 25.99 | +------+---------------------------------+---------+
Namun, ini tidak disarankan.
Pertama, membuat kueri lebih sulit dibaca dan dipahami orang lain.
Kedua, jika seseorang kemudian mengubah urutan kolom di SELECT
daftar, mereka juga harus mengubah urutan ORDER BY
daftar. Akan sangat mudah untuk melupakan hal ini, dan hasil kueri akan berakhir dengan urutan yang salah.
Ini contoh yang saya maksud.
SELECT
ProductName AS Name,
VendorId AS ID,
ProductPrice AS Price
FROM Products
ORDER BY 1 DESC, 2 DESC, 3 DESC;
Hasil:
+---------------------------------+------+---------+ | Name | ID | Price | |---------------------------------+------+---------| | Straw Dog Box | 1003 | 55.99 | | Sledge Hammer | 1002 | 33.49 | | Long Weight (green) | 1001 | 11.99 | | Long Weight (blue) | 1001 | 14.75 | | Left handed screwdriver | 1001 | 25.99 | | Chainsaw | 1003 | 245.00 | | Bottomless Coffee Mugs (4 Pack) | 1004 | 9.99 | +---------------------------------+------+---------+
Yang saya lakukan hanyalah memindahkan ProductPrice
posisi kolom di SELECT
daftar, dan itu benar-benar mengacaukan urutan hasil.
Pemesanan Default
Dalam SQL, jika Anda tidak menggunakan ORDER BY
klausa, tidak ada jaminan urutan hasil Anda nantinya. Meskipun mungkin terlihat seperti database Anda mengurutkan hasil berdasarkan kolom tertentu, ini mungkin tidak benar-benar terjadi.
Secara umum, tanpa ORDER BY
klausa, data akan diurutkan dalam urutan yang dimuat ke dalam tabel. Namun, jika baris telah dihapus atau diperbarui, urutannya akan dipengaruhi oleh cara DBMS menggunakan kembali ruang penyimpanan yang direklamasi.
Oleh karena itu, jangan mengandalkan DBMS untuk mengurutkan hasil dalam urutan yang berarti. Jika Anda ingin hasil Anda diurutkan, gunakan ORDER BY
klausa.
Memesan dengan Pengecualian
Anda mungkin mengalami saat-saat di mana Anda perlu menyertakan pengecualian dalam ORDER BY
ayat.
Misalnya, Anda ingin mengurutkan berdasarkan abjad berdasarkan kolom kecuali satu baris. Anda mungkin ingin satu baris (atau beberapa baris) muncul di bagian atas, sementara semua baris yang tersisa diurutkan dalam urutan tertentu.
Untungnya, ada cara mudah untuk melakukan ini. Lihat Cara Menulis Klausa ORDER BY dengan Pengecualian jika Anda perlu melakukannya.