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.

  • 🔠 Varsayılan Davranış: ORDER BY, ne ASC ne de DESC belirtilmediğinde artan sırada sıralama yapar; bu nedenle çoğu ifadede ASC isteğe bağlıdır.
  • ⬆️ ASC Anahtar Kelimesi: ASC, sayıları en düşükten en yükseğe, metin dizilerini A'dan Z'ye ve tarihleri ​​en eskiden en yeniye doğru sıralar.
  • ⬇️ DESC Anahtar Kelimesi: DESC bu sıralamayı tersine çevirir; bu da en yeni ödeme geçmişine ve azalan doğum tarihi listelerine uygundur.
  • 🧮 Çok Sütunlu Sıralama: Sütun sırası önemlidir. ORDER BY gender, date_of_birth DESC komutu, önce cinsiyeti artan sırada, ardından her grup içinde doğum tarihlerini azalan sırada sıralar.
  • 🔎 Madde Birleşimi: WHERE sorgusu satırları filtreler, GROUP BY sorgusu bunları bir araya getirir, ORDER BY sorgusu sonucu sıralar ve LIMIT sorgusu sonucu kırpar.
  • ⚙️ Performans Faktörü: Sıralanmış sütun üzerindeki bir indeks, şunlara olanak tanır: MySQL Büyük tablolarda dosya sıralama işleminden kaçınmak için.

SİPARİŞE GÖRE MySQL

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.

DESC ve ASC Anahtar KelimeleriASC artanın kısa şeklidir DESC ve ASC Anahtar KelimeleriMySQL 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.

MySQL ORDER BY DESC sorgu sonucu

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;

MySQL ORDER BY ASC sorgu sonucu

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.

MySQL İki sütuna göre sıralama örneği

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.

  1. DAN Tablodaki satırları okur.
  2. NEREDE Şartı sağlamayan satırları atar.
  3. GROUP BY Kalan satırları gruplara ayırır ve HAVING bu grupları filtreler.
  4. TARAFINDAN SİPARİŞ Geriye kalan satırları sıralar.
  5. 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.

SSS

Olabilir. Sıralanmış sütunda indeks yoksa, MySQL Bu işlem, tüm sonuç kümesi üzerinde dosya sıralaması gerçekleştirir. ORDER BY sütununa ve yönüne uyan bir indeks eklemek, sunucunun satırları sırayla okumasını ve bu adımı atlamasını sağlar.

Genellikle hayır. utf8mb4_0900_ai_ci gibi varsayılan sıralama düzenleri büyük/küçük harf duyarlı değildir, bu nedenle "apple" ve "Apple" birlikte sıralanır. İkili veya _cs sıralama düzeni veya ORDER BY BINARY column_name, büyük harflerin önce geldiği büyük/küçük harf duyarlı bir sıralama üretir.

Evet. ORDER BY RAND() sonuç kümesini karıştırır; bu, rastgele bir film veya üye seçmek için kullanışlıdır. Sıralamadan önce her satırı puanlandırır, bu nedenle LIMIT ile birlikte kullanın ve çok büyük tablolarda kullanmaktan kaçının.

Evet. Araçlara entegre edilmiş yapay zeka yardımcıları, örneğin... MySQL Tezgâh Basit dildeki istekleri ORDER BY içeren SELECT ifadelerine dönüştürün. Oluşturulan sıralama sütununu ve yönünü her zaman gözden geçirin, çünkü yapay zeka raporunuzun hangi sıralamayı gerektirdiğini bilemez.

Kısmen. Yapay zekâ destekli danışmanlar, yavaş sorgu günlüklerini okuyarak dosya sıralama işlemlerini ortadan kaldıran indeksler önerir. Ancak, her ek indeks aynı tablodaki ekleme ve güncelleme işlemlerini yavaşlattığı için, bu önerilerin yine de insan tarafından incelenmesi gerekir.

Bu yazıyı şu şekilde özetleyin: