ZAMÓW PRZEZ w MySQL:Zapytanie ASC i DESC z przykładem
⚡ Inteligentne podsumowanie
ZAMÓW PRZEZ w MySQL Sortuje zestawy wyników zapytania w kolejności rosnącej lub malejącej za pomocą słów kluczowych ASC i DESC. Poniższe sekcje wyjaśniają składnię, sortowanie jednokolumnowe i wielokolumnowe, umieszczanie wartości NULL oraz przykłady uruchomień na przykładowej bazie danych myflixdb.

Co to jest ORDER BY w MySQL?
MySQL ZAMÓW PRZEZ jest klauzulą używaną w zapytaniu SELECT do sortowania danych w sposób uporządkowany. MySQL Klauzula ORDER BY sortuje wyniki zapytania w kolejności rosnącej lub malejącej, według jednej kolumny lub według kilku kolumn jednocześnie.
Po użyciu samego polecenia SELECT, wiersze są zwracane w kolejności odczytu przez moduł pamięci masowej, co nie jest kolejnością gwarantowaną. Sortowanie polega po prostu na ponownym ułożeniu wierszy w określonej kolejności. Można to wykonać zarówno dla typów danych liczbowych, ciągów znaków, jak i dat.
MySQL Składnia ORDER BY
Zanim przyjrzymy się przykładom, warto zobaczyć, gdzie klauzula znajduje się w pełnym poleceniu SELECT.
SELECT statement... [WHERE condition | GROUP BY `field_name(s)` HAVING condition] ORDER BY `field_name(s)` [ASC | DESC];
TUTAJ
- "SELECT oświadczenie... " jest standardowym zapytaniem SELECT.
- ” | „ reprezentuje alternatywy.
- „[GDZIE warunek | GRUPUJ WEDŁUG `nazw_pola(ów)` MAJĄCYCH warunek]” jest opcjonalnym warunkiem używanym do filtrowania zestawu wyników zapytania.
- "ZAMÓW PRZEZ" wykonuje sortowanie zestawu wyników zapytania.
- „[ASC | OPIS]” to słowo kluczowe używane do sortowania zestawu wyników w kolejności rosnącej lub malejącej. Należy pamiętać, że ROSNĄCO jest wartością domyślną.
Co to są słowa kluczowe DESC i ASC?
ASC i DESC to dwa kierunki sortowania akceptowane przez komendę ORDER BY. Poniższa tabela porównuje je według najczęściej sortowanych typów danych.
ASC to skrócona forma słowa rosnącego |
MySQL DESC to skrót od malejącego |
|---|---|
| Służy do sortowania wyników zapytania w stylu od góry do dołu. | Służy do sortowania wyników zapytania od dołu do góry. |
| Podczas pracy z typami danych typu data najwcześniejsza data jest wyświetlana na górze listy. | Podczas pracy z typami danych daty, najnowsza data jest wyświetlana na górze listy. |
| Podczas pracy z numerycznymi typami danych najniższe wartości są wyświetlane na górze listy. | Podczas pracy z typami danych numerycznych najwyższe wartości są wyświetlane na górze zestawu wyników zapytania. |
| Podczas pracy z ciągowymi typami danych zestaw wyników zapytania jest sortowany od tych zaczynających się od litery A aż do litery Z. | Podczas pracy z ciągowymi typami danych zestaw wyników zapytania jest sortowany od tych zaczynających się od litery Z i kończących się na literze A. |
Słowa kluczowe SQL DESC i ASC są używane w połączeniu z poleceniem SELECT i MySQL Klauzula ORDER BY.
Składnia DESC i ASC
Słowo kluczowe sort SQL DESC ma następującą podstawową składnię.
SELECT {fieldName(s) | *} FROM tableName(s) [WHERE condition] ORDER BY fieldname(s) ASC | DESC [LIMIT N];
TUTAJ
- WYBIERZ {nazwy pól | *} FROM nazwa(-y) tabeli jest poleceniem zawierającym pola i tabele, z których ma zostać pobrany zestaw wyników.
- [warunek GDZIE] jest opcjonalny, ale można go użyć do filtrowania danych zgodnie z podanym warunkiem.
- ORDER BY nazwa(y) pola(ń) jest obowiązkowe i określa pole, według którego przeprowadzane jest sortowanie. MySQL Słowo kluczowe DESC określa, że sortowanie jest malejące.
- [LIMIT N] jest opcjonalny, ale można go użyć w celu ograniczenia liczby wierszy zwracanych z zestawu wyników zapytania.
Dlaczego warto używać DESC i ASC MySQL?
Znajomość składni to tylko połowa sukcesu. Powodem istnienia komendy ORDER BY jest to, że zbiór wyników, który baza danych może łatwo wygenerować, nie zawsze jest łatwy do odczytania dla użytkownika.
Załóżmy, że drukujesz historię płatności użytkownika wypożyczalni filmów, aby recepcja mogła szybko odpowiedzieć na pytania. Znacznie bardziej logiczne jest drukowanie płatności w kolejności chronologicznej, zaczynając od ostatniej płatności i kończąc na najwcześniejszej. Słowo kluczowe DESC w SQL jest przydatne w takiej sytuacji, ponieważ listę można posortować według daty płatności.
Załóżmy teraz, że dział marketingu chce listę filmów według kategorii, aby użytkownicy mogli sprawdzić, jakie tytuły są dostępne w bibliotece przed wypożyczeniem. Sortowanie nazw kategorii i tytułów filmów w kolejności rosnącej pozwala użytkownikom szybko wyszukiwać informacje, dokładnie tak, jak w indeksie. Słowo kluczowe ASC służy temu celowi.
Krótko mówiąc, ORDER BY zamienia surowy zestaw wyników w raport. Wybór słowa kluczowego zależy od pytania, jakie zadaje czytelnik: co wydarzyło się ostatnio wzywa do DESC, podczas gdy Gdzie znajdę ten przedmiot? wzywa ASC.
MySQL Przykład ORDER BY
Wszystkie poniższe przykłady działają na przykładowej bazie danych myflixdb. Zacznij od tabeli nieposortowanych członków, która jest zwracana w domyślnej kolejności.
SELECT * FROM members;
Wykonanie powyższego skryptu w MySQL Workbench w połączeniu z bazą danych myflixdb daje nam poniższe wyniki.
| numer_członkostwa | pełne nazwy | płeć | data_urodzenia | adres fizyczny | adres_pocztowy | numer kontaktowy | |
|---|---|---|---|---|---|---|---|
| 1 | Żaneta Jones | Kobieta | 21-07-1980 | Działka przy ulicy Pierwszej nr 4 | Prywatna torba | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Kobieta | 23-06-1980 | Melroza 123 | NULL | NULL | jj@fstreet.com |
| 3 | Roberta Fila | Mężczyzna | 12-07-1989 | Trzecia ulica 3 | NULL | 12345 | rm@tstreet.com |
| 4 | Glorii Williams | Kobieta | 14-02-1984 | Druga ulica 2 | NULL | NULL | NULL |
| 5 | Leonarda Hofstadtera | Mężczyzna | NULL | Drzeworyt | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | Mężczyzna | NULL | Drzeworyt | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | Mężczyzna | NULL | Drzeworyt | NULL | 938867763 | NULL |
| 8 | Leslie Winkle | Mężczyzna | 14-02-1984 | Drzeworyt | NULL | 987636553 | NULL |
| 9 | Howarda Wolowitza | Mężczyzna | 24-08-1981 | Park Południowy | PO Box 4563 | 987786553 | NULL |
Sortowanie w kolejności malejącej za pomocą DESC
Załóżmy, że dział marketingu chce, aby dane członków były uporządkowane malejąco według daty urodzenia. Ułatwia to zespołowi terminowe wysyłanie życzeń urodzinowych. Lista jest generowana przez poniższe zapytanie.
SELECT * FROM members ORDER BY date_of_birth DESC;
Wykonanie powyższego skryptu w MySQL Workbench w połączeniu z bazą danych myflixdb daje nam poniższe wyniki.
Sortowanie w kolejności rosnącej za pomocą ASC
To samo zapytanie w kolejności rosnącej po prostu zamienia słowo kluczowe.
SELECT * FROM members ORDER BY date_of_birth ASC;
Uwaga: NULL oznacza brak jakiejkolwiek wartości, co nie jest tym samym, co zero lub pusty ciąg znaków. Zauważ na obu zrzutach ekranu, jak daty NULL są pogrupowane: MySQL traktuje wartość NULL jako mniejszą od pozostałych, dlatego wiersze NULL pojawiają się jako pierwsze w ASC i jako ostatnie w DESC.
Jak sortować według wielu kolumn w MySQL
Sortowanie według jednej kolumny odpowiada na proste pytania. Raporty zazwyczaj wymagają drugiego poziomu sortowania, a ORDER BY akceptuje listę pól rozdzielonych przecinkami właśnie w tym celu.
Rozważ poniższy skrypt sortowania SQL, który wyświetla wszystkie rekordy członkowskie bez żadnych wyraźnych instrukcji.
SELECT * FROM `members`;
Wykonanie powyższego skryptu daje następujące wyniki.
| numer_członkostwa | pełne nazwy | płeć | data_urodzenia | adres fizyczny | adres_pocztowy | numer kontaktowy | |
|---|---|---|---|---|---|---|---|
| 1 | Żaneta Jones | Kobieta | 21-07-1980 | Działka przy ulicy Pierwszej nr 4 | Prywatna torba | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Kobieta | 23-06-1980 | Melroza 123 | NULL | NULL | jj@fstreet.com |
| 3 | Roberta Fila | Mężczyzna | 12-07-1989 | Trzecia ulica 3 | NULL | 12345 | rm@tstreet.com |
| 4 | Glorii Williams | Kobieta | 14-02-1984 | Druga ulica 2 | NULL | NULL | NULL |
| 5 | Leonarda Hofstadtera | Mężczyzna | NULL | Drzeworyt | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | Mężczyzna | NULL | Drzeworyt | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | Mężczyzna | NULL | Drzeworyt | NULL | 938867763 | NULL |
| 8 | Leslie Winkle | Mężczyzna | 14-02-1984 | Drzeworyt | NULL | 987636553 | NULL |
| 9 | Howarda Wolowitza | Mężczyzna | 24-08-1981 | Park Południowy | PO Box 4563 | 987786553 | NULL |
Sortowanie pojedynczej kolumny według kolejności domyślnej
Załóżmy, że chcemy utworzyć listę sortującą zbiór wyników zapytania według pola „płeć”. Poniższy skrypt robi to bez podawania kierunku.
SELECT * FROM `members` ORDER BY `gender`;
| numer_członkostwa | pełne nazwy | płeć | data_urodzenia | adres fizyczny | adres_pocztowy | numer kontaktowy | |
|---|---|---|---|---|---|---|---|
| 1 | Żaneta Jones | Kobieta | 21-07-1980 | Działka przy ulicy Pierwszej nr 4 | Prywatna torba | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Kobieta | 23-06-1980 | Melroza 123 | NULL | NULL | jj@fstreet.com |
| 4 | Glorii Williams | Kobieta | 14-02-1984 | Druga ulica 2 | NULL | NULL | NULL |
| 3 | Roberta Fila | Mężczyzna | 12-07-1989 | Trzecia ulica 3 | NULL | 12345 | rm@tstreet.com |
| 5 | Leonarda Hofstadtera | Mężczyzna | NULL | Drzeworyt | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | Mężczyzna | NULL | Drzeworyt | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | Mężczyzna | NULL | Drzeworyt | NULL | 938867763 | NULL |
| 8 | Leslie Winkle | Mężczyzna | 14-02-1984 | Drzeworyt | NULL | 987636553 | NULL |
| 9 | Howarda Wolowitza | Mężczyzna | 24-08-1981 | Park Południowy | PO Box 4563 | 987786553 | NULL |
Członkowie „kobiety” są wyświetlani jako pierwsi, a następnie członkowie „mężczyźni”. Dzieje się tak, ponieważ klauzula ORDER BY jest używana bez określenia ASC lub MySQL słowo kluczowe DESC, MySQL domyślnie sortuje wyniki zapytania w kolejności rosnącej.
Sortowanie dwóch kolumn w przeciwnych kierunkach
Przyjrzyjmy się teraz przykładowi, który wykonuje sortowanie za pomocą dwóch kolumnPierwsza kolumna to sortowane in rosnąco domyślnie, podczas gdy druga kolumna jest sortowane in Kolejność malejąca.
SELECT * FROM `members` ORDER BY `gender`, `date_of_birth` DESC;
Wykonanie powyższego skryptu w MySQL Workbench i myflixdb dają następujące wyniki.
Kolumna płci została domyślnie posortowana rosnąco, natomiast kolumna daty urodzenia została posortowana jawnie malejąco. Każde słowo kluczowe „kierunku” odnosi się tylko do kolumny, po której następuje.
Jak połączyć ORDER BY z WHERE, LIMIT i GROUP BY
ORDER BY rzadko stanowi jedyną klauzulę w zapytaniu produkcyjnym. MySQL zawsze ocenia klauzule w ustalonej kolejności, a znajomość tej kolejności wyjaśnia, dlaczego wyniki wyglądają tak, a nie inaczej.
- OD odczytuje wiersze z tabeli.
- WHERE odrzuca wiersze, które nie spełniają warunku.
- GRUPUJ WEDŁUG łączy ocalałe wiersze w grupy, a polecenie HAVING filtruje te grupy.
- ZAMÓW PRZEZ sekwencje dowolnych pozostałych wierszy.
- LIMIT wycina żądaną liczbę wierszy z posortowanej listy.
Ponieważ ORDER BY uruchamia się po WHERE i GROUP BY, ale przed LIMIT, zapytanie takie jak „pięciu najmłodszych członków Woodcrest” jest wyrażone w jednym poleceniu.
SELECT full_names, date_of_birth FROM members WHERE physical_address = 'Woodcrest' ORDER BY date_of_birth DESC LIMIT 5;
Ta sama kolejność obowiązuje w przypadku wyników grupowanych. Wartości zbiorcze wygenerowane przez funkcje agregujące takie jak COUNT można sortować, tak aby kategoria o największym natężeniu ruchu znajdowała się na górze raportu.
SELECT gender, COUNT(*) AS members_count FROM members GROUP BY gender ORDER BY members_count DESC;
Wskazówka: Polecenie ORDER BY umożliwia sortowanie według aliasu kolumny, wyrażenia, a nawet pozycji w kolumnie, na przykład ORDER BY 3. Sortowanie według pozycji jest niestabilne, ponieważ wstawienie nowej kolumny do listy SELECT powoduje cichą zmianę klucza sortowania. Zamiast tego należy nadać kolumnie nazwę.
Warto pamiętać o jednym punkcie wydajności. Gdy posortowana kolumna zawiera indeks, MySQL Może odczytywać wiersze w kolejności indeksu i całkowicie pomijać sortowanie. Bez indeksu duże tabele wymuszają sortowanie plików w pamięci lub na dysku, co jest częstą przyczyną spowolnienia zapytania o raport.

ASC to skrócona forma słowa rosnącego
MySQL DESC to skrót od malejącego

