NARUDŽI PO in MySQLASC i DESC upit s primjerom
⚡ Pametni sažetak
NARUDŽI PO in MySQL sortira skupove rezultata upita u uzlaznom ili silaznom redoslijedu pomoću ključnih riječi ASC i DESC. Odjeljci u nastavku objašnjavaju sintaksu, sortiranje u jednom i više stupaca, postavljanje NULL vrijednosti i radne primjere izvršene na primjeru baze podataka myflixdb.

Što je ORDER BY u MySQL?
MySQL NARUČITE PO je klauzula koja se koristi s SELECT upitom za sortiranje podataka na uredan način. MySQL Klauzula ORDER BY sortira skup rezultata upita uzlaznim ili silaznim redoslijedom, po jednom stupcu ili po nekoliko stupaca odjednom.
Kada se naredba SELECT koristi samostalno, retci se vraćaju redoslijedom kojim ih mehanizam za pohranu pročita, što nije zajamčeni redoslijed. Sortiranje je jednostavno preuređivanje tih redaka u određenom redoslijedu. Može se izvoditi na numeričkim, string i datumskim tipovima podataka podjednako.
MySQL ORDER BY sintaksa
Prije nego što pogledamo primjere, korisno je vidjeti gdje se klauzula nalazi unutar pune SELECT naredbe.
SELECT statement... [WHERE condition | GROUP BY `field_name(s)` HAVING condition] ORDER BY `field_name(s)` [ASC | DESC];
OVDJE
- "SELECT izraz...” je regularni upit za odabir.
- ” | “ predstavlja alternative.
- „[WHERE uvjet | GROUP BY `naziv_polja` HAVING uvjet]“ je neobavezni uvjet koji se koristi za filtriranje skupa rezultata upita.
- “NARUČI PO” vrši sortiranje skupa rezultata upita.
- “[ASC | DESC]” je ključna riječ koja se koristi za sortiranje skupa rezultata u uzlaznom ili silaznom redoslijedu. Imajte na umu da ASC je zadana vrijednost.
Što su DESC i ASC ključne riječi?
ASC i DESC su dva smjera sortiranja koja ORDER BY prihvaća. Tablica u nastavku uspoređuje ih za različite tipove podataka koje ćete najčešće sortirati.
ASC je skraćeni oblik za uzdizanje |
MySQL DESC je skraćenica za silazni |
|---|---|
| Koristi se za sortiranje rezultata upita odozgo prema dolje. | Koristi se za sortiranje rezultata upita od dna prema vrhu. |
| Kada radite na vrstama podataka datuma, najraniji datum prikazan je na vrhu popisa. | Prilikom rada s tipovima podataka o datumu, najnoviji datum prikazuje se na vrhu popisa. |
| Kada radite s numeričkim tipovima podataka, najniže vrijednosti prikazane su na vrhu popisa. | Prilikom rada s numeričkim tipovima podataka, najviše vrijednosti prikazuju se na vrhu skupa rezultata upita. |
| Kada radite s vrstama podataka niza, skup rezultata upita sortira se od onih koji počinju slovom A pa sve do slova Z. | Kada radite s tipovima podataka niza, skup rezultata upita sortira se od onih koji počinju slovom Z prema dolje do slova A. |
Ključne riječi SQL DESC i ASC koriste se zajedno s naredbom SELECT i MySQL ORDER BY klauzula.
DESC i ASC sintaksa
Ključna riječ sortiranja SQL DESC ima sljedeću osnovnu sintaksu.
SELECT {fieldName(s) | *} FROM tableName(s) [WHERE condition] ORDER BY fieldname(s) ASC | DESC [LIMIT N];
OVDJE
- SELECT {naziv(a) polja | *} IZ Naziv(a) tablice je naredba koja sadrži polja i tablicu(e) iz kojih treba dobiti skup rezultata.
- [WHERE stanje] nije obavezan, ali se može koristiti za filtriranje podataka prema danom uvjetu.
- ORDER BY naziv(i) polja je obavezno i imenuje polje na kojem se vrši sortiranje. MySQL Ključna riječ DESC određuje da se sortiranje vrši silaznim redoslijedom.
- [OGRANIČENJE N] nije obavezno, ali se može koristiti za ograničavanje broja redaka vraćenih iz skupa rezultata upita.
Zašto koristiti DESC i ASC u MySQL?
Poznavanje sintakse je samo pola slike. Razlog postojanja ORDER BY je taj što skup rezultata koji je lako generirati za bazu podataka nije uvijek lako pročitati.
Pretpostavimo da ispisujete povijest plaćanja za člana videoteke kako bi recepcija mogla brzo odgovoriti na upite. Mnogo je logičnije ispisati plaćanja u silaznom kronološkom redoslijedu, počevši od najnovijeg plaćanja pa sve do najranijeg. DESC u SQL-u je ključna riječ koja postaje korisna u takvoj situaciji, jer se popis može sortirati po datumu plaćanja.
Pretpostavimo da marketinški odjel želi popis filmova po kategorijama kako bi članovi mogli vidjeti koje naslove knjižnica ima prije posudbe. Sortiranje naziva kategorija i naslova filmova uzlaznim redoslijedom omogućuje članovima brzo pretraživanje informacija, točno kao što bi to učinili u indeksu. Ključna riječ ASC služi toj svrsi.
Ukratko, ORDER BY pretvara sirovi skup rezultata u izvješće. Ključna riječ koju odaberete ovisi o pitanju koje čitatelj postavlja: što se nedavno dogodilo poziva na DESC, dok gdje mogu pronaći ovu stavku poziva na ASC.
MySQL Primjer PORUKE PO
Svi primjeri koji slijede izvode se na bazi podataka myflixdb. Počnite s tablicom nesortiranih članova, koja se vraća u zadanom redoslijedu.
SELECT * FROM members;
Izvršavanje gornje skripte u MySQL Workbench u odnosu na myflixdb daje nam sljedeće rezultate prikazane u nastavku.
| članski broj | puna_imena | rod | datum_rođenja | fizička adresa | poštanska_adresa | broj_kontakta | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | ženski | 21-07-1980 | Prva ulica Parcela broj 4 | Privatna torba | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | ženski | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 3 | Robert Phil | Muški | 12-07-1989 | 3. ulica 34 | NULL | 12345 | rm@tstreet.com |
| 4 | Gloria Williams | ženski | 14-02-1984 | 2. ulica 23 | NULL | NULL | NULL |
| 5 | Leonard Hofstadter | Muški | NULL | Woodcrest | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | Muški | NULL | Woodcrest | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | Muški | NULL | Woodcrest | NULL | 938867763 | NULL |
| 8 | Leslie Winkle | Muški | 14-02-1984 | Woodcrest | NULL | 987636553 | NULL |
| 9 | Howarda Wolowitza | Muški | 24-08-1981 | Južni park | PO Box 4563 | 987786553 | NULL |
Sortiranje silaznim redoslijedom pomoću DESC-a
Pretpostavimo da marketinški odjel želi da se podaci o članovima poredaju od padajućeg redoslijeda datuma rođenja. To pomaže timu da pravovremeno pošalje rođendanske čestitke. Popis se generira upitom u nastavku.
SELECT * FROM members ORDER BY date_of_birth DESC;
Izvršavanje gornje skripte u MySQL Workbench u odnosu na myflixdb daje nam sljedeće rezultate prikazane u nastavku.
Sortiranje uzlaznim redoslijedom s ASC-om
Isti upit u uzlaznom redoslijedu jednostavno zamjenjuje ključnu riječ.
SELECT * FROM members ORDER BY date_of_birth ASC;
Bilješka: NULL znači da uopće nema vrijednosti, što nije isto što i nula ili prazan niz. Uočite na obje snimke zaslona kako su NULL datumi grupirani zajedno: MySQL tretira NULL kao nižu vrijednost od bilo koje druge, pa se NULL retci pojavljuju prvi pod ASC, a posljednji pod DESC.
Kako sortirati po više stupaca u MySQL
Sortiranje po jednom stupcu odgovara na jednostavna pitanja. Izvješća obično zahtijevaju drugu razinu sortiranja, a ORDER BY prihvaća popis polja odvojenih zarezima upravo u tu svrhu.
Razmotrite sljedeći SQL skript za sortiranje koji navodi sve zapise članova bez ikakvih eksplicitnih uputa.
SELECT * FROM `members`;
Izvršavanje gornje skripte daje sljedeće rezultate prikazane u nastavku.
| članski broj | puna_imena | rod | datum_rođenja | fizička adresa | poštanska_adresa | broj_kontakta | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | ženski | 21-07-1980 | Prva ulica Parcela broj 4 | Privatna torba | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | ženski | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 3 | Robert Phil | Muški | 12-07-1989 | 3. ulica 34 | NULL | 12345 | rm@tstreet.com |
| 4 | Gloria Williams | ženski | 14-02-1984 | 2. ulica 23 | NULL | NULL | NULL |
| 5 | Leonard Hofstadter | Muški | NULL | Woodcrest | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | Muški | NULL | Woodcrest | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | Muški | NULL | Woodcrest | NULL | 938867763 | NULL |
| 8 | Leslie Winkle | Muški | 14-02-1984 | Woodcrest | NULL | 987636553 | NULL |
| 9 | Howarda Wolowitza | Muški | 24-08-1981 | Južni park | PO Box 4563 | 987786553 | NULL |
Sortiranje jednog stupca prema zadanom redoslijedu
Pretpostavimo da želimo popis koji sortira skup rezultata upita pomoću polja spol. Skripta u nastavku to radi bez imenovanja smjera.
SELECT * FROM `members` ORDER BY `gender`;
| članski broj | puna_imena | rod | datum_rođenja | fizička adresa | poštanska_adresa | broj_kontakta | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | ženski | 21-07-1980 | Prva ulica Parcela broj 4 | Privatna torba | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | ženski | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 4 | Gloria Williams | ženski | 14-02-1984 | 2. ulica 23 | NULL | NULL | NULL |
| 3 | Robert Phil | Muški | 12-07-1989 | 3. ulica 34 | NULL | 12345 | rm@tstreet.com |
| 5 | Leonard Hofstadter | Muški | NULL | Woodcrest | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | Muški | NULL | Woodcrest | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | Muški | NULL | Woodcrest | NULL | 938867763 | NULL |
| 8 | Leslie Winkle | Muški | 14-02-1984 | Woodcrest | NULL | 987636553 | NULL |
| 9 | Howarda Wolowitza | Muški | 24-08-1981 | Južni park | PO Box 4563 | 987786553 | NULL |
Prvi se prikazuju „ženski“ članovi, a zatim „muški“ članovi. To je zato što se klauzula ORDER BY koristi bez navođenja ASC-a ili MySQL Ključna riječ DESC, MySQL sortira skup rezultata upita uzlaznim redoslijedom prema zadanim postavkama.
Sortiranje dvaju stupaca u suprotnim smjerovima
Pogledajmo sada primjer koji izvodi sortiranje pomoću dva stupcaPrvi stupac je sortirano in uzlazni poredak prema zadanim postavkama, dok je drugi stupac sortirano in silazni poredak.
SELECT * FROM `members` ORDER BY `gender`, `date_of_birth` DESC;
Izvršavanje gornje skripte u MySQL Workbench na myflixdb daje sljedeće rezultate.
Stupac spola je prema zadanim postavkama sortiran uzlaznim redoslijedom, dok je stupac datuma rođenja eksplicitno sortiran silaznim redoslijedom. Svaka ključna riječ smjera odnosi se samo na stupac koji slijedi.
Kako kombinirati ORDER BY s WHERE, LIMIT i GROUP BY
ORDER BY rijetko je jedina klauzula u produkcijskom upitu. MySQL uvijek evaluira klauze u fiksnom slijedu, a poznavanje tog slijeda objašnjava zašto rezultati izgledaju onako kako izgledaju.
- IZ čita retke iz tablice.
- GDJE odbacuje retke koji ne ispunjavaju uvjet.
- GROUP BY sažima preostale retke u grupe, a HAVING filtrira te grupe.
- NARUČITE PO nizovi bez obzira na preostale retke.
- OGRANIČAVA iz sortirane liste izrezuje traženi broj redaka.
Budući da se ORDER BY izvršava nakon WHERE i GROUP BY, ali prije LIMIT, upit poput „pet najmlađih članova iz Woodcresta“ izražava se jednom naredbom.
SELECT full_names, date_of_birth FROM members WHERE physical_address = 'Woodcrest' ORDER BY date_of_birth DESC LIMIT 5;
Isti redoslijed primjenjuje se na grupirane rezultate. Agregirane vrijednosti koje proizvodi agregatne funkcije kao što je COUNT može se sortirati tako da se najprometnija kategorija popne na vrh izvješća.
SELECT gender, COUNT(*) AS members_count FROM members GROUP BY gender ORDER BY members_count DESC;
Savjet: ORDER BY može sortirati po aliasu stupca, po izrazu ili čak po položaju stupca kao što je ORDER BY 3. Sortiranje po položaju je osjetljivo jer umetanje novog stupca u SELECT popis tiho mijenja ključ sortiranja. Umjesto toga, imenujte stupac.
Vrijedi zapamtiti jednu točku performansi. Kada sortirani stupac nosi indeks, MySQL može čitati retke po indeksnom redoslijedu i u potpunosti preskočiti sortiranje. Bez indeksa, velike tablice prisiljavaju sortiranje datoteka u memoriji ili na disku, što je uobičajeni razlog zašto upit izvješća postaje spor.

ASC je skraćeni oblik za uzdizanje
MySQL DESC je skraćenica za silazni

