Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

SQL ORDER BY Klausa untuk Pemula

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Mengonversi String ke Huruf Kecil di SQL

  2. Bagaimana Rencana Paralel Memulai – Bagian 2

  3. Perutean Hanya-Baca untuk Selalu Aktif

  4. Tidak suka pemicu basis data? Anda hanya tidak tahu bagaimana bekerja dengan mereka!

  5. Bermigrasi dari AnswerHub ke WordPress:Kisah 10 Teknologi