BESTIL INDEN MySQLASC- og DESC-forespørgsel med eksempel

⚡ Smart opsummering

BESTIL INDEN MySQL sorterer forespørgselsresultatsæt i stigende eller faldende rækkefølge ved hjælp af nøgleordene ASC og DESC. Afsnittene nedenfor forklarer syntaksen, sortering med én og flere kolonner, NULL-placering og bearbejdede eksempler udført mod myflixdb-eksempeldatabasen.

  • 🔠 Standardadfærd: ORDER BY sorterer i stigende rækkefølge, når hverken ASC eller DESC er angivet, så ASC er valgfri i de fleste sætninger.
  • ⬆️ ASC-nøgleord: ASC arrangerer tal fra laveste til højeste, strenge fra A til Z, og datoer fra tidligst til seneste.
  • ⬇️ DESC-nøgleord: DESC vender denne rækkefølge om, hvilket passer til betalingshistorikker med nylige førstegangsbetalinger og faldende fødselsdatolister.
  • 🧮 Sortering med flere kolonner: Kolonnerækkefølgen er vigtig. ORDER BY gender, date_of_birth DESC sorterer køn stigende først, derefter datoer faldende inden for hver gruppe.
  • 🔎 Klausulkombination: WHERE filtrerer rækker, GROUP BY aggregerer dem, ORDER BY sekvenserer resultatet, og LIMIT trimmer det.
  • 🇧🇷 Ydelsesfaktor: Et indeks på den sorterede kolonne tillader MySQL for at undgå en filsorteringsoperation på store tabeller.

BESTIL INDEN MySQL

Hvad er ORDER BY i MySQL?

MySQL BESTIL BY er en klausul, der bruges med SELECT-forespørgslen til at sortere data på en ordnet måde. MySQL ORDER BY-klausulen sorterer forespørgselsresultatsættet i enten stigende eller faldende rækkefølge, på én kolonne eller på flere kolonner på én gang.

Når SELECT-kommandoen bruges alene, returneres rækker i den rækkefølge, som lagringssystemet læser dem, hvilket ikke er en garanteret rækkefølge. Sortering er simpelthen at omarrangere disse rækker i en bestemt rækkefølge. Det kan udføres på både numeriske, streng- og datodatatyper.

MySQL ORDER EFTER Syntaks

Før man ser på eksempler, er det nyttigt at se, hvor klausulen sidder i en fuld SELECT-sætning.

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

HER

  • "SELECT erklæring... " er den almindelige udvælgelsesforespørgsel.
  • ” | “ repræsenterer alternativer.
  • "[HVOR-betingelse | GROUP BY `feltnavn(e)` HAR betingelse]" er den valgfri betingelse, der bruges til at filtrere forespørgselsresultatsættet.
  • "BEstil efter" udfører sortering af forespørgselsresultatsættet.
  • “[ASC | DESC]” er det nøgleord, der bruges til at sortere resultatsættet i enten stigende eller faldende rækkefølge. Bemærk, at ASC er standard.

Hvad er DESC- og ASC-nøgleord?

ASC og DESC er de to sorteringsretninger, som ORDER BY accepterer. Tabellen nedenfor sammenligner dem på tværs af de datatyper, du sorterer oftest.

DESC og ASC nøgleordASC er den korte form for stigende DESC og ASC nøgleordMySQL DESC er den korte form for faldende
Det bruges til at sortere forespørgselsresultaterne i en top til bund stil. Den bruges til at sortere forespørgselsresultaterne fra bund til top.
Når du arbejder med datodatatyper, vises den tidligste dato øverst på listen. Når man arbejder med datodatatyper, vises den seneste dato øverst på listen.
Når du arbejder med numeriske datatyper, vises de laveste værdier øverst på listen. Når du arbejder med numeriske datatyper, vises de højeste værdier øverst i forespørgselsresultatsættet.
Når du arbejder med strengdatatyper, sorteres forespørgselsresultatsættet fra dem, der starter med bogstavet A, der går op til bogstavet Z. Når du arbejder med strengdatatyper, sorteres forespørgselsresultatsættet fra dem, der starter med bogstavet Z, der går ned til bogstavet A.

