BESTÄLL INN MySQLASC- och DESC-fråga med exempel
⚡ Smart sammanfattning
BESTÄLL INN MySQL sorterar frågeresultatsmängder i stigande eller fallande ordning med hjälp av nyckelorden ASC och DESC. Avsnitten nedan förklarar syntax, sortering med en och flera kolumner, NULL-placering och utförda exempel som körs mot exempeldatabasen myflixdb.

Vad är ORDER BY in MySQL?
MySQL SORTERA EFTER är en klausul som används med SELECT-frågan för att sortera data på ett ordnat sätt. MySQL ORDER BY-klausulen sorterar frågeresultatet i antingen stigande eller fallande ordning, på en kolumn eller på flera kolumner samtidigt.
När SELECT-kommandot används ensamt returneras rader i den ordning som lagringsmotorn råkar läsa dem, vilket inte är en garanterad ordning. Sortering är helt enkelt att omorganisera dessa rader i en specificerad sekvens. Det kan utföras på både numeriska datatyper, strängdata och datumdatatyper.
MySQL ORDER BY Syntax
Innan man tittar på exempel är det bra att se var satsen finns i en fullständig SELECT-sats.
SELECT statement... [WHERE condition | GROUP BY `field_name(s)` HAVING condition] ORDER BY `field_name(s)` [ASC | DESC];
HÄR
- "SELECT-sats... " är den vanliga urvalsfrågan.
- ” | " representerar alternativ.
- "[WHERE-villkor | GROUP BY `fältnamn` HAR villkor]" är det valfria villkor som används för att filtrera frågeresultatet.
- "SORTERA EFTER" utför sorteringen av frågeresultatet.
- “[ASC | DESC]” är nyckelordet som används för att sortera resultatmängden i antingen stigande eller fallande ordning. Observera att ASC är standard.
Vad är DESC- och ASC-nyckelord?
ASC och DESC är de två sorteringsriktningar som ORDER BY accepterar. Tabellen nedan jämför dem mellan de datatyper du sorterar oftast.
ASC är kortformen för stigande |
MySQL DESC är kortformen för fallande |
|---|---|
| Den används för att sortera frågeresultaten i en stil från topp till botten. | Den används för att sortera frågeresultaten från botten till toppen. |
| När du arbetar med datumdatatyper visas det tidigaste datumet överst i listan. | När man arbetar med datumdatatyper visas det senaste datumet högst upp i listan. |
| När du arbetar med numeriska datatyper visas de lägsta värdena överst i listan. | När man arbetar med numeriska datatyper visas de högsta värdena högst upp i frågeresultatet. |
| När du arbetar med strängdatatyper sorteras frågeresultatuppsättningen från de som börjar med bokstaven A som går upp till bokstaven Z. | När du arbetar med strängdatatyper sorteras frågeresultatuppsättningen från de som börjar med bokstaven Z och går ner till bokstaven A. |
Både SQL DESC- och ASC-nyckelorden används tillsammans med SELECT-satsen och MySQL ORDER BY klausul.
DESC- och ASC-syntax
SQL DESC-sorteringsnyckelordet har följande grundläggande syntax.
SELECT {fieldName(s) | *} FROM tableName(s) [WHERE condition] ORDER BY fieldname(s) ASC | DESC [LIMIT N];
HÄR
- VÄLJ {fieldName(s) | *} FRÅN tabellnamn är den sats som innehåller fälten och tabellerna från vilka resultatmängden ska hämtas.
- [WHERE-tillstånd] är valfritt men kan användas för att filtrera data enligt det givna villkoret.
- ORDER BY-fältnamn är obligatoriskt och namnger fältet där sorteringen utförs. MySQL Nyckelordet DESC anger att sorteringen sker i fallande ordning.
- [GRÄNS N] är valfritt men kan användas för att begränsa antalet rader som returneras från frågeresultatet.
Varför använda DESC och ASC i MySQL?
Att känna till syntaxen är bara halva bilden. Anledningen till att ORDER BY existerar är att en resultatmängd som är enkel för en databas att producera inte alltid är lätt för en person att läsa.
Anta att du skriver ut en betalningshistorik för en medlem i videobiblioteket så att receptionen snabbt kan svara på frågor. Det är mycket mer logiskt att betalningarna skrivs ut i fallande kronologisk ordning, med början från den senaste betalningen och arbete tillbaka till den tidigaste. DESC i SQL är nyckelordet som blir praktiskt i en sådan situation, eftersom listan kan sorteras efter betalningsdatum.
Anta nu att marknadsavdelningen vill ha en lista över filmer per kategori, så att medlemmarna kan se vilka titlar biblioteket har innan de hyr ut. Genom att sortera kategorinamnen och filmtitlarna i stigande ordning kan medlemmarna snabbt söka upp information, precis som de skulle göra i ett index. Nyckelordet ASC tjänar det syftet.
Kort sagt, ORDER BY omvandlar en rå resultatmängd till en rapport. Vilket nyckelord du väljer beror på vilken fråga läsaren ställer: vad som hände senast efterlyser DESC, medan var hittar jag den här varan efterlyser ASC.
MySQL ORDERA EFTER Exempel
Alla exempel som följer körs mot exempeldatabasen myflixdb. Börja med tabellen med osorterade medlemmar, som returneras i sin standardordning.
SELECT * FROM members;
Exekvera skriptet ovan i MySQL Workbench mot myflixdb ger oss följande resultat som visas nedan.
| medlemsnummer | Fullständiga namn | kön | födelsedatum | fysisk adress | postadress | kontaktnummer | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Kvinna | 21-07-1980 | First Street Tomt nr 4 | Privat väska | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Kvinna | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 3 | Robert Phil | man | 12-07-1989 | 3rd Street 34 | NULL | 12345 | rm@tstreet.com |
| 4 | Gloria Williams | Kvinna | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
| 5 | Leonard Hofstadter | man | NULL | Trästomme | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | man | NULL | Trästomme | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | man | NULL | Trästomme | NULL | 938867763 | NULL |
| 8 | Leslie Winkle | man | 14-02-1984 | Trästomme | NULL | 987636553 | NULL |
| 9 | Howard Wolowitz | man | 24-08-1981 | Southpark | PO Box 4563 | 987786553 | NULL |
Sortera i fallande ordning med DESC
Anta att marknadsavdelningen vill att medlemsuppgifterna ska vara ordnade i fallande ordning efter födelsedatum. Detta hjälper teamet att skicka födelsedagshälsningar i tid. Listan genereras med hjälp av frågan nedan.
SELECT * FROM members ORDER BY date_of_birth DESC;
Exekvera skriptet ovan i MySQL Workbench mot myflixdb ger oss följande resultat som visas nedan.
Sortera i stigande ordning med ASC
Samma fråga i stigande ordning byter helt enkelt ut nyckelordet.
SELECT * FROM members ORDER BY date_of_birth ASC;
Obs: NULL betyder inget värde alls, vilket inte är detsamma som noll eller en tom sträng. Observera i båda skärmdumparna hur NULL-datumen grupperas tillsammans: MySQL behandlar NULL som lägre än något annat värde, så NULL-rader visas först under ASC och sist under DESC.
Hur man sorterar efter flera kolumner i MySQL
Att sortera på en enda kolumn besvarar enkla frågor. Rapporter behöver vanligtvis en andra ordningsnivå, och ORDER BY accepterar en kommaseparerad lista med fält för just det ändamålet.
Tänk på följande SQL-sorteringsskript som listar alla medlemsposter utan någon explicit anvisning.
SELECT * FROM `members`;
Att köra skriptet ovan ger följande resultat som visas nedan.
| medlemsnummer | Fullständiga namn | kön | födelsedatum | fysisk adress | postadress | kontaktnummer | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Kvinna | 21-07-1980 | First Street Tomt nr 4 | Privat väska | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Kvinna | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 3 | Robert Phil | man | 12-07-1989 | 3rd Street 34 | NULL | 12345 | rm@tstreet.com |
| 4 | Gloria Williams | Kvinna | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
| 5 | Leonard Hofstadter | man | NULL | Trästomme | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | man | NULL | Trästomme | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | man | NULL | Trästomme | NULL | 938867763 | NULL |
| 8 | Leslie Winkle | man | 14-02-1984 | Trästomme | NULL | 987636553 | NULL |
| 9 | Howard Wolowitz | man | 24-08-1981 | Southpark | PO Box 4563 | 987786553 | NULL |
Sortera en enskild kolumn efter standardordning
Anta att vi vill ha en lista som sorterar frågeresultatet med hjälp av fältet för kön. Skriptet nedan gör det utan att ange en riktning.
SELECT * FROM `members` ORDER BY `gender`;
| medlemsnummer | Fullständiga namn | kön | födelsedatum | fysisk adress | postadress | kontaktnummer | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Kvinna | 21-07-1980 | First Street Tomt nr 4 | Privat väska | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Kvinna | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 4 | Gloria Williams | Kvinna | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
| 3 | Robert Phil | man | 12-07-1989 | 3rd Street 34 | NULL | 12345 | rm@tstreet.com |
| 5 | Leonard Hofstadter | man | NULL | Trästomme | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | man | NULL | Trästomme | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | man | NULL | Trästomme | NULL | 938867763 | NULL |
| 8 | Leslie Winkle | man | 14-02-1984 | Trästomme | NULL | 987636553 | NULL |
| 9 | Howard Wolowitz | man | 24-08-1981 | Southpark | PO Box 4563 | 987786553 | NULL |
"Kvinnliga" medlemmar visas först, följt av "Manliga" medlemmar. Detta beror på att när ORDER BY-klausulen används utan att ange ASC eller MySQL DESC-nyckelord, MySQL sorterar frågeresultaten i stigande ordning som standard.
Sortera två kolumner i motsatta riktningar
Låt oss nu titta på ett exempel som utför sortering med två kolumnerDen första kolumnen är sorterad in stigande ordning som standard, medan den andra kolumnen är sorterad in fallande ordning.
SELECT * FROM `members` ORDER BY `gender`, `date_of_birth` DESC;
Exekvera skriptet ovan i MySQL Workbench mot myflixdb ger följande resultat.
Kolumnen för kön sorterades som standard i stigande ordning, medan kolumnen för födelsedatum sorterades explicit i fallande ordning. Varje nyckelord för riktning gäller endast för den kolumn det följer efter.
Hur man kombinerar ORDER BY med WHERE, LIMIT och GROUP BY
ORDER BY är sällan den enda klausulen i en produktionsfråga. MySQL utvärderar alltid klausulerna i en fast sekvens, och att känna till den sekvensen förklarar varför resultaten ser ut som de gör.
- FRÅN läser raderna från tabellen.
- VAR ignorerar de rader som inte uppfyller villkoret.
- GRUPP AV komprimerar de överlevande raderna i grupper, och HAVING filtrerar dessa grupper.
- SORTERA EFTER sekvenser oavsett vilka rader som återstår.
- BEGRÄNSA skär bort det begärda antalet rader från den sorterade listan.
Eftersom ORDER BY körs efter WHERE och GROUP BY men före LIMIT, uttrycks en fråga som "de fem yngsta medlemmarna från Woodcrest" i en enda sats.
SELECT full_names, date_of_birth FROM members WHERE physical_address = 'Woodcrest' ORDER BY date_of_birth DESC LIMIT 5;
Samma ordning gäller för grupperade resultat. Aggregerade värden producerade av aggregerade funktioner som COUNT kan sorteras, så att den mest hektiska kategorin hamnar högst upp i rapporten.
SELECT gender, COUNT(*) AS members_count FROM members GROUP BY gender ORDER BY members_count DESC;
Dricks: ORDER BY kan sortera efter ett kolumnalias, efter ett uttryck eller till och med efter kolumnposition, till exempel ORDER BY 3. Sortering efter position är känsligt eftersom sorteringsnyckeln ändras tyst när en ny kolumn infogas i SELECT-listan. Namnge kolumnen istället.
En prestandaaspekt är värd att komma ihåg. När den sorterade kolumnen har ett index, MySQL kan läsa raderna i indexordning och hoppa över sorteringen helt och hållet. Utan ett index tvingar stora tabeller fram en filsortering i minnet eller på disken, vilket är den vanliga anledningen till att en rapportfråga blir långsam.

ASC är kortformen för stigande
MySQL DESC är kortformen för fallande

