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.

  • 🔠 Standardbeteende: ORDER BY sorterar i stigande ordning när varken ASC eller DESC anges, så ASC är valfritt i de flesta satser.
  • ⬆️ ASC-nyckelord: ASC ordnar tal från lägsta till högsta, strängar från A till Ö och datum från tidigast till senaste.
  • ⬇️ DESC Nyckelord: DESC vänder på den sekvensen, vilket passar betalningshistoriken för de senaste första och listor med fallande födelsedatum.
  • 🧮 Sortering med flera kolumner: Kolumnordningen spelar roll. ORDER BY gender, date_of_birth DESC sorterar kön stigande först, sedan datum fallande inom varje grupp.
  • 🔎 Klausulkombination: WHERE filtrerar rader, GROUP BY aggregerar dem, ORDER BY sekvenserar resultatet och LIMIT trimmar det.
  • ⚙️ Prestandafaktor: Ett index på den sorterade kolumnen tillåter MySQL för att undvika en filsorteringsoperation på stora tabeller.

BESTÄLL INN MySQL

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.

DESC och ASC nyckelordASC är kortformen för stigande DESC och ASC nyckelordMySQL 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 e-mail
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.

MySQL Resultat av ORDER BY DESC-frågesökningen

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;

MySQL Resultat av ORDER BY ASC-frågesökningen

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 e-mail
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 e-mail
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.

MySQL Exempel på ORDER BY med två kolumner

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.

  1. FRÅN läser raderna från tabellen.
  2. VAR ignorerar de rader som inte uppfyller villkoret.
  3. GRUPP AV komprimerar de överlevande raderna i grupper, och HAVING filtrerar dessa grupper.
  4. SORTERA EFTER sekvenser oavsett vilka rader som återstår.
  5. 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.

Vanliga frågor

Det kan det. Utan ett index på den sorterade kolumnen, MySQL utför en filsortering över hela resultatmängden. Genom att lägga till ett index som matchar kolumnen och riktningen ORDER BY kan servern läsa rader i ordning och hoppa över det steget.

Vanligtvis inte. Standardsorteringar som utf8mb4_0900_ai_ci är inte skiftlägeskänsliga, så "apple" och "Apple" sorteras tillsammans. En binär eller _cs-sortering, eller ORDER BY BINARY kolumnnamn, producerar en skiftlägeskänslig ordning där versaler kommer först.

Ja. ORDER BY RAND() blandar resultatmängden, vilket är praktiskt för att välja en slumpmässig film eller medlem. Den poängsätter varje rad innan sortering, så para ihop den med LIMIT och undvik den på mycket stora tabeller.

Ja. AI-hjälpmedel inbyggda i verktyg som MySQL Arbetsbänk Omvandla förfrågningar i enkelt språk till SELECT-satser med ORDER BY. Granska alltid den genererade sorteringskolumnen och riktningen, eftersom en AI inte kan veta vilken ordning din rapport kräver.

Delvis. AI-drivna rådgivare läser långsamma frågeloggar och föreslår index som tar bort filsorteringsåtgärder. Förslagen behöver fortfarande granskas av människor, eftersom varje extra index saktar ner infogningar och uppdateringar i samma tabell.

Sammanfatta detta inlägg med: