BESTILL INNEN MySQLASC- og DESC-spørring med eksempel

⚡ Smart oppsummering

BESTILL INNEN MySQL sorterer spørreresultatsett i stigende eller synkende rekkefølge ved hjelp av nøkkelordene ASC og DESC. Avsnittene nedenfor forklarer syntaksen, sortering med én og flere kolonner, NULL-plassering og utarbeidede eksempler utført mot eksempeldatabasen myflixdb.

  • 🔠 Standard oppførsel: ORDER BY sorterer i stigende rekkefølge når verken ASC eller DESC er oppgitt, så ASC er valgfritt i de fleste setninger.
  • ⬆️ ASC-nøkkelord: ASC arrangerer tall fra lavest til høyest, strenger fra A til Å, og datoer fra tidligst til nyeste.
  • ⬇️ DESC-nøkkelord: DESC reverserer den sekvensen, som passer til nylige-første betalingshistorikk og synkende fødselsdatolister.
  • 🧮 Sortering med flere kolonner: Kolonnerekkefølgen er viktig. ORDER BY gender, date_of_birth DESC sorterer kjønn stigende først, deretter datoer synkende innenfor hver gruppe.
  • 🔎 Klausulkombinasjon: WHERE filtrerer rader, GROUP BY aggregerer dem, ORDER BY sekvenserer resultatet, og LIMIT trimmer det.
  • ⚙️ Ytelsesfaktor: En indeks på den sorterte kolonnen tillater MySQL for å unngå en filsorteringsoperasjon på store tabeller.

BESTILL INNEN MySQL

Hva er ORDER BY in MySQL?

MySQL REKKEFØLGE ETTER er en klausul som brukes med SELECT-spørringen for å sortere data på en ordnet måte. MySQL ORDER BY-klausulen sorterer spørreresultatsettet i enten stigende eller synkende rekkefølge, på én kolonne eller på flere kolonner samtidig.

Når SELECT-kommandoen brukes alene, returneres rader i den rekkefølgen lagringsmotoren leser dem, noe som ikke er en garantert rekkefølge. Sortering er ganske enkelt å omorganisere disse radene i en spesifisert rekkefølge. Det kan utføres på både numeriske datatyper, strengdata og datodatatyper.

MySQL ORDER BY-syntaks

Før du ser på eksempler, er det nyttig å se hvor klausulen sitter i en fullstendig SELECT-setning.

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

HER

  • "SELECT-setning... " er den vanlige utvalgsspørringen.
  • "| " representerer alternativer.
  • «[HVOR-betingelse | GROUP BY `feltnavn(e)` HAR betingelse]» er den valgfrie betingelsen som brukes til å filtrere spørreresultatsettet.
  • "BESTILL ETTER" utfører sorteringen av spørreresultatsettet.
  • "[ASC | DESC]” er nøkkelordet som brukes til å sortere resultatsettet i enten stigende eller synkende rekkefølge. Merk at ASC er standard.

Hva er DESC- og ASC-nøkkelord?

ASC og DESC er de to sorteringsretningene som ORDER BY godtar. Tabellen nedenfor sammenligner dem på tvers av datatypene du sorterer oftest.

DESC og ASC nøkkelordASC er den korte formen for stigende DESC og ASC nøkkelordMySQL DESC er den korte formen for synkende
Den brukes til å sortere søkeresultatene i en topp til bunn-stil. Den brukes til å sortere spørreresultatene i en bunn-til-topp-stil.
Når du arbeider med datodatatyper, vises den tidligste datoen øverst på listen. Når du arbeider med datodatatyper, vises den nyeste datoen øverst i listen.
Når du arbeider med numeriske datatyper, vises de laveste verdiene øverst på listen. Når du arbeider med numeriske datatyper, vises de høyeste verdiene øverst i spørreresultatsettet.
Når du arbeider med strengdatatyper, sorteres søkeresultatsettet fra de som begynner med bokstaven A som går opp til bokstaven Z. Når du arbeider med strengdatatyper, sorteres søkeresultatsettet fra de som begynner med bokstaven Z og går ned til bokstaven A.

Både SQL DESC- og ASC-nøkkelordene brukes sammen med SELECT-setningen og MySQL ORDER BY klausul.

DESC- og ASC-syntaks

SQL DESC sorteringsnøkkelordet har følgende grunnleggende syntaks.

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

HER

  • VELG {feltnavn(e) | *} FRA tabellnavn(e) er setningen som inneholder feltene og tabellen(e) som resultatsettet skal hentes fra.
  • [WHERE-tilstand] er valgfritt, men kan brukes til å filtrere dataene i henhold til den gitte betingelsen.
  • ORDER BY-feltnavn er obligatorisk og navngir feltet som sorteringen utføres på. MySQL Nøkkelordet DESC angir at sorteringen er i synkende rekkefølge.
  • [GRENSE N] er valgfritt, men kan brukes til å begrense antall rader som returneres fra spørreresultatsettet.

Hvorfor bruke DESC og ASC i MySQL?

Det å kjenne syntaksen er bare halve bildet. Grunnen til at ORDER BY eksisterer, er at et resultatsett som er enkelt for en database å produsere, ikke alltid er lett for en person å lese.

La oss si at du skriver ut en betalingshistorikk for et medlem av videobiblioteket, slik at resepsjonisten raskt kan svare på spørsmål. Det er mye mer logisk å skrive ut betalingene i synkende kronologisk rekkefølge, med start fra den siste betalingen og tilbake til den tidligste. DESC i SQL er nøkkelordet som blir nyttig i en slik situasjon, fordi listen kan sorteres etter betalingsdato.

La oss nå si at markedsavdelingen ønsker en liste over filmer etter kategori, slik at medlemmene kan se hvilke titler biblioteket har før de leier ut. Ved å sortere kategorinavnene og filmtitlene i stigende rekkefølge kan medlemmene raskt slå opp informasjon, akkurat som de ville gjort i en indeks. Nøkkelordet ASC tjener dette formålet.

Kort sagt, ORDER BY gjør et rått resultatsett om til en rapport. Nøkkelordet du velger avhenger av spørsmålet leseren stiller: hva som skjedde sist etterlyser DESC, mens hvor finner jeg denne varen etterlyser ASC.

MySQL Eksempel på ORDER ETTER

Alle eksemplene som følger kjører mot eksempeldatabasen myflixdb. Start med tabellen med usorterte medlemmer, som returneres i standardrekkefølgen.

SELECT * FROM members;

Utfører skriptet ovenfor i MySQL Arbeidsbenk mot myflixdb gir oss følgende resultater vist nedenfor.

medlemsnummer fulle_navn kjønn fødselsdato fysisk_adresse postadresse kontaktnummer emalje
1 Janet Jones Hunn 21-07-1980 First Street tomt nr. 4 Privat bag 0759 253 542 janetjones@yagoo.cm
2 Janet Smith Jones Hunn 23-06-1980 Melrose 123 NULL NULL jj@fstreet.com
3 Robert Phil mann 12-07-1989 3rd Street 34 NULL 12345 rm@tstreet.com
4 Gloria Williams Hunn 14-02-1984 2nd Street 23 NULL NULL NULL
5 Leonard Hofstadter mann NULL Woodcrest NULL 845738767 NULL
6 Sheldon Cooper mann NULL Woodcrest NULL 976736763 NULL
7 Rajesh Koothrappali mann NULL Woodcrest NULL 938867763 NULL
8 Leslie Winkle mann 14-02-1984 Woodcrest NULL 987636553 NULL
9 Howard Wolowitz mann 24-08-1981 Sør Park PO Box 4563 987786553 NULL

Sortering i synkende rekkefølge med DESC

Anta at markedsavdelingen ønsker at medlemsdetaljene skal være ordnet i synkende rekkefølge etter fødselsdato. Dette hjelper teamet med å sende bursdagshilsener i tide. Listen produseres av spørringen nedenfor.

SELECT * FROM members ORDER BY date_of_birth DESC;

Utfører skriptet ovenfor i MySQL Arbeidsbenk mot myflixdb gir oss følgende resultater vist nedenfor.

MySQL Resultat av ORDER BY DESC-spørringen

Sortering i stigende rekkefølge med ASC

Den samme spørringen i stigende rekkefølge bytter bare om nøkkelordet.

SELECT * FROM members ORDER BY date_of_birth ASC;

MySQL ORDER BY ASC-spørringsresultat

OBS: NULL betyr ingen verdi i det hele tatt, som ikke er det samme som null eller en tom streng. Observer i begge skjermbildene hvordan NULL-datoene er gruppert sammen: MySQL behandler NULL som lavere enn noen annen verdi, så NULL-rader vises først under ASC og sist under DESC.

Slik sorterer du etter flere kolonner i MySQL

Sortering på én enkelt kolonne besvarer enkle spørsmål. Rapporter trenger vanligvis et andre nivå av sortering, og ORDER BY godtar en kommaseparert liste over felt for nettopp det formålet.

Tenk deg følgende SQL-sorteringsskript som viser alle medlemspostene uten noen eksplisitt instruksjon.

SELECT * FROM `members`;

Utførelse av skriptet ovenfor gir følgende resultater vist nedenfor.

medlemsnummer fulle_navn kjønn fødselsdato fysisk_adresse postadresse kontaktnummer emalje
1 Janet Jones Hunn 21-07-1980 First Street tomt nr. 4 Privat bag 0759 253 542 janetjones@yagoo.cm
2 Janet Smith Jones Hunn 23-06-1980 Melrose 123 NULL NULL jj@fstreet.com
3 Robert Phil mann 12-07-1989 3rd Street 34 NULL 12345 rm@tstreet.com
4 Gloria Williams Hunn 14-02-1984 2nd Street 23 NULL NULL NULL
5 Leonard Hofstadter mann NULL Woodcrest NULL 845738767 NULL
6 Sheldon Cooper mann NULL Woodcrest NULL 976736763 NULL
7 Rajesh Koothrappali mann NULL Woodcrest NULL 938867763 NULL
8 Leslie Winkle mann 14-02-1984 Woodcrest NULL 987636553 NULL
9 Howard Wolowitz mann 24-08-1981 Sør Park PO Box 4563 987786553 NULL

Sortere en enkelt kolonne etter standardrekkefølge

Anta at vi ønsker en liste som sorterer søkeresultatsettet etter kjønnsfeltet. Skriptet nedenfor gjør det uten å navngi en retning.

SELECT * FROM `members` ORDER BY `gender`;
medlemsnummer fulle_navn kjønn fødselsdato fysisk_adresse postadresse kontaktnummer emalje
1 Janet Jones Hunn 21-07-1980 First Street tomt nr. 4 Privat bag 0759 253 542 janetjones@yagoo.cm
2 Janet Smith Jones Hunn 23-06-1980 Melrose 123 NULL NULL jj@fstreet.com
4 Gloria Williams Hunn 14-02-1984 2nd Street 23 NULL NULL NULL
3 Robert Phil mann 12-07-1989 3rd Street 34 NULL 12345 rm@tstreet.com
5 Leonard Hofstadter mann NULL Woodcrest NULL 845738767 NULL
6 Sheldon Cooper mann NULL Woodcrest NULL 976736763 NULL
7 Rajesh Koothrappali mann NULL Woodcrest NULL 938867763 NULL
8 Leslie Winkle mann 14-02-1984 Woodcrest NULL 987636553 NULL
9 Howard Wolowitz mann 24-08-1981 Sør Park PO Box 4563 987786553 NULL

«Kvinnelige» medlemmer vises først, etterfulgt av «Mannlige» medlemmer. Dette er fordi når ORDER BY-klausulen brukes uten å spesifisere ASC- eller MySQL DESC-nøkkelord, MySQL sorterer spørreresultatsettet i stigende rekkefølge som standard.

Sortere to kolonner i motsatte retninger

La oss nå se på et eksempel som utfører sortering ved hjelp av to kolonnerDen første kolonnen er sortert in stigende rekkefølge som standard, mens den andre kolonnen er sortert in Synkende rekkefølge.

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

Utfører skriptet ovenfor i MySQL Arbeidsbenk mot myflixdb gir følgende resultater.

MySQL Eksempel på ORDER BY med to kolonner

Kjønnskolonnen ble sortert i stigende rekkefølge som standard, mens fødselsdatokolonnen ble sortert i synkende rekkefølge eksplisitt. Hvert retningsnøkkelord gjelder bare for kolonnen det følger etter.

Slik kombinerer du ORDER BY med WHERE, LIMIT og GROUP BY

ORDER BY er sjelden den eneste klausulen i en produksjonsspørring. MySQL evaluerer alltid leddsetningene i en fast rekkefølge, og det å kjenne til denne rekkefølgen forklarer hvorfor resultatene ser ut som de gjør.

  1. FRA leser radene fra tabellen.
  2. HVOR forkaster radene som ikke oppfyller betingelsen.
  3. GRUPPE AV kollapser de gjenværende radene i grupper, og HAVING filtrerer disse gruppene.
  4. REKKEFØLGE ETTER sekvenser uansett hvilke rader som er igjen.
  5. BEGRENSE skjærer det forespurte antallet rader fra den sorterte listen.

Fordi ORDER BY kjører etter WHERE og GROUP BY, men før LIMIT, uttrykkes en spørring som «de fem yngste medlemmene fra Woodcrest» i én setning.

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

Samme rekkefølge gjelder for grupperte resultater. Aggregerte verdier produsert av aggregerte funksjoner som for eksempel COUNT kan sorteres, slik at den travleste kategorien kommer øverst i rapporten.

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

Tips: ORDER BY kan sortere etter et kolonnealias, etter et uttrykk, eller til og med etter kolonneposisjon, for eksempel ORDER BY 3. Sortering etter posisjon er sårbart, fordi det å sette inn en ny kolonne i SELECT-listen endrer sorteringsnøkkelen i stillhet. Navngi kolonnen i stedet.

Ett ytelsespunkt er verdt å huske på. Når den sorterte kolonnen har en indeks, MySQL kan lese radene i indeksrekkefølge og hoppe over sorteringen helt. Uten en indeks tvinger store tabeller frem en filsortering i minnet eller på disken, som er den vanlige grunnen til at en rapportforespørsel blir treg.

Spørsmål og svar

Det kan det. Uten en indeks på den sorterte kolonnen, MySQL utfører en filsortering over hele resultatsettet. Hvis du legger til en indeks som samsvarer med ORDER BY-kolonnen og -retningen, kan serveren lese rader i rekkefølge og hoppe over det trinnet.

Vanligvis ikke. Standard sorteringer som utf8mb4_0900_ai_ci skiller ikke mellom store og små bokstaver, så «apple» og «Apple» sorterer sammen. En binær eller _cs-sortering, eller ORDER BY BINARY kolonnenavn, produserer rekkefølge der store bokstaver skiller mellom store og små bokstaver.

Ja. ORDER BY RAND() omstokker resultatsettet, noe som er nyttig for å velge en tilfeldig film eller et tilfeldig medlem. Den scorer hver rad før sortering, så par den med LIMIT og unngå den på veldig store tabeller.

Ja. AI-hjelpere innebygd i verktøy som MySQL Workbench Gjør forespørsler i enkeltspråk om til SELECT-setninger med ORDER BY. Sjekk alltid den genererte sorteringskolonnen og -retningen, fordi en AI ikke kan vite hvilken rekkefølge rapporten din krever.

Delvis. AI-drevne rådgivere leser trege spørrelogger og foreslår indekser som fjerner filsorteringsoperasjoner. Forslagene trenger fortsatt menneskelig gjennomgang, siden hver ekstra indeks forsinker innsettinger og oppdateringer på samme tabell.

Oppsummer dette innlegget med: