TILAA sisään MySQLASC- ja DESC-kysely esimerkin kanssa
⚡ Älykäs yhteenveto
TILAA sisään MySQL lajittelee kyselyn tulosjoukot nousevaan tai laskevaan järjestykseen ASC- ja DESC-avainsanojen avulla. Alla olevissa osioissa selitetään syntaksi, yksi- ja monisarakkeinen lajittelu, NULL-sijoittelu ja käytetään esimerkkejä myflixdb-esimerkkitietokantaa vasten.

Mikä on ORDER BY in MySQL?
MySQL TILAUS on lauseke, jota käytetään SELECT-kyselyn kanssa tietojen lajittelemiseen järjestelmällisesti. MySQL ORDER BY -lauseke lajittelee kyselyn tulosjoukon joko nousevaan tai laskevaan järjestykseen, yhden sarakkeen tai useiden sarakkeiden mukaan kerralla.
Kun SELECT-komentoa käytetään yksinään, rivit palautetaan siinä järjestyksessä kuin tallennusmoottori sattuu ne lukemaan, mikä ei ole taattu järjestys. Lajittelu on yksinkertaisesti rivien järjestämistä uudelleen tiettyyn järjestykseen. Se voidaan suorittaa sekä numeerisille että merkkijono- ja päivämäärätietotyypeille.
MySQL ORDER BY -syntaksi
Ennen esimerkkien tarkastelua on hyödyllistä nähdä, missä lauseke sijaitsee kokonaisen SELECT-lausekkeen sisällä.
SELECT statement... [WHERE condition | GROUP BY `field_name(s)` HAVING condition] ORDER BY `field_name(s)` [ASC | DESC];
TÄÄLTÄ
- "SELECT-lause... " on tavallinen valintakysely.
- ” | " edustaa vaihtoehtoja.
- “[WHERE-ehto | GROUP BY `kentän_nimi(et)` ON ehto]” on valinnainen ehto, jota käytetään kyselyn tulosjoukon suodattamiseen.
- "TILAUS" suorittaa kyselyn tulosjoukon lajittelun.
- "[ASC | DESC]” on avainsana, jota käytetään tulosten lajittelemiseen joko nousevaan tai laskevaan järjestykseen. Huomaa, että ASC on oletusarvo.
Mitä ovat DESC- ja ASC-avainsanat?
ASC ja DESC ovat kaksi lajittelusuuntaa, jotka ORDER BY hyväksyy. Alla oleva taulukko vertailee niitä useimmin lajittelemiesi tietotyyppien välillä.
ASC on nousevan lyhenne |
MySQL DESC on laskeva lyhenne |
|---|---|
| Sitä käytetään lajittelemaan kyselyn tulokset ylhäältä alas -tyyliin. | Sitä käytetään kyselytulosten lajittelemiseen alhaalta ylös -tyyliin. |
| Kun käsittelet päivämäärätietotyyppejä, aikaisin päivämäärä näkyy luettelon yläosassa. | Päivämäärätietotyyppien parissa työskenneltäessä viimeisin päivämäärä näkyy luettelon yläosassa. |
| Kun työskentelet numeeristen tietotyyppien kanssa, pienimmät arvot näkyvät luettelon yläosassa. | Numeerisia tietotyyppejä käytettäessä suurimmat arvot näkyvät kyselyn tulosjoukon yläosassa. |
| Kun työskentelet merkkijonotietotyyppien kanssa, kyselyn tulosjoukko lajitellaan A-kirjaimella alkavista kirjaimeen Z asti. | Kun työskentelet merkkijonotietotyyppien kanssa, kyselyn tulosjoukko lajitellaan Z-kirjaimella alkavista tuloksista A-kirjaimeen. |
Sekä SQL DESC- että ASC-avainsanoja käytetään yhdessä SELECT-lausekkeen ja MySQL TILAA lausekkeen mukaan.
DESC- ja ASC-syntaksi
SQL DESC -lajitteluavainsanalla on seuraava perussyntaksi.
SELECT {fieldName(s) | *} FROM tableName(s) [WHERE condition] ORDER BY fieldname(s) ASC | DESC [LIMIT N];
TÄÄLTÄ
- SELECT {fieldName(s) | *} FROM taulukon nimet on lauseke, joka sisältää kentät ja taulukot, joista tulosjoukko haetaan.
- [WHERE ehto] on valinnainen, mutta sitä voidaan käyttää tietojen suodattamiseen tietyn ehdon mukaan.
- ORDER BY -kentän nimi(et) on pakollinen ja nimeää kentän, jonka perusteella lajittelu suoritetaan. MySQL DESC-avainsana määrittää, että lajittelu tapahtuu laskevaan järjestykseen.
- [RAJA N] on valinnainen, mutta sitä voidaan käyttää kyselyn tulosjoukosta palautettavien rivien määrän rajoittamiseen.
Miksi käyttää DESC:tä ja ASC:tä MySQL?
Syntaksin tunteminen on vasta puolet kokonaisuudesta. ORDER BY -lausekkeen olemassaolon syy on se, että tietokannan helposti tuottaman tulosjoukon lukeminen ei ole aina helppoa.
Oletetaan, että tulostat videokirjaston jäsenen maksuhistorian, jotta vastaanotto voi vastata tiedusteluihin nopeasti. On paljon loogisempaa tulostaa maksut laskevassa aikajärjestyksessä alkaen viimeisimmästä maksusta ja edeten taaksepäin vanhimpaan. SQL:n DESC-avainsana on kätevä tällaisessa tilanteessa, koska lista voidaan lajitella maksupäivämäärän mukaan.
Oletetaan nyt, että markkinointiosasto haluaa listan elokuvista luokittain, jotta jäsenet voivat nähdä, mitä nimikkeitä kirjastossa on ennen vuokraamista. Luokkien nimien ja elokuvien nimien lajittelu nousevaan järjestykseen antaa jäsenille mahdollisuuden etsiä tietoja nopeasti, aivan kuten he tekisivät hakemistosta. ASC-avainsana palvelee tätä tarkoitusta.
Lyhyesti sanottuna ORDER BY muuttaa raakatulosjoukon raportiksi. Valitsemasi avainsana riippuu lukijan esittämästä kysymyksestä: mitä tapahtui viimeksi vaatii DESC:tä, samalla kun mistä löydän tämän esineen vaatii ASC:tä.
MySQL JÄRJESTÄ MUKAAN -esimerkki
Kaikki seuraavat esimerkit suoritetaan myflixdb-esimerkkitietokantaa vasten. Aloita lajittelemattomalla jäsentaulukolla, joka palautetaan oletusjärjestyksessään.
SELECT * FROM members;
Suoritetaan yllä oleva komentosarja MySQL Workbenchin vertailu myflixdb-tiedostoa vastaan antaa meille seuraavat tulokset.
| jäsennumero | full_names | sukupuoli | syntymäaika | fyysinen osoite | postiosoite | yhteyshenkilön_numero | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Nainen | 21-07-1980 | First Street -tontti nro 4 | Yksityinen laukku | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Nainen | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 3 | Robert Phil | Mies | 12-07-1989 | 3rd Street 34 | NULL | 12345 | rm@tstreet.com |
| 4 | Gloria Williams | Nainen | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
| 5 | Leonard Hofstadter | Mies | NULL | Woodcrest | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | Mies | NULL | Woodcrest | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | Mies | NULL | Woodcrest | NULL | 938867763 | NULL |
| 8 | Leslie Winkle | Mies | 14-02-1984 | Woodcrest | NULL | 987636553 | NULL |
| 9 | Howard Wolowitz | Mies | 24-08-1981 | Eteläpuisto | PO Box 4563 | 987786553 | NULL |
Lajittelu laskevaan järjestykseen DESC:n avulla
Oletetaan, että markkinointiosasto haluaa jäsenten tiedot syntymäajan mukaiseen laskevaan järjestykseen. Tämä auttaa tiimiä lähettämään syntymäpäiväonnittelut ajoissa. Luettelon luo alla oleva kysely.
SELECT * FROM members ORDER BY date_of_birth DESC;
Suoritetaan yllä oleva komentosarja MySQL Workbenchin vertailu myflixdb-tiedostoa vastaan antaa meille seuraavat tulokset.
Lajittelu nousevaan järjestykseen ASC:n avulla
Sama kysely nousevassa järjestyksessä yksinkertaisesti vaihtaa avainsanaa.
SELECT * FROM members ORDER BY date_of_birth ASC;
Huomautus: NULL tarkoittaa, ettei arvoa ole lainkaan, mikä ei ole sama asia kuin nolla tai tyhjä merkkijono. Tarkkaile molemmissa kuvakaappauksissa, miten NULL-päivämäärät on ryhmitelty yhteen: MySQL käsittelee NULL-arvoa pienempinä kuin mitään muuta arvoa, joten NULL-rivit näkyvät ensimmäisenä ASC-arvon alla ja viimeisenä DESC-arvon alla.
Kuinka lajitella useiden sarakkeiden mukaan MySQL
Yhden sarakkeen mukaan lajittelu vastaa yksinkertaisiin kysymyksiin. Raportit tarvitsevat yleensä toisen järjestystason, ja ORDER BY hyväksyy pilkulla erotetun kenttäluettelon juuri tähän tarkoitukseen.
Tarkastellaan seuraavaa SQL-lajitteluskriptiä, joka listaa kaikki jäsentietueet ilman mitään eksplisiittistä suuntaa.
SELECT * FROM `members`;
Yllä olevan skriptin suorittaminen antaa seuraavat alla näkyvät tulokset.
| jäsennumero | full_names | sukupuoli | syntymäaika | fyysinen osoite | postiosoite | yhteyshenkilön_numero | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Nainen | 21-07-1980 | First Street -tontti nro 4 | Yksityinen laukku | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Nainen | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 3 | Robert Phil | Mies | 12-07-1989 | 3rd Street 34 | NULL | 12345 | rm@tstreet.com |
| 4 | Gloria Williams | Nainen | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
| 5 | Leonard Hofstadter | Mies | NULL | Woodcrest | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | Mies | NULL | Woodcrest | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | Mies | NULL | Woodcrest | NULL | 938867763 | NULL |
| 8 | Leslie Winkle | Mies | 14-02-1984 | Woodcrest | NULL | 987636553 | NULL |
| 9 | Howard Wolowitz | Mies | 24-08-1981 | Eteläpuisto | PO Box 4563 | 987786553 | NULL |
Yhden sarakkeen lajittelu oletusjärjestyksen mukaan
Oletetaan, että haluamme listan, joka lajittelee kyselyn tulosjoukon sukupuoli-kentän perusteella. Alla oleva skripti tekee sen nimeämättä suuntaa.
SELECT * FROM `members` ORDER BY `gender`;
| jäsennumero | full_names | sukupuoli | syntymäaika | fyysinen osoite | postiosoite | yhteyshenkilön_numero | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Nainen | 21-07-1980 | First Street -tontti nro 4 | Yksityinen laukku | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Nainen | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 4 | Gloria Williams | Nainen | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
| 3 | Robert Phil | Mies | 12-07-1989 | 3rd Street 34 | NULL | 12345 | rm@tstreet.com |
| 5 | Leonard Hofstadter | Mies | NULL | Woodcrest | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | Mies | NULL | Woodcrest | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | Mies | NULL | Woodcrest | NULL | 938867763 | NULL |
| 8 | Leslie Winkle | Mies | 14-02-1984 | Woodcrest | NULL | 987636553 | NULL |
| 9 | Howard Wolowitz | Mies | 24-08-1981 | Eteläpuisto | PO Box 4563 | 987786553 | NULL |
”Naispuoliset” jäsenet näytetään ensin ja sen jälkeen ”miespuoliset” jäsenet. Tämä johtuu siitä, että kun ORDER BY -lauseketta käytetään määrittämättä ASC:tä tai MySQL DESC-avainsana, MySQL lajittelee kyselyn tulosjoukon oletusarvoisesti nousevaan järjestykseen.
Kahden sarakkeen lajittelu vastakkaisiin suuntiin
Katsotaanpa nyt esimerkkiä, joka suorittaa lajittelu kahdella sarakkeellaEnsimmäinen sarake on lajiteltu in nousevassa järjestyksessä oletusarvoisesti, kun taas toinen sarake on lajiteltu in laskeva järjestys.
SELECT * FROM `members` ORDER BY `gender`, `date_of_birth` DESC;
Suoritetaan yllä oleva komentosarja MySQL Workbenchin vertailu myflixdb-tiedostoa vastaan antaa seuraavat tulokset.
Sukupuoli-sarake lajiteltiin oletusarvoisesti nousevaan järjestykseen, kun taas syntymäaika-sarake lajiteltiin nimenomaisesti laskevaan järjestykseen. Kukin suunta-avainsana koskee vain sitä seuraavaa saraketta.
ORDER BY -funktion yhdistäminen WHERE-, LIMIT- ja GROUP BY -funktioiden kanssa
ORDER BY on harvoin ainoa lauseke tuotantokyselyssä. MySQL laskee lausekkeet aina kiinteässä järjestyksessä, ja tämän järjestyksen tunteminen selittää, miksi tulokset näyttävät siltä kuin ne näyttävät.
- FROM lukee rivit taulukosta.
- MISTÄ hylkää rivit, jotka eivät täytä ehtoa.
- GROUP BY kutistaa jäljellä olevat rivit ryhmiin ja HAVING suodattaa nämä ryhmät.
- TILAUS sekvenssejä mitä tahansa rivejä jäljellä.
- RAJOITA leikkaa pyydetyn määrän rivejä pois lajitellulta listalta.
Koska ORDER BY suoritetaan WHERE- ja GROUP BY -lausekkeiden jälkeen, mutta ennen LIMIT-lausetta, kysely, kuten ”viisi nuorinta jäsentä Woodcrestistä”, ilmaistaan yhdessä lausekkeessa.
SELECT full_names, date_of_birth FROM members WHERE physical_address = 'Woodcrest' ORDER BY date_of_birth DESC LIMIT 5;
Sama järjestys koskee ryhmiteltyjä tuloksia. Yhdistelmäarvot, jotka tuottavat kokonaisfunktiot kuten COUNT, voidaan lajitella, jolloin vilkkain luokka nousee raportin yläosaan.
SELECT gender, COUNT(*) AS members_count FROM members GROUP BY gender ORDER BY members_count DESC;
Vinkki: ORDER BY voi lajitella sarakealiaksen, lausekkeen tai jopa sarakesijainnin, kuten ORDER BY 3, mukaan. Sijainnin mukaan lajittelu on hankalaa, koska uuden sarakkeen lisääminen SELECT-luetteloon muuttaa lajitteluavainta hiljaa. Nimeä sarake sen sijaan.
Yksi suorituskykyyn liittyvä seikka on syytä muistaa. Kun lajitellulla sarakkeella on indeksi, MySQL voi lukea rivit indeksijärjestyksessä ja ohittaa lajittelun kokonaan. Ilman indeksiä suuret taulukot pakottavat lajittelun muistissa tai levyllä, mikä on tavallinen syy raporttikyselyn hitauteen.

ASC on nousevan lyhenne
MySQL DESC on laskeva lyhenne

