OBJEDNEJTE DO v MySQLDotaz ASC a DESC s příkladem

⚡ Chytré shrnutí

OBJEDNEJTE DO v MySQL Řadí sady výsledků dotazu vzestupně nebo sestupně pomocí klíčových slov ASC a DESC. Následující části vysvětlují syntaxi, řazení podle jednoho a více sloupců, umisťování hodnot NULL a příklady provedené na ukázkové databázi myflixdb.

  • 🔠 Výchozí chování: ORDER BY seřazuje vzestupně, pokud není uvedeno ani ASC, ani DESC, takže ASC je ve většině příkazů volitelný.
  • ⬆️ Klíčové slovo ASC: ASC řadí čísla od nejnižšího po nejvyšší, řetězce od A do Z a data od nejstaršího po nejnovější.
  • ⬇️ Klíčové slovo DESC: DESC toto pořadí obrací, což vyhovuje historii plateb od nejnovějších k prvnímu a seznamům s klesajícím datem narození.
  • 🧮 Řazení podle více sloupců: Pořadí ve sloupcích je důležité. ORDER BY gender (pohlaví), date_of_birth (datum_narození) DESC seřadí nejdříve podle pohlaví vzestupně a poté podle data sestupně v rámci každé skupiny.
  • 🔎 Kombinace klauzulí: WHERE filtruje řádky, GROUP BY je agreguje, ORDER BY výsledek seřazuje a LIMIT jej ořezává.
  • ⚙️ Výkonnostní faktor: Index na seřazeném sloupci umožňuje MySQL aby se zabránilo operaci řazení souborů u velkých tabulek.

OBJEDNEJTE DO v MySQL

Co je ORDER BY in MySQL?

MySQL SEŘADIT PODLE je klauzule používaná s dotazem SELECT pro uspořádané řazení dat. MySQL Klauzule ORDER BY seřadí sadu výsledků dotazu vzestupně nebo sestupně, podle jednoho sloupce nebo podle několika sloupců najednou.

Pokud se příkaz SELECT použije samostatně, řádky se vracejí v pořadí, v jakém je úložný modul přečte, což není zaručené pořadí. Řazení je jednoduše přeskupení řádků v zadané sekvenci. Lze jej provádět u číselných, řetězcových i datových typů.

MySQL Syntaxe ORDER BY

Než se podíváme na příklady, je užitečné zjistit, kde se daná klauzule nachází v plném příkazu SELECT.

SELECT statement... [WHERE condition | GROUP BY `field_name(s)` HAVING condition] ORDER BY `field_name(s)` [ASC | DESC];

ZDE

  • "příkaz SELECT... " je běžný výběrový dotaz.
  • “ | “ představuje alternativy.
  • „[WHERE podmínka | GROUP BY `název_pole` HAVING podmínka]“ je volitelná podmínka používaná k filtrování sady výsledků dotazu.
  • "SEŘADIT PODLE" provádí třídění sady výsledků dotazu.
  • “[ASC | DESC]“ je klíčové slovo používané k seřazení výsledné sady vzestupně nebo sestupně. Všimněte si, že ASC je výchozí nastavení.

Co jsou klíčová slova DESC a ASC?

Funkce ORDER BY akceptuje dva směry řazení: ASC a DESC. Níže uvedená tabulka je porovnává napříč datovými typy, které budete nejčastěji řadit.

Klíčová slova DESC a ASCASC je zkrácená forma pro vzestupně Klíčová slova DESC a ASCMySQL DESC je zkrácená forma pro sestupně
Používá se k řazení výsledků dotazu ve stylu shora dolů. Používá se k řazení výsledků dotazu zdola nahoru.
Při práci s datovými typy data se v horní části seznamu zobrazuje nejstarší datum. Při práci s datovými typy data se nejnovější datum zobrazuje v horní části seznamu.
Při práci s numerickými datovými typy jsou nejnižší hodnoty zobrazeny v horní části seznamu. Při práci s číselnými datovými typy se nejvyšší hodnoty zobrazují v horní části sady výsledků dotazu.
Při práci s datovými typy řetězců se sada výsledků dotazu třídí od těch, které začínají písmenem A až po písmeno Z. Při práci s datovými typy řetězců je sada výsledků dotazu setříděna od těch, které začínají písmenem Z až po písmeno A.

Klíčová slova SQL DESC i ASC se používají ve spojení s příkazem SELECT a MySQL doložka ORDER BY.

Syntaxe DESC a ASC

Klíčové slovo SQL DESC řazení má následující základní syntaxi.

SELECT {fieldName(s) | *} FROM tableName(s) [WHERE condition] ORDER BY fieldname(s) ASC | DESC [LIMIT N];

ZDE

  • SELECT {fieldName(s) | *} FROM tableName(s) je příkaz obsahující pole a tabulku(y), ze kterých se má získat výsledná sada.
  • [KDE podmínka] je volitelný, ale lze jej použít k filtrování dat podle dané podmínky.
  • ORDER BY názvu(ů) pole je povinné a pojmenovává pole, na kterém se provádí řazení. MySQL Klíčové slovo DESC určuje, že se řazení provádí sestupně.
  • [LIMIT N] je volitelný, ale lze jej použít k omezení počtu řádků vrácených ze sady výsledků dotazu.

Proč používat DESC a ASC v MySQL?

Znalost syntaxe je jen polovina výsledku. Důvodem existence ORDER BY je, že výsledná sada, kterou databáze snadno vygeneruje, není vždy snadno čitelná pro uživatele.

Předpokládejme, že tisknete historii plateb pro člena videotéky, aby recepční mohl rychle odpovídat na dotazy. Je mnohem logičtější nechat platby vytisknout v sestupném chronologickém pořadí, počínaje nejnovější platbou a postupně k nejstarší. Klíčové slovo DESC v SQL se v takové situaci hodí, protože seznam lze seřadit podle data platby.

Předpokládejme nyní, že marketingové oddělení chce seznam filmů podle kategorií, aby si členové mohli před zapůjčením filmů prohlédnout, jaké tituly knihovna má. Seřazení názvů kategorií a filmů vzestupně umožňuje členům rychle vyhledat informace, přesně jako v rejstříku. K tomuto účelu slouží klíčové slovo ASC.

Stručně řečeno, ORDER BY přemění nezpracovanou sadu výsledků na zprávu. Klíčové slovo, které zvolíte, závisí na otázce, kterou si čtenář klade: co se stalo naposledy volá po DESC, zatímco kde najdu tuto položku vyzývá k ASC.

MySQL Příklad ORDER BY

Všechny následující příklady běží na ukázkové databázi myflixdb. Začněte s tabulkou neseřazených členů, která je vrácena ve výchozím pořadí.

SELECT * FROM members;

Spuštění výše uvedeného skriptu v MySQL Workbench s myflixdb nám dává následující výsledky, které jsou uvedeny níže.

členské číslo celá_jména rod datum_narození fyzická adresa poštovní_adresa kontaktní_číslo e-mail
1 Janet Jonesová Žena 21-07-1980 První ulice pozemek č. 4 Soukromá taška 0759 253 542 janetjones@yagoo.cm
2 Janet Smith Jonesová Žena 23-06-1980 Melrose 123 NULL NULL jj@fstreet.com
3 Robert Phil Muž 12-07-1989 3. ulice 34 NULL 12345 rm@tstreet.com
4 Gloria Williamsová Žena 14-02-1984 2. ulice 23 NULL NULL NULL
5 Leonard Hofstadter Muž NULL Woodcrest NULL 845738767 NULL
6 Sheldon Cooper Muž NULL Woodcrest NULL 976736763 NULL
7 Rajesh Koothrappali Muž NULL Woodcrest NULL 938867763 NULL
8 Leslie Winkle Muž 14-02-1984 Woodcrest NULL 987636553 NULL
9 Howard Wolowitz Muž 24-08-1981 South Park PO Box 4563 987786553 NULL

Řazení sestupně pomocí DESC

Předpokládejme, že marketingové oddělení chce, aby byly údaje o členech seřazeny sestupně podle data narození. To pomáhá týmu včas odeslat narozeninové pozdravy. Seznam je vygenerován níže uvedeným dotazem.

SELECT * FROM members ORDER BY date_of_birth DESC;

Spuštění výše uvedeného skriptu v MySQL Workbench s myflixdb nám dává následující výsledky, které jsou uvedeny níže.

MySQL Výsledek dotazu ORDER BY DESC

Řazení vzestupně pomocí ASC

Stejný dotaz ve vzestupném pořadí jednoduše prohodí klíčové slovo.

SELECT * FROM members ORDER BY date_of_birth ASC;

MySQL Výsledek dotazu ORDER BY ASC

Poznámka: NULL znamená žádnou hodnotu, což není totéž co nula nebo prázdný řetězec. Na obou snímcích obrazovky si všimněte, jak jsou data s hodnotou NULL seskupena: MySQL Hodnota NULL je považována za nižší než jakákoli jiná hodnota, takže řádky s hodnotou NULL se zobrazují jako první pod ASC a jako poslední pod DESC.

Jak seřadit podle více sloupců v MySQL

Řazení podle jednoho sloupce odpovídá na jednoduché otázky. Sestavy obvykle potřebují druhou úroveň řazení a ORDER BY akceptuje seznam polí oddělených čárkami přesně pro tento účel.

Uvažujme následující třídicí skript SQL, který vypíše všechny záznamy členů bez jakéhokoli explicitního pokynu.

SELECT * FROM `members`;

Spuštění výše uvedeného skriptu poskytne následující výsledky uvedené níže.

členské číslo celá_jména rod datum_narození fyzická adresa poštovní_adresa kontaktní_číslo e-mail
1 Janet Jonesová Žena 21-07-1980 První ulice pozemek č. 4 Soukromá taška 0759 253 542 janetjones@yagoo.cm
2 Janet Smith Jonesová Žena 23-06-1980 Melrose 123 NULL NULL jj@fstreet.com
3 Robert Phil Muž 12-07-1989 3. ulice 34 NULL 12345 rm@tstreet.com
4 Gloria Williamsová Žena 14-02-1984 2. ulice 23 NULL NULL NULL
5 Leonard Hofstadter Muž NULL Woodcrest NULL 845738767 NULL
6 Sheldon Cooper Muž NULL Woodcrest NULL 976736763 NULL
7 Rajesh Koothrappali Muž NULL Woodcrest NULL 938867763 NULL
8 Leslie Winkle Muž 14-02-1984 Woodcrest NULL 987636553 NULL
9 Howard Wolowitz Muž 24-08-1981 South Park PO Box 4563 987786553 NULL

Řazení jednoho sloupce podle výchozího pořadí

Předpokládejme, že chceme seznam, který seřadí sadu výsledků dotazu pomocí pole pohlaví. Následující skript to provede bez uvedení směru.

SELECT * FROM `members` ORDER BY `gender`;
členské číslo celá_jména rod datum_narození fyzická adresa poštovní_adresa kontaktní_číslo e-mail
1 Janet Jonesová Žena 21-07-1980 První ulice pozemek č. 4 Soukromá taška 0759 253 542 janetjones@yagoo.cm
2 Janet Smith Jonesová Žena 23-06-1980 Melrose 123 NULL NULL jj@fstreet.com
4 Gloria Williamsová Žena 14-02-1984 2. ulice 23 NULL NULL NULL
3 Robert Phil Muž 12-07-1989 3. ulice 34 NULL 12345 rm@tstreet.com
5 Leonard Hofstadter Muž NULL Woodcrest NULL 845738767 NULL
6 Sheldon Cooper Muž NULL Woodcrest NULL 976736763 NULL
7 Rajesh Koothrappali Muž NULL Woodcrest NULL 938867763 NULL
8 Leslie Winkle Muž 14-02-1984 Woodcrest NULL 987636553 NULL
9 Howard Wolowitz Muž 24-08-1981 South Park PO Box 4563 987786553 NULL

Nejprve se zobrazí „ženské“ členy a poté „mužské“ členy. Je to proto, že když se klauzule ORDER BY použije bez zadání ASC nebo MySQL Klíčové slovo DESC, MySQL Ve výchozím nastavení seřadí sadu výsledků dotazu vzestupně.

Řazení dvou sloupců v opačných směrech

Podívejme se nyní na příklad, který provádí řazení pomocí dvou sloupcůPrvní sloupec je tříděny in vzestupně ve výchozím nastavení, zatímco druhý sloupec je tříděny in sestupné pořadí.

SELECT * FROM `members` ORDER BY `gender`, `date_of_birth` DESC;

Spuštění výše uvedeného skriptu v MySQL Workbench proti myflixdb dává následující výsledky.

MySQL Příklad ORDER BY se dvěma sloupci

Sloupec pohlaví byl ve výchozím nastavení seřazen vzestupně, zatímco sloupec s datem narození byl explicitně seřazen sestupně. Každé klíčové slovo direction se vztahuje pouze na sloupec, po kterém následuje.

Jak kombinovat ORDER BY s WHERE, LIMIT a GROUP BY

Klauzule ORDER BY je v produkčním dotazu jen zřídka jedinou. MySQL vždy vyhodnocuje klauzule v pevném pořadí a znalost tohoto pořadí vysvětluje, proč výsledky vypadají tak, jak vypadají.

  1. Z přečte řádky z tabulky.
  2. KDE zahodí řádky, které nesplňují podmínku.
  3. SKUPINA VYTVOŘENÁ sbalí přeživší řádky do skupin a funkce HAVING tyto skupiny filtruje.
  4. SEŘADIT PODLE sekvence bez ohledu na zbývající řádky.
  5. LIMIT odřízne požadovaný počet řádků ze seřazeného seznamu.

Protože příkaz ORDER BY běží po příkazech WHERE a GROUP BY, ale před příkazem LIMIT, je dotaz typu „pět nejmladších členů z Woodcrestu“ vyjádřen jedním příkazem.

SELECT full_names, date_of_birth FROM members
WHERE physical_address = 'Woodcrest'
ORDER BY date_of_birth DESC
LIMIT 5;

Stejné pořadí platí pro seskupené výsledky. Agregované hodnoty generované agregační funkce například COUNT lze seřadit tak, aby se nejrušnější kategorie dostala na začátek sestavy.

SELECT gender, COUNT(*) AS members_count FROM members
GROUP BY gender
ORDER BY members_count DESC;

Tip: Funkce ORDER BY může řadit podle aliasu sloupce, podle výrazu nebo dokonce podle pozice ve sloupci, například ORDER BY 3. Řazení podle pozice je nestabilní, protože vložení nového sloupce do seznamu SELECT tiše změní klíč řazení. Místo toho sloupec pojmenujte.

Jeden aspekt, který je třeba mít na paměti ohledně výkonu. Pokud seřazený sloupec obsahuje index, MySQL může číst řádky v pořadí indexu a řazení zcela přeskočit. Bez indexu velké tabulky vynucují řazení souborů v paměti nebo na disku, což je obvyklý důvod, proč se dotaz na sestavu zpomaluje.

Nejčastější dotazy

Může. Bez indexu na seřazeném sloupci, MySQL provede řazení souborů přes celou výslednou sadu. Přidání indexu, který odpovídá sloupci ORDER BY a směru, umožní serveru číst řádky v pořadí a tento krok přeskočit.

Obvykle ne. Výchozí kolace, jako například utf8mb4_0900_ai_ci, nerozlišují velká a malá písmena, takže „apple“ a „Apple“ se seřazují společně. Binární kolace nebo kolace _cs, neboli ORDER BY BINARY název_sloupce, vytváří řazení s rozlišením velkých písmen, kde jsou velká písmena na prvním místě.

Ano. ORDER BY RAND() zamíchá výslednou sadu, což je praktické pro výběr náhodného filmu nebo člena. Před seřazením vyhodnotí každý řádek, takže ji spárujte s LIMIT a vyhněte se jí u velmi velkých tabulek.

Ano. Pomocníci s umělou inteligencí zabudovaní do nástrojů, jako je MySQL Workbench Převeďte požadavky v prostém jazyce na příkazy SELECT pomocí ORDER BY. Vždy zkontrolujte vygenerovaný sloupec a směr řazení, protože umělá inteligence nemůže vědět, jaké pořadí vaše sestava vyžaduje.

Částečně. Poradci řízení umělou inteligencí čtou pomalé protokoly dotazů a navrhují indexy, které odstraňují operace řazení souborů. Návrhy stále vyžadují lidské posouzení, protože každý další index zpomaluje vkládání a aktualizace ve stejné tabulce.

Shrňte tento příspěvek takto: