Klausa ORDER BY mengurutkan baris dalam hasil kueri berdasarkan satu atau beberapa ekspresi. Tanpa klausa ini, database mengembalikan baris dalam urutan yang tidak ditentukan.
Sintaksis
ORDER BY expression [ ASC | DESC ] [, ...]expression dapat berupa:
nama kolom output dalam daftar
SELECTnomor ordinal (posisi dari kiri ke kanan) kolom output dalam daftar
SELECTsuatu ekspresi arbitrer yang dibentuk dari nilai kolom input, termasuk kolom yang tidak ada dalam daftar
SELECT
Cara kerja
Baris diurutkan berdasarkan ekspresi pertama dalam klausa ORDER BY. Jika dua baris memiliki nilai yang sama pada ekspresi tersebut, ekspresi berikutnya diterapkan, dan seterusnya. Apabila baris memiliki nilai yang sama pada semua ekspresi yang ditentukan, urutan pengembaliannya bergantung pada implementasi.
Arah pengurutan: Tambahkan ASC (ascending/naik) atau DESC (descending/turun) setelah setiap ekspresi. Nilai default-nya adalah ASC.
Nilai NULL: Nilai null muncul di akhir hasil ascending dan di awal hasil descending.
Aturan pengurutan string: Data string diurutkan menggunakan collation sesuai locale tertentu, yang ditetapkan saat kluster database diinisialisasi.
Batasan
Ketika
ORDER BYditerapkan pada hasil operasiUNION,INTERSECT, atauMINUS, ekspresi tersebut harus berupa nama kolom output atau nomor ordinal—ekspresi arbitrer tidak diperbolehkan.Jika ekspresi
ORDER BYberupa nama sederhana yang cocok dengan nama kolom output sekaligus nama kolom input,ORDER BYmemperlakukannya sebagai nama kolom output. Ini berbeda dengan perilakuGROUP BYdalam situasi yang sama, dan diperlukan untuk kompatibilitas dengan standar SQL.
Contoh
Urutkan berdasarkan nama kolom atau nomor ordinal
Kedua kueri berikut mengurutkan hasil berdasarkan kolom dname. Kueri pertama menggunakan nama kolom, sedangkan kueri kedua menggunakan nomor ordinal-nya (2, karena dname merupakan kolom kedua dalam daftar SELECT).
SELECT * FROM dept ORDER BY dname;SELECT * FROM dept ORDER BY 2;Keduanya menghasilkan output yang sama:
deptno | dname | loc
--------+------------+----------
10 | ACCOUNTING | NEW YORK
40 | OPERATIONS | BOSTON
20 | RESEARCH | DALLAS
30 | SALES | CHICAGO
(4 rows)Urutkan berdasarkan kolom yang tidak ada dalam daftar SELECT
ORDER BY dapat mereferensikan kolom yang tidak ada dalam daftar SELECT. Pernyataan berikut memilih nama karyawan tetapi mengurutkan berdasarkan nomor karyawan:
SELECT ename FROM emp ORDER BY empno;