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.

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.
ASC er den korte formen for stigende |
MySQL 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.
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;
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.
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.
- FRA leser radene fra tabellen.
- HVOR forkaster radene som ikke oppfyller betingelsen.
- GRUPPE AV kollapser de gjenværende radene i grupper, og HAVING filtrerer disse gruppene.
- REKKEFØLGE ETTER sekvenser uansett hvilke rader som er igjen.
- 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.

ASC er den korte formen for stigende
MySQL DESC er den korte formen for synkende

