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.

  • 🔠 Domyślne zachowanie: Polecenie ORDER BY sortuje w kolejności rosnącej, gdy nie podano ani ASC, ani DESC, dlatego w większości poleceń ASC jest opcjonalne.
  • ⬆️ Słowo kluczowe ASC: ASC porządkuje liczby od najniższej do najwyższej, ciągi znaków od A do Z, a daty od najstarszej do najpóźniejszej.
  • (Tj. Słowo kluczowe DESC: DESC odwraca tę kolejność, co pasuje do historii pierwszych, niedawnych płatności i list z malejącą datą urodzenia.
  • 🧮 Sortowanie wielokolumnowe: Kolejność kolumn ma znaczenie. ORDER BY płeć, data_urodzenia DESC sortuje najpierw płeć rosnąco, a następnie daty malejąco w każdej grupie.
  • 🔎 Połączenie klauzul: WHERE filtruje wiersze, GROUP BY agreguje je, ORDER BY ustala kolejność wyników, a LIMIT je przycina.
  • ⚙️ Współczynnik wydajności: Indeks w posortowanej kolumnie pozwala MySQL aby uniknąć sortowania plików w przypadku dużych tabel.

ZAMÓW PRZEZ w MySQL

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.

Słowa kluczowe DESC i ASCASC to skrócona forma słowa rosnącego Słowa kluczowe DESC i ASCMySQL 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 E-mail
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.

MySQL Wynik zapytania ORDER BY DESC

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;

MySQL Wynik zapytania ORDER BY 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 E-mail
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 E-mail
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.

MySQL Przykład polecenia ORDER BY dla dwóch kolumn

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.

  1. OD odczytuje wiersze z tabeli.
  2. WHERE odrzuca wiersze, które nie spełniają warunku.
  3. GRUPUJ WEDŁUG łączy ocalałe wiersze w grupy, a polecenie HAVING filtruje te grupy.
  4. ZAMÓW PRZEZ sekwencje dowolnych pozostałych wierszy.
  5. 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.

FAQ

Może. Bez indeksu w posortowanej kolumnie, MySQL Wykonuje sortowanie plików w całym zestawie wyników. Dodanie indeksu pasującego do kolumny ORDER BY i kierunku pozwala serwerowi odczytać wiersze po kolei i pominąć ten krok.

Zazwyczaj nie. Domyślne sortowania, takie jak utf8mb4_0900_ai_ci, nie uwzględniają wielkości liter, więc „apple” i „Apple” są sortowane razem. Sortowanie binarne lub _cs, albo ORDER BY BINARY column_name, powoduje sortowanie z uwzględnieniem wielkości liter, gdzie wielkie litery są pierwsze.

Tak. Funkcja ORDER BY RAND() tasuje zbiór wyników, co jest przydatne przy losowym wyborze filmu lub członka. Przed sortowaniem punktuje każdy wiersz, więc należy ją połączyć z funkcją LIMIT i unikać jej w przypadku bardzo dużych tabel.

Tak. Pomocnicy AI wbudowani w narzędzia takie jak MySQL Workbench Zamień żądania w języku potocznym na instrukcje SELECT za pomocą ORDER BY. Zawsze sprawdzaj wygenerowaną kolumnę sortowania i kierunek, ponieważ AI nie wie, jakiej kolejności wymaga Twój raport.

Częściowo. Doradcy sterowani przez sztuczną inteligencję odczytują powolne logi zapytań i sugerują indeksy, które eliminują operacje sortowania plików. Sugestie nadal wymagają weryfikacji przez człowieka, ponieważ każdy dodatkowy indeks spowalnia operacje wstawiania i aktualizacji w tej samej tabeli.

Podsumuj ten post następująco: