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.
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.
ASC je zkrácená forma pro vzestupně |
MySQL 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 | |
|---|---|---|---|---|---|---|---|
| 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.
Ř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;
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 | |
|---|---|---|---|---|---|---|---|
| 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 | |
|---|---|---|---|---|---|---|---|
| 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.
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í.
- Z přečte řádky z tabulky.
- KDE zahodí řádky, které nesplňují podmínku.
- SKUPINA VYTVOŘENÁ sbalí přeživší řádky do skupin a funkce HAVING tyto skupiny filtruje.
- SEŘADIT PODLE sekvence bez ohledu na zbývající řádky.
- 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.


ASC je zkrácená forma pro vzestupně
MySQL DESC je zkrácená forma pro sestupně