Både SQL DESC- og ASC-nøgleordene bruges sammen med SELECT-sætningen og MySQL ORDER BY klausul.

DESC- og ASC-syntaks

SQL DESC sorteringsnøgleordet har følgende grundlæggende syntaks.

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

HER

  • VÆLG {feltnavn(e) | *} FRA tabelnavne er den sætning, der indeholder de felter og tabeller, hvorfra resultatsættet skal hentes.
  • [WHERE-tilstand] er valgfri, men kan bruges til at filtrere dataene i henhold til den givne betingelse.
  • ORDER BY feltnavn(e) er obligatorisk og navngiver det felt, hvor sorteringen udføres. MySQL Nøgleordet DESC angiver, at sorteringen er i faldende rækkefølge.
  • [GRÆNSE N] er valgfrit, men kan bruges til at begrænse antallet af rækker, der returneres fra forespørgselsresultatsættet.

Hvorfor bruge DESC og ASC i MySQL?

At kende syntaksen er kun halvdelen af ​​billedet. Grunden til, at ORDER BY eksisterer, er, at et resultatsæt, der er nemt for en database at producere, ikke altid er nemt for en person at læse.

Forestil dig, at du udskriver en betalingshistorik for et medlem af videobiblioteket, så receptionisten hurtigt kan besvare spørgsmål. Det er langt mere logisk at udskrive betalingerne i faldende kronologisk rækkefølge, startende med den seneste betaling og tilbage til den tidligste. DESC i SQL er det nøgleord, der er praktisk i en sådan situation, fordi listen kan sorteres efter betalingsdatoen.

Antag nu, at marketingafdelingen ønsker en liste over film efter kategori, så medlemmerne kan se, hvilke titler biblioteket har, før de lejer dem. Ved at sortere kategorinavne og filmtitler i stigende rækkefølge kan medlemmerne hurtigt slå information op, præcis som de ville gøre i et indeks. Nøgleordet ASC tjener dette formål.

Kort sagt, ORDER BY omdanner et råt resultatsæt til en rapport. Det valgte nøgleord afhænger af det spørgsmål, læseren stiller: hvad der skete senest opfordrer til DESC, mens hvor finder jeg denne vare opfordrer til ASC.

MySQL Eksempel på ORDER EFTER

Alle de følgende eksempler kører mod myflixdb-eksempeldatabasen. Start med tabellen med usorterede medlemmer, som returneres i standardrækkefølgen.

SELECT * FROM members;

Udførelse af ovenstående script i MySQL Workbench mod myflixdb giver os følgende resultater vist nedenfor.

medlemsnummer fulde_navne køn fødselsdato fysisk adresse postadresse kontaktnummer e-mail
1 Janet Jones Kvinde 21-07-1980 First Street Plot nr. 4 Privat taske +0759 253 542 janetjones@yagoo.cm
2 Janet Smith Jones Kvinde 23-06-1980 Melrose 123 NULL NULL jj@fstreet.com
3 Robert Phil Mand 12-07-1989 3rd Street 34 NULL 12345 rm@tstreet.com
4 Gloria Williams Kvinde 14-02-1984 2nd Street 23 NULL NULL NULL
5 Leonard Hofstadter Mand NULL Træstøtte NULL 845738767 NULL
6 Sheldon Cooper Mand NULL Træstøtte NULL 976736763 NULL
7 Rajesh Koothrappali Mand NULL Træstøtte NULL 938867763 NULL
8 Leslie Winkle Mand 14-02-1984 Træstøtte NULL 987636553 NULL
9 Howard Wolowitz Mand 24-08-1981 South Park PO Box 4563 987786553 NULL

Sortering i faldende rækkefølge med DESC

Antag, at marketingafdelingen ønsker medlemsoplysningerne sorteret i faldende rækkefølge efter fødselsdato. Dette hjælper teamet med at sende fødselsdagshilsner rettidigt. Listen genereres af nedenstående forespørgsel.

SELECT * FROM members ORDER BY date_of_birth DESC;

Udførelse af ovenstående script i MySQL Workbench mod myflixdb giver os følgende resultater vist nedenfor.

MySQL Resultat af forespørgslen ORDER BY DESC

Sortering i stigende rækkefølge med ASC

Den samme forespørgsel i stigende rækkefølge bytter blot om på nøgleordet.

SELECT * FROM members ORDER BY date_of_birth ASC;

MySQL Resultat af ORDER BY ASC-forespørgsel

Bemærk: NULL betyder ingen værdi overhovedet, hvilket ikke er det samme som nul eller en tom streng. Se i begge skærmbilleder, hvordan NULL-datoerne er grupperet sammen: MySQL behandler NULL som lavere end nogen anden værdi, så NULL-rækker vises først under ASC og sidst under DESC.

Sådan sorterer du efter flere kolonner i MySQL

Sortering på en enkelt kolonne besvarer simple spørgsmål. Rapporter kræver normalt et andet niveau af sortering, og ORDER BY accepterer en kommasepareret liste over felter til netop det formål.

Overvej følgende SQL-sorteringsscript, der viser alle medlemsposterne uden nogen eksplicit anvisning.

SELECT * FROM `members`;

Udførelse af ovenstående script giver følgende resultater vist nedenfor.

medlemsnummer fulde_navne køn fødselsdato fysisk adresse postadresse kontaktnummer e-mail
1 Janet Jones Kvinde 21-07-1980 First Street Plot nr. 4 Privat taske +0759 253 542 janetjones@yagoo.cm
2 Janet Smith Jones Kvinde 23-06-1980 Melrose 123 NULL NULL jj@fstreet.com
3 Robert Phil Mand 12-07-1989 3rd Street 34 NULL 12345 rm@tstreet.com
4 Gloria Williams Kvinde 14-02-1984 2nd Street 23 NULL NULL NULL
5 Leonard Hofstadter Mand NULL Træstøtte NULL 845738767 NULL
6 Sheldon Cooper Mand NULL Træstøtte NULL 976736763 NULL
7 Rajesh Koothrappali Mand NULL Træstøtte NULL 938867763 NULL
8 Leslie Winkle Mand 14-02-1984 Træstøtte NULL 987636553 NULL
9 Howard Wolowitz Mand 24-08-1981 South Park PO Box 4563 987786553 NULL

Sortering af en enkelt kolonne efter standardrækkefølge

Antag, at vi ønsker en liste, der sorterer forespørgselsresultatsættet efter kønsfeltet. Scriptet nedenfor gør det uden at angive en retning.

SELECT * FROM `members` ORDER BY `gender`;
medlemsnummer fulde_navne køn fødselsdato fysisk adresse postadresse kontaktnummer e-mail
1 Janet Jones Kvinde 21-07-1980 First Street Plot nr. 4 Privat taske +0759 253 542 janetjones@yagoo.cm
2 Janet Smith Jones Kvinde 23-06-1980 Melrose 123 NULL NULL jj@fstreet.com
4 Gloria Williams Kvinde 14-02-1984 2nd Street 23 NULL NULL NULL
3 Robert Phil Mand 12-07-1989 3rd Street 34 NULL 12345 rm@tstreet.com
5 Leonard Hofstadter Mand NULL Træstøtte NULL 845738767 NULL
6 Sheldon Cooper Mand NULL Træstøtte NULL 976736763 NULL
7 Rajesh Koothrappali Mand NULL Træstøtte NULL 938867763 NULL
8 Leslie Winkle Mand 14-02-1984 Træstøtte NULL 987636553 NULL
9 Howard Wolowitz Mand 24-08-1981 South Park PO Box 4563 987786553 NULL

"Kvindelige" medlemmer vises først, efterfulgt af "Mandlige" medlemmer. Dette skyldes, at når ORDER BY-klausulen bruges uden at angive ASC eller MySQL DESC-nøgleord, MySQL sorterer som standard forespørgselsresultatsættet i stigende rækkefølge.

Sortering af to kolonner i modsatte retninger

Lad os nu se på et eksempel, der udfører sortering ved hjælp af to kolonnerDen første kolonne er sorteres in stigende rækkefølge som standard, mens den anden kolonne er sorteres in faldende rækkefølge.

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

Udførelse af ovenstående script i MySQL Workbench mod myflixdb giver følgende resultater.

MySQL Eksempel på ORDER BY med to kolonner

Kønskolonnen blev som standard sorteret i stigende rækkefølge, mens fødselsdatokolonnen eksplicit blev sorteret i faldende rækkefølge. Hvert nøgleord af typen retning gælder kun for den kolonne, det følger efter.

Sådan kombinerer du ORDER BY med WHERE, LIMIT og GROUP BY

ORDER BY er sjældent den eneste klausul i en produktionsforespørgsel. MySQL evaluerer altid klausulerne i en fast rækkefølge, og kendskab til denne rækkefølge forklarer, hvorfor resultaterne ser ud, som de gør.

  1. FRA læser rækkerne fra tabellen.
  2. HVOR kasserer de rækker, der ikke opfylder betingelsen.
  3. GROUP BY kollapser de overlevende rækker i grupper, og HAVING filtrerer disse grupper.
  4. BESTIL BY sekvenser, uanset hvilke rækker der er tilbage.
  5. GRÆNSE udskærer det ønskede antal rækker fra den sorterede liste.

Fordi ORDER BY kører efter WHERE og GROUP BY, men før LIMIT, udtrykkes en forespørgsel som "de fem yngste medlemmer fra Woodcrest" i én sætning.

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

Den samme rækkefølge gælder for grupperede resultater. Aggregerede værdier produceret af samlede funktioner såsom COUNT kan sorteres, så den travleste kategori kommer øverst i rapporten.

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

Tip: ORDER BY kan sortere efter et kolonnealias, efter et udtryk eller endda efter kolonneposition, f.eks. ORDER BY 3. Sortering efter position er skrøbeligt, fordi indsættelse af en ny kolonne i SELECT-listen lydløst ændrer sorteringsnøglen. Navngiv kolonnen i stedet.

Ét præstationspunkt er værd at huske. Når den sorterede kolonne indeholder et indeks, MySQL kan læse rækkerne i indeksorden og springe sorteringen helt over. Uden et indeks gennemtvinger store tabeller en filsortering i hukommelsen eller på disken, hvilket er den sædvanlige årsag til, at en rapportforespørgsel bliver langsom.

Ofte Stillede Spørgsmål

Det kan det. Uden et indeks på den sorterede kolonne, MySQL udfører en filsortering over hele resultatsættet. Tilføjelse af et indeks, der matcher kolonnen ORDER BY og retningen, lader serveren læse rækker i rækkefølge og springe dette trin over.

Normalt ikke. Standardsorteringer som utf8mb4_0900_ai_ci skelner ikke mellem store og små bogstaver, så "apple" og "Apple" sorterer sammen. En binær eller _cs-sortering, eller ORDER BY BINARY kolonnenavn, producerer en sortering med forskel på store og små bogstaver, hvor store bogstaver kommer først.

Ja. ORDER BY RAND() blander resultatsættet, hvilket er praktisk til at vælge en tilfældig film eller et tilfældigt medlem. Den scorer hver række før sortering, så par den med LIMIT og undgå den på meget store tabeller.

Ja. AI-hjælpere indbygget i værktøjer som f.eks. MySQL Workbench Omdan forespørgsler i letforståeligt sprog til SELECT-sætninger med ORDER BY. Gennemgå altid den genererede sorteringskolonne og -retning, da en AI ikke kan vide, hvilken rækkefølge din rapport kræver.

Delvist. AI-drevne rådgivere læser langsomme forespørgselslogfiler og foreslår indeks, der fjerner filsorteringsoperationer. Forslagene kræver stadig menneskelig gennemgang, da hvert ekstra indeks forsinker indsættelser og opdateringer i den samme tabel.

Opsummer dette indlæg med: