Red po sintaksi. Sortiranje podataka u SQL (ORDER BY). Poredaj odabrane podatke

Bilješka:
Svi članci u trenutnoj kategoriji SQL vodiča koriste primjere i probleme koji se temelje na bazi podataka za obuku.

Prema prvom normalnom obliku relacijskih baza podataka, redoslijed redaka u tablicama ne bi trebao biti bitan. Ali u praksi je često potrebno sortirati informacije prije nego što se prikažu na ekranu.

Klauzula ORDER BY odgovorna je za redoslijed redaka učitanih u SQL upitu. Nalazi se na samom kraju zahtjeva:

IZABERI<Перечень столбцов>IZ<Перечень таблиц>NARUČI PO<Условие сортировки>

Uvjet sortiranja određuje stupce po kojima će rezultirajući retci tablice biti sortirani:

REDAJ PO col1, col2

Redoslijed sortiranja u SQL-u

Postoje 2 opcije sortiranja: uzlazno i ​​silazno. Da biste naznačili vrstu sortiranja u upitu, nakon naziva stupca označite ključna riječ ASC (uzlazni) ili DESC (silazni), koji definiraju uzlazni odnosno silazni redoslijed. Zadana vrsta je ASC:

ORDER BY col1 -- sljedeća klauzula će biti ekvivalentna ORDER BY col1 ACS

Također je moguće navesti drugačiji redoslijed za različite stupce:

REDOSLIJED PREMA stupcu1 DESC, stupcu2 ASC

Za konsolidaciju gradiva riješite zadatak na obrazovnoj bazi podataka:

Morate dobiti popis ID-ova zaposlenika, poredanih po grupama uzlaznim redoslijedom i datumom zapošljavanja, od najnovijeg do najstarijeg.

SELECT id, Group, Hire_date FROM Employees ORDER BY Group, Hire_date DESC

Dopunimo sintaksu naredbe SELECT s klauzulom ORDER BY (okomita traka znači da mora biti odabrana jedna od opcija):

ODABERITE [NazivTablice.]NazivStupca[, [NazivTablice.]NazivStupca2 ...] IZ [[NazivBazePodataka.]NazivSheme.]NazivTabliceNazivStupca [, [NazivTablice.]NazivStupca2 ...]]

  • Naprijed >

Ako su vam materijali s office-menu.ru pomogli, podržite projekt kako bih ga mogao dalje razvijati.

Klauzula ORDER BY u Accessu sortira zapise vraćene upitom uzlaznim ili silaznim redoslijedom vrijednosti navedenih polja.

Sintaksa

IZABERI lista_polja
IZ stol
GDJE uvjet_odabranja
[, polje2 ][, ...]]]

SELECT izjava koji sadrži klauzulu ORDER BY uključuje sljedeće elemente:

Bilješke

Klauzula ORDER BY nije obavezna. Trebalo bi ga koristiti kada trebate prikazati podatke u sortiranom obliku.

Zadani redoslijed sortiranja je uzlazni (A do Z, 0 do 9). Dva primjera u nastavku prikazuju sortiranje imena zaposlenika po prezimenu.

SELECT Prezime, Ime
OD Zaposlenika
ORDER BY Prezime;
SELECT Prezime, Ime
OD Zaposlenika
ORDER BY Prezime ASC;

Za sortiranje silaznim redoslijedom (Z do A, 9 do 0), dodajte rezerviranu riječ DESC na kraju svakog polja prema kojem želite sortirati zapise. Primjer u nastavku razvrstava imena zaposlenika prema silaznom redoslijedu plaće.

SELECT Prezime, Plaća
OD Zaposlenika
ORDER BY Plaća DESC, Prezime;

Ako navedete polje koje sadrži Memo podatke ili OLE objekte u klauzuli ORDER BY, doći će do pogreške. DBMS kernel Microsoftov pristup ne podržava sortiranje po poljima ove vrste.

Klauzula ORDER BY obično je zadnji element u SQL izjavi.

Možete uključiti dodatna polja u klauzulu ORDER BY. Zapisi se najprije sortiraju prema polju koje je prvo navedeno u klauzuli ORDER BY. Zapisi s istim vrijednostima prvog polja zatim se sortiraju prema drugom navedenom polju i tako dalje.

Prilikom dohvaćanja podataka može biti važno dobiti ih u određenom uređenom obliku. Razvrstavanje se može izvršiti po bilo kojem polju s bilo kojim tipom podataka. To može biti uzlazno ili silazno sortiranje za numerička polja. Za znakovna (tekstualna) polja ovo bi moglo biti sortiranje abecedni red, iako je to u biti i sortiranje uzlaznim ili silaznim redoslijedom. Također se može izvoditi u bilo kojem smjeru - od A do Ž, i obrnuto od Z do A.

Bit procesa sortiranja je svođenje niza na određeni redoslijed. Više o razvrstavanju možete saznati u članku "Algoritmi za razvrstavanje". Na primjer, razvrstavanje proizvoljnog niza brojeva uzlaznim redoslijedom:

2, 4, 1, 5, 9

treba rezultirati uređenim nizom:

1, 2, 4, 5, 6

Isto tako, kod sortiranja uzlaznim redoslijedom vrijednosti niza:

Ivanov Ivan, Petrov Petr, Ivanov Andrej

rezultat bi trebao biti:

Ivanov Andrej, Ivanov Ivan, Petrov Petrov

Ovdje se redak "Andrey Ivanov" pomaknuo na početak, jer se usporedba nizova provodi znak po znak. Oba retka počinju istim slovom "Ivanov". Budući da simbol "A" u riječi "Andrey" dolazi ranije u abecedi od simbola "I" u riječi "Ivan", ovaj će redak biti postavljen ranije.

Sortiranje u SQL upitu

Da biste izvršili sortiranje, nizu upita morate dodati naredbu ORDER BY. Nakon ove naredbe naznačeno je polje po kojem se vrši sortiranje.

Na primjer, koristimo robu tablice robe:

br
(Broj predmeta)
titula
(Ime)
cijena
(cijena)
1 Mandarinski50
2 Lubenica120
3 Ananas80
4 Banana40

Ovdje su podaci već poredani prema stupcu "num". Sada napravimo upit koji će prikazati tablicu s proizvodima poredanim abecednim redom:

IZABERI * OD robe REDAJ PREMA naslovu

SELECT * FROM robe – određuje odabir svih polja iz tablice robe;

ORDER BY – naredba za sortiranje;

naslov – stupac po kojem će se vršiti sortiranje.

Rezultat izvršenja takvog zahtjeva je sljedeći:

br titula cijena
3 Ananas80
2 Lubenica120
4 Banana40
1 Mandarinski50

Također možete sortirati za bilo koje polje tablice.

Smjer razvrstavanja

Prema zadanim postavkama, naredba ORDER BY sortira uzlaznim redoslijedom. Za ručnu kontrolu smjera sortiranja upotrijebite ključnu riječ ASC (uzlazno) ili DESC (silazno) iza naziva stupca. Dakle, da biste prikazali našu tablicu u silaznom redoslijedu cijena, morate postaviti upit ovako:

IZABERI * OD robe REDAJ PO CIJENI DESC

Poredaj po rastućoj cijeni bit će:

IZABERI * OD robe REDAJ PO cijeni ASC

Sortiranje po više polja

SQL omogućuje sortiranje po više polja odjednom. Da biste to učinili, nakon naredbe ORDER BY, potrebna polja su naznačena odvojena zarezima. Redoslijed rezultata upita bit će konfiguriran istim redoslijedom u kojem su navedena polja sortiranja.

stupac1 stupac2 stupac3
3 1 c
1 3 c
2 2 b
2 1 b
1 2 a
1 3 a
3 4 a

Razvrstajmo tablicu prema sljedećim pravilima:

IZABERI * IZ mytable RED PO stupcu1 ASC, stupcu2 DESC, stupcu3 ASC

Oni. prvi stupac je uzlazni, drugi je silazni, treći opet uzlazni. Upit će poredati retke prema prvom stupcu, zatim, bez kršenja prvog pravila, prema drugom stupcu. Zatim, također, bez kršenja postojećih pravila, prema trećem. Rezultat će biti ovakav skup podataka:

stupac1 stupac2 stupac3
1 3 a
1 3 c
1 2 a
2 2 b
2 1 b
3 1 a
3 1 c

Redoslijed naredbe ORDER BY u upitu

Sortiranje redaka najčešće se provodi zajedno s uvjetom za odabir podataka. Naredba ORDER BY postavlja se iza uvjeta odabira WHERE. Na primjer, odabiremo proizvode čija je cijena manja od 100 rubalja, poredane po nazivu abecednim redom:

IZABERI * OD robe GDJE cijena 100 kn REDAJ PO cijeni ASC

Često postoji potreba za prikazom rezultata upita određenim redoslijedom, na primjer, abecednim redom. U tu svrhu DBMS ima posebnu funkciju u SQL jeziku – sortiranje. U tom slučaju programer može odabrati koja će se polja i kojim redoslijedom pojaviti kako bi postigao željeni rezultat, bez korištenja ozbiljnih programerskih vještina.

Što je sortiranje u bazi podataka?

Rad s bazama podataka stalno je povezan s velikom količinom informacija koje je potrebno organizirati. Trenutno postoji niz DBMS-ova sa širokim rasponom funkcija, od kojih su najpopularniji Oracle i MS SQL. Razvrstavanje informacija, kao jedan od glavnih postupaka u radu s bazama podataka, omogućeno je posebnom ugrađenom funkcijom u svakoj od njih.

Podaci o rangiranju omogućuju vam pojednostavljenje procesa pretraživanja, au nekim slučajevima pomažu u rješavanju određenih problema ili optimiziranju rada programa. SQL sortiranje izvodi se zasebno odabranim poljem, a ako je potrebno, ako postoje identične vrijednosti u elementima ovog polja, možete odrediti dodatne parametre koji određuju mjesto redaka.

Naredba sortiranja

SQL sortiranje u bazi podataka omogućeno je pomoću funkcije ORDER BY. Dakle, prilikom ispisivanja informacija iz baze podataka, nakon navođenja stupaca i tablica iz kojih će se vršiti očitavanje, upit mora specificirati naredbu za sortiranje, a zatim odrediti polje ili polja po kojima će se vršiti sortiranje.

Na primjer, ako trebate dobiti podatke iz polja Ime i Dob iz tablice Ljudi, dok prikazujete rezultat abecednim redom prema stupcu Ime, tada će vam pomoći sljedeći upit: ODABERITE Ime, Dob OD Ljudi RED PO IMENU.

Kako postaviti redoslijed sortiranja?

Suvremeni uvjeti pred programere postavljaju različite zadatke, a ponekad je potrebno unaprijed odrediti kojim će se redoslijedom prikazati rezultat - silaznim ili uzlaznim, abecednim ili obrnutim? A da biste to učinili u SQL-u, redoslijed sortiranja određuje se dodavanjem ključne riječi u upit. Nakon odabira polja i tablica iz kojih će se dobiti željeni podaci, potrebno je dodati ORDER BY, a zatim odrediti naziv stupca po kojem želite sortirati.

Da biste dobili obrnuti redoslijed, morate navesti DESC parametar iza imena. Ako je potrebno poredati elemente prema dva ili više kriterija, tada se stupci označavaju odvojeni zarezima, a prednost u rangiranju ima polje koje je prvo na listi. Vrijedno je napomenuti da parametar DESC omogućuje raspoređivanje elemenata obrnutim redoslijedom samo u jednom polju, nakon čijeg je naziva navedena ova ključna riječ, pa je po potrebi potrebno navesti u svim odabranim stupcima.

Alternativne metode sortiranja

Ako nije moguće koristiti ugrađenu SQL funkciju sortiranja, možete napisati jedan od dobro poznatih algoritama. Ako želite postići najbrži poredak elemenata, trebali biste koristiti metodu koja se temelji na dijeljenju niza elemenata na pola. Također su vrlo popularne metode rangiranja "mjehurića", u kojima dvije susjedni elementi zamjena mjesta u slučaju netočnog postavljanja, "piramidalno sortiranje", koje šalje najveći element na kraj popisa, i "sortiranje umetanjem", koje unaprijed određuje mjesto svakog elementa redom.

Samostalno pisanje algoritma neće značajno povećati brzinu sortiranja, ali će pridonijeti razvoju vještina programiranja, a također će vam omogućiti da modificirate proces prilagođavanjem sheme rangiranja određenoj bazi podataka kako biste poboljšali učinkovitost programa.

U budućnosti ćemo možda morati sortirati naš odabir - abecednim redom za tekst ili uzlazno/silazno za numeričke vrijednosti. U takve svrhe u SQL Tamo je specijalni operater NARUČI PO .

1. Razvrstavanje odabranih podataka.

Razvrstajmo cijelu našu tablicu po količini prodaje proizvoda, odnosno po stupcu Iznos.

IZABERI * OD Sumproduct ORDER BY Amount

Vidimo da je upit poredao zapise uzlaznim redoslijedom u polju Iznos. Obavezno je slijediti redoslijed operatora, tj. operater NARUČI PO treba ići na samom kraju zahtjeva. U protivnom ćete dobiti poruku o pogrešci.

Također značajka operatera NARUČI PO je da može sortirati podatke po polju koje nismo odabrali u upitu, odnosno dovoljno je da se uopće nalazi u bazi.

2. Razvrstavanje po nekoliko polja.

Razvrstajmo sada naš primjer dodatno po još jednom polju. Neka bude polje Grad, koji prikazuje mjesto prodaje proizvoda.

IZABERI * IZ Sumproizvoda REDAJ PREMA iznosu, gradu

Redoslijed sortiranja ovisit će o redoslijedu polja u zahtjevu. To jest, u našem slučaju, prvo će podaci biti sortirani po stupcima Iznos, a zatim prema Grad.

3. Smjer razvrstavanja.

Iako je zadani operater NARUČI PO sortira uzlaznim redoslijedom, također možemo odrediti sortiranje vrijednosti silaznim redoslijedom. Da bismo to učinili, na kraju svakog polja stavljamo operator OPIS (što je skraćenica za riječ SILAZNI).

IZABERI * OD Sumproduct ORDER BY Amount DESC , Grad

U u ovom primjeru, vrijednost u polju Iznos poredani su silaznim redoslijedom, au polju Grad- Uzlazni. Operater OPIS odnosi se samo na jedan stupac, pa se po potrebi mora napisati iza svakog polja koje sudjeluje u sortiranju.