SİPARİŞE GÖRE MySQL: Artan ve Azalan Sorgulama Örneği
⚡ Akıllı Özet
SİPARİŞE GÖRE MySQL ASC ve DESC anahtar kelimeleri aracılığıyla sorgu sonuç kümelerini artan veya azalan sırada sıralar. Aşağıdaki bölümlerde sözdizimi, tek sütunlu ve çok sütunlu sıralama, NULL yerleşimi ve myflixdb örnek veritabanına karşı yürütülen örnek uygulamalar açıklanmaktadır.
ORDER BY nedir? MySQL?
MySQL TARAFINDAN SİPARİŞ SELECT sorgusuyla birlikte kullanılan ve verileri düzenli bir şekilde sıralamak için kullanılan bir maddedir. MySQL ORDER BY yan tümcesi, sorgu sonuç kümesini artan veya azalan sırada, tek bir sütuna veya aynı anda birden fazla sütuna göre sıralar.
SELECT komutu tek başına kullanıldığında, satırlar depolama motorunun onları okuduğu sırayla döndürülür; bu da garantili bir sıra değildir. Sıralama, bu satırları belirtilen bir sıraya göre yeniden düzenlemektir. Bu işlem, sayısal, metin ve tarih veri türleri üzerinde aynı şekilde gerçekleştirilebilir.
MySQL Sıralama Ölçütü Sözdizimi
Örnekleri incelemeden önce, bu koşulun tam bir SELECT sorgusu içinde nerede yer aldığını görmek faydalı olacaktır.
SELECT statement... [WHERE condition | GROUP BY `field_name(s)` HAVING condition] ORDER BY `field_name(s)` [ASC | DESC];
İŞTE
- "SELECT ifadesi... " Bu, normal bir SELECT sorgusudur.
- "| " Alternatifleri temsil eder.
- “[WHERE koşulu | GROUP BY `alan_adı(ları)` HAVING koşulu]” Bu, sorgu sonuç kümesini filtrelemek için kullanılan isteğe bağlı bir koşuldur.
- "TARAFINDAN SİPARİŞ" Sorgu sonuç kümesinin sıralamasını gerçekleştirir.
- “[ASC | DESC]” `#` anahtar kelimesi, sonuç kümesini artan veya azalan sırada sıralamak için kullanılır. Şunu unutmayın ki... ASC varsayılandır.
DESC ve ASC Anahtar Kelimeleri Nelerdir?
ORDER BY komutu ASC ve DESC olmak üzere iki sıralama yönünü kabul eder. Aşağıdaki tablo, en sık sıralayacağınız veri türleri arasında bu iki yönü karşılaştırmaktadır.
ASC artanın kısa şeklidir |
MySQL DESC, azalan kelimesinin kısa şeklidir |
|---|---|
| Sorgu sonuçlarını yukarıdan aşağıya doğru sıralamak için kullanılır. | Sorgu sonuçlarını aşağıdan yukarıya doğru sıralamak için kullanılır. |
| Tarih veri türleri üzerinde çalışırken listenin en üstünde en eski tarih gösterilir. | Tarih veri türleriyle çalışırken, en yeni tarih listenin en üstünde gösterilir. |
| Sayısal veri türleriyle çalışırken en düşük değerler listenin başında gösterilir. | Sayısal veri türleriyle çalışırken, en yüksek değerler sorgu sonuç kümesinin en üstünde gösterilir. |
| Dize veri türleriyle çalışırken, sorgu sonuç kümesi A harfinden başlayarak Z harfine kadar sıralanır. | Dize veri türleriyle çalışırken, sorgu sonuç kümesi Z harfiyle başlayanlardan A harfine kadar sıralanır. |
SQL DESC ve ASC anahtar kelimelerinin her ikisi de SELECT ifadesiyle birlikte kullanılır. MySQL ORDER BY cümlesi.
DESC ve ASC Sözdizimi
SQL DESC sort anahtar sözcüğünün temel söz dizimi aşağıdaki gibidir.
SELECT {fieldName(s) | *} FROM tableName(s) [WHERE condition] ORDER BY fieldname(s) ASC | DESC [LIMIT N];
İŞTE
- SELECT {fieldName(s) | *} FROM tableName(ler) Bu ifade, sonuç kümesinin alınacağı alanları ve tablo(lar)ı içeren bir ifadedir.
- [NEREDE koşulu] isteğe bağlıdır ancak verileri verilen koşula göre filtrelemek için kullanılabilir.
- Alan adına göre sırala(lar) Bu alan zorunludur ve sıralama işleminin gerçekleştirileceği alanı belirtir. MySQL DESC anahtar kelimesi, sıralamanın azalan sırada yapılacağını belirtir.
- [SINIR N] İsteğe bağlıdır ancak sorgu sonuç kümesinden döndürülen satır sayısını sınırlamak için kullanılabilir.
DESC ve ASC neden kullanılır? MySQL?
Sözdizimini bilmek resmin sadece yarısıdır. ORDER BY'ın var olma nedeni, bir veritabanının üretmesi kolay olan bir sonuç kümesinin bir kişi tarafından okunmasının her zaman kolay olmamasıdır.
Örneğin, video kütüphanesi üyesinin ödeme geçmişini yazdırarak resepsiyonun soruları hızlıca yanıtlamasını sağlamak istiyorsunuz. Ödemelerin en son ödemeden başlayarak en eskiye doğru azalan kronolojik sırayla yazdırılması çok daha mantıklıdır. SQL'deki DESC anahtar kelimesi bu durumda çok işe yarar, çünkü liste ödeme tarihine göre sıralanabilir.
Şimdi, pazarlama departmanının üyelerin kiralama yapmadan önce kütüphanede hangi filmlerin bulunduğunu görebilmeleri için kategoriye göre bir film listesi istediğini varsayalım. Kategori adlarını ve film başlıklarını artan sırada sıralamak, üyelerin tıpkı bir dizinde olduğu gibi bilgileri hızlı bir şekilde bulmalarını sağlar. ASC anahtar kelimesi bu amaca hizmet eder.
Özetle, ORDER BY komutu ham sonuç kümesini bir rapora dönüştürür. Seçtiğiniz anahtar kelime, okuyucunun sorduğu soruya bağlıdır: en son ne oldu DESC'i talep ederken Bu ürünü nerede bulabilirim? ASC'yi talep ediyor.
MySQL SIRALAMA ÖRNEKLERİ
Aşağıdaki tüm örnekler myflixdb örnek veritabanı üzerinde çalıştırılır. Varsayılan sırada döndürülen sıralanmamış üyeler tablosuyla başlayın.
SELECT * FROM members;
Yukarıdaki betiğin çalıştırılması MySQL Workbenc'in myflixdb'ye karşı yaptığı karşılaştırma aşağıdaki sonuçları vermektedir.
| Üye numarası | tam_adlar | cinsiyet | doğum_tarihi | fiziksel adres | posta_adresi | iletişim_numarası | E-posta |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Kadın | 21-07-1980 | 4. Sokak Parsel No:XNUMX | Özel Çanta | +0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Kadın | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 3 | Robert Phil | Erkek | 12-07-1989 | 3. Sokak 34 | NULL | 12345 | rm@tstreet.com |
| 4 | Gloria Williams | Kadın | 14-02-1984 | 2. Sokak 23 | NULL | NULL | NULL |
| 5 | Leonard Hofstadter | Erkek | NULL | Ağaç tepesi | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | Erkek | NULL | Ağaç tepesi | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | Erkek | NULL | Ağaç tepesi | NULL | 938867763 | NULL |
| 8 | Leslie Winkle | Erkek | 14-02-1984 | Ağaç tepesi | NULL | 987636553 | NULL |
| 9 | Howard Wolowitz | Erkek | 24-08-1981 | Güney Parkı | PO Box 4563 | 987786553 | NULL |
DESC ile Azalan Sıralama
Diyelim ki pazarlama departmanı, üye bilgilerini doğum tarihine göre azalan sırada düzenlemek istiyor. Bu, ekibin doğum günü tebriklerini zamanında göndermesine yardımcı olur. Liste, aşağıdaki sorgu ile oluşturulur.
SELECT * FROM members ORDER BY date_of_birth DESC;
Yukarıdaki betiğin çalıştırılması MySQL Workbenc'in myflixdb'ye karşı yaptığı karşılaştırma aşağıdaki sonuçları vermektedir.
ASC ile Artan Sıralama
Aynı sorgunun artan sırada çalıştırılması, anahtar kelimenin yerini değiştirir.
SELECT * FROM members ORDER BY date_of_birth ASC;
Not: NULL, hiçbir değerin olmadığı anlamına gelir ve sıfır veya boş bir dizeyle aynı şey değildir. Her iki ekran görüntüsünde de NULL tarihlerinin nasıl gruplandığına dikkat edin: MySQL NULL değerini diğer tüm değerlerden daha düşük olarak kabul eder, bu nedenle NULL satırları ASC altında ilk, DESC altında ise son sırada yer alır.
Birden Çok Sütuna Göre Sıralama Nasıl Yapılır? MySQL
Tek bir sütuna göre sıralama basit soruları yanıtlar. Raporlar genellikle ikinci bir sıralama seviyesine ihtiyaç duyar ve ORDER BY tam olarak bu amaçla virgülle ayrılmış bir alan listesi kabul eder.
Aşağıdaki SQL sıralama betiğini inceleyin; bu betik, herhangi bir açık yönlendirme olmaksızın tüm üye kayıtlarını listeler.
SELECT * FROM `members`;
Yukarıdaki betiğin çalıştırılması aşağıda gösterilen sonuçları verecektir.
| Üye numarası | tam_adlar | cinsiyet | doğum_tarihi | fiziksel adres | posta_adresi | iletişim_numarası | E-posta |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Kadın | 21-07-1980 | 4. Sokak Parsel No:XNUMX | Özel Çanta | +0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Kadın | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 3 | Robert Phil | Erkek | 12-07-1989 | 3. Sokak 34 | NULL | 12345 | rm@tstreet.com |
| 4 | Gloria Williams | Kadın | 14-02-1984 | 2. Sokak 23 | NULL | NULL | NULL |
| 5 | Leonard Hofstadter | Erkek | NULL | Ağaç tepesi | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | Erkek | NULL | Ağaç tepesi | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | Erkek | NULL | Ağaç tepesi | NULL | 938867763 | NULL |
| 8 | Leslie Winkle | Erkek | 14-02-1984 | Ağaç tepesi | NULL | 987636553 | NULL |
| 9 | Howard Wolowitz | Erkek | 24-08-1981 | Güney Parkı | PO Box 4563 | 987786553 | NULL |
Tek Bir Sütunu Varsayılan Sıralama Düzenine Göre Sıralama
Diyelim ki, sorgu sonuç kümesini cinsiyet alanına göre sıralayan bir liste istiyoruz. Aşağıdaki kod, yön belirtmeden bunu yapıyor.
SELECT * FROM `members` ORDER BY `gender`;
| Üye numarası | tam_adlar | cinsiyet | doğum_tarihi | fiziksel adres | posta_adresi | iletişim_numarası | E-posta |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Kadın | 21-07-1980 | 4. Sokak Parsel No:XNUMX | Özel Çanta | +0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Kadın | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 4 | Gloria Williams | Kadın | 14-02-1984 | 2. Sokak 23 | NULL | NULL | NULL |
| 3 | Robert Phil | Erkek | 12-07-1989 | 3. Sokak 34 | NULL | 12345 | rm@tstreet.com |
| 5 | Leonard Hofstadter | Erkek | NULL | Ağaç tepesi | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | Erkek | NULL | Ağaç tepesi | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | Erkek | NULL | Ağaç tepesi | NULL | 938867763 | NULL |
| 8 | Leslie Winkle | Erkek | 14-02-1984 | Ağaç tepesi | NULL | 987636553 | NULL |
| 9 | Howard Wolowitz | Erkek | 24-08-1981 | Güney Parkı | PO Box 4563 | 987786553 | NULL |
Önce “Kadın” üyeler, ardından “Erkek” üyeler görüntülenir. Bunun nedeni, ORDER BY yan tümcesi ASC belirtilmeden kullanıldığında ortaya çıkan sonuçtur. MySQL DESC anahtar kelimesi, MySQL Sorgu sonuç kümesini varsayılan olarak artan sırada sıralar.
İki Sütunu Zıt Yönlerde Sıralama
Şimdi bu işlemi gerçekleştiren bir örneğe bakalım. iki sütun kullanarak sıralamaBirinci sütun şudur: kriteri in artan sıra varsayılan olarak, ikinci sütun ise kriteri in azalan sipariş.
SELECT * FROM `members` ORDER BY `gender`, `date_of_birth` DESC;
Yukarıdaki betiğin çalıştırılması MySQL Workbench'in myflixdb'ye karşı verdiği sonuçlar aşağıdaki gibidir.
Cinsiyet sütunu varsayılan olarak artan sırada, doğum tarihi sütunu ise azalan sırada sıralanmıştır. Her bir yönlendirme anahtar kelimesi yalnızca kendisini takip eden sütun için geçerlidir.
ORDER BY ifadesini WHERE, LIMIT ve GROUP BY ifadeleriyle nasıl birleştirebilirsiniz?
ORDER BY ifadesi, üretim ortamında kullanılan bir sorguda nadiren tek başına yer alır. MySQL Maddeleri her zaman sabit bir sırayla değerlendirir ve bu sırayı bilmek, sonuçların neden böyle göründüğünü açıklar.
- DAN Tablodaki satırları okur.
- NEREDE Şartı sağlamayan satırları atar.
- GROUP BY Kalan satırları gruplara ayırır ve HAVING bu grupları filtreler.
- TARAFINDAN SİPARİŞ Geriye kalan satırları sıralar.
- LİMİT Sıralanmış listeden istenen sayıda satırı dilimler.
ORDER BY ifadesi WHERE ve GROUP BY ifadelerinden sonra, LIMIT ifadesinden önce çalıştığı için, "Woodcrest'in en genç beş üyesi" gibi bir sorgu tek bir ifadeyle dile getirilir.
SELECT full_names, date_of_birth FROM members WHERE physical_address = 'Woodcrest' ORDER BY date_of_birth DESC LIMIT 5;
Gruplandırılmış sonuçlar için de aynı sıralama geçerlidir. Üretilen toplu değerler toplama işlevleri Örneğin, SAYI gibi veriler sıralanabilir, böylece en yoğun kategori raporun en üstüne çıkar.
SELECT gender, COUNT(*) AS members_count FROM members GROUP BY gender ORDER BY members_count DESC;
Bahşiş: ORDER BY, sütun takma adına, bir ifadeye veya hatta ORDER BY 3 gibi sütun konumuna göre sıralama yapabilir. Konuma göre sıralama hassastır, çünkü SELECT listesine yeni bir sütun eklemek sıralama anahtarını sessizce değiştirir. Bunun yerine sütuna bir isim verin.
Performansla ilgili hatırlanması gereken bir nokta var. Sıralanmış sütun bir indeks içeriyorsa, MySQL Satırları indeks sırasına göre okuyabilir ve sıralamayı tamamen atlayabilirsiniz. İndeks olmadan, büyük tablolar bellek içi veya disk üzerinde dosya sıralamasına zorlar; bu da rapor sorgusunun yavaşlamasının olağan nedenidir.


ASC artanın kısa şeklidir
MySQL DESC, azalan kelimesinin kısa şeklidir

