Sakārtot pēc sintakses. Datu kārtošana SQL (ORDER BY). Kārtot atlasītos datus

Piezīme:
Visos pašreizējās SQL apmācības kategorijas rakstos ir izmantoti piemēri un problēmas, kuru pamatā ir apmācības datubāze.

Saskaņā ar pirmo normālo formu relāciju datu bāzes datiem, rindu secībai tabulās nevajadzētu būt nozīmei. Taču praksē bieži vien ir nepieciešams sakārtot informāciju pirms tās parādīšanas ekrānā.

Klauzula ORDER BY ir atbildīga par SQL vaicājumā ielādēto rindu sakārtošanu. Tas atrodas pieprasījuma pašā beigās:

ATLASĪT<Перечень столбцов>NO<Перечень таблиц>SAKĀRTOT PĒC<Условие сортировки>

Kārtošanas nosacījums norāda kolonnas, pēc kurām tiks sakārtotas iegūtās tabulas rindas:

PASŪTĪT PĒC 1. kolonnas, 2. kolonnas

Kārtošanas secība SQL

Ir 2 šķirošanas iespējas: augošā un dilstošā. Lai vaicājumā norādītu kārtošanas veidu, aiz kolonnas nosaukuma norādiet atslēgvārds ASC (augšupejoša) vai DESC (dilstoša), kas nosaka attiecīgi augošu vai dilstošu secību. Noklusējuma veids ir ASC:

ORDER BY col1 — nākamā klauzula būs līdzvērtīga ORDER BY col1 ACS

Ir iespējams arī norādīt atšķirīgu secību dažādām kolonnām:

PASŪTĪT PĒC col1 DESC, col2 ASC

Lai konsolidētu materiālu, atrisiniet problēmu izglītības datubāzē:

Jums ir jāiegūst darbinieku ID saraksts, kas sakārtots pēc grupām augošā secībā un pieņemšanas datumā, no jaunākā līdz vecākajam.

ATLASĪT ID, Grupa, Nomas_datums FROM Darbinieki ORDER BY Group, Nomas_datums DESC

Papildināsim priekšraksta SELECT sintaksi ar klauzulu ORDER BY (vertikālā josla nozīmē, ka ir jāizvēlas viena no opcijām):

ATLASĪT [Tabulas nosaukums.]Slejas nosaukums[, [Tabulas nosaukums.]Slejas nosaukums2...] NO [[DatabaseName.]SchemaName.]Tabulas nosaukums Kolonnas nosaukums [, [Tabulas nosaukums.]Slejas nosaukums2...]]

  • Uz priekšu >

Ja materiāli no office-menu.ru jums palīdzēja, lūdzu, atbalstiet projektu, lai es varētu to attīstīt tālāk.

Programmas Access klauzula ORDER BY sakārto vaicājuma atgrieztos ierakstus noteiktā lauka(-u) vērtību augošā vai dilstošā secībā.

Sintakse

ATLASĪT lauka_saraksts
NO tabula
KUR atlases_nosacījums
[, lauks2 ][, ...]]]

SELECT paziņojums kas satur klauzulu ORDER BY, ietver šādus elementus:

Piezīmes

Klauzula ORDER BY nav obligāta. To vajadzētu izmantot, ja nepieciešams parādīt datus sakārtotā veidā.

Noklusējuma kārtošanas secība ir augošā secībā (no A līdz Z, no 0 līdz 9). Divi tālāk minētie piemēri parāda darbinieku vārdu kārtošanu pēc uzvārda.

ATLASĪT Uzvārdu, Vārdu
NO darbiniekiem
PASŪTĪT PĒC Uzvārda;
ATLASĪT Uzvārdu, Vārdu
NO darbiniekiem
PASŪTĪT PĒC Uzvārda ASC;

Lai kārtotu dilstošā secībā (no Z līdz A, no 9 līdz 0), katra lauka beigās, pēc kura vēlaties kārtot ierakstus, pievienojiet rezervēto vārdu DESC. Tālāk esošajā piemērā darbinieku vārdi ir sakārtoti dilstošā algas secībā.

IZVĒLIES Uzvārdu, Alga
NO darbiniekiem
PASŪTĪT PĒC Algas DESC, Uzvārds;

Ja klauzulā ORDER BY norādāt lauku, kurā ir Memo dati vai OLE objekti, radīsies kļūda. DBVS kodols Microsoft Access neatbalsta kārtošanu pēc šāda veida laukiem.

ORDER BY klauzula parasti ir pēdējais elements SQL priekšrakstā.

Klauzulā ORDER BY varat iekļaut papildu laukus. Ieraksti vispirms tiek sakārtoti pēc lauka, kas vispirms norādīts klauzulā ORDER BY. Pēc tam ieraksti ar vienādām pirmā lauka vērtībām tiek kārtoti pēc otrā norādītā lauka utt.

Izgūstot datus, var būt svarīgi tos iegūt noteiktā pasūtītā formā. Kārtošanu var veikt pēc jebkuriem laukiem ar jebkuru datu tipu. Tā var būt ciparu lauku kārtošana augošā vai dilstošā secībā. Rakstzīmju (teksta) laukiem tas varētu būt kārtošana alfabētiska secība, lai gan būtībā tā ir arī šķirošana augošā vai dilstošā secībā. To var veikt arī jebkurā virzienā - no A līdz Z un otrādi no Z līdz A.

Šķirošanas procesa būtība ir secības samazināšana līdz noteiktai secībai. Vairāk par kārtošanu varat uzzināt rakstā “Kārtošanas algoritmi”. Piemēram, patvaļīgas skaitļu secības kārtošana augošā secībā:

2, 4, 1, 5, 9

jārada sakārtota secība:

1, 2, 4, 5, 6

Tāpat, kārtojot virknes vērtību augošā secībā:

Ivanovs Ivans, Petrovs Petrs, Ivanovs Andrejs

rezultātam jābūt:

Ivanovs Andrejs, Ivanovs Ivans, Petrovs Petrovs

Šeit rinda “Andrejs Ivanovs” ir pārcēlusies uz sākumu, jo stīgu salīdzināšana tiek veikta pēc rakstzīmes. Abas rindas sākas ar vienādām rakstzīmēm "Ivanovs". Tā kā simbols “A” vārdā “Andrijs” ir agrāk alfabētā nekā simbols “I” vārdā “Ivans”, šī rinda tiks ievietota agrāk.

Kārtošana SQL vaicājumā

Lai veiktu kārtošanu, vaicājuma virknei jāpievieno komanda ORDER BY. Pēc šīs komandas tiek norādīts lauks, pēc kura tiek veikta kārtošana.

Piemēriem mēs izmantojam preču tabulas preces:

nr
(Lietas numurs)
virsraksts
(Vārds)
cena
(cena)
1 Mandarīns50
2 Arbūzs120
3 Ananāss80
4 Banāns40

Dati šeit jau ir sakārtoti pēc kolonnas "num". Tagad izveidosim vaicājumu, kas parādīs tabulu ar produktiem, kas sakārtoti alfabētiskā secībā:

ATLASĪT * NO preču PASŪTĪJUMA PĒC nosaukuma

SELECT * FROM preces – norāda preču tabulas atlasīt visus laukus;

ORDER BY – kārtošanas komanda;

virsraksts – kolonna, pēc kuras tiks veikta šķirošana.

Šāda pieprasījuma izpildes rezultāts ir šāds:

nr virsraksts cena
3 Ananāss80
2 Arbūzs120
4 Banāns40
1 Mandarīns50

Varat arī kārtot jebkuru no tabulas laukiem.

Šķirošanas virziens

Pēc noklusējuma komanda ORDER BY tiek kārtota augošā secībā. Lai manuāli kontrolētu kārtošanas virzienu, aiz kolonnas nosaukuma izmantojiet atslēgvārdu ASC (augošā secībā) vai DESC (dilstošā secībā). Tādējādi, lai parādītu mūsu tabulu cenu dilstošā secībā, jums ir jāuzdod šāds vaicājums:

ATLASĪT * NO precēm PASŪTĪT PĒC cenas APRAKSTS

Kārtot pēc cenas augošā secībā būs:

ATLASĪT * NO precēm PASŪTĪT PĒC cenas ASC

Kārtošana pēc vairākiem laukiem

SQL ļauj kārtot pēc vairākiem laukiem vienlaikus. Lai to izdarītu, pēc komandas ORDER BY tiek norādīti nepieciešamie lauki, atdalot tos ar komatiem. Vaicājuma rezultāta secība tiks konfigurēta tādā pašā secībā, kādā ir norādīti kārtošanas lauki.

kolonna1 kolonna 2 kolonna 3
3 1 c
1 3 c
2 2 b
2 1 b
1 2 a
1 3 a
3 4 a

Sakārtosim tabulu saskaņā ar šādiem noteikumiem:

ATLASĪT * NO mytable ORDER BY column1 ASC, column2 DESC, column3 ASC

Tie. pirmā kolonna ir augoša, otrā ir dilstoša, trešā atkal augoša. Vaicājumā rindas tiks sakārtotas pēc pirmās kolonnas, pēc tam, nepārkāpjot pirmo noteikumu, pēc otrās kolonnas. Tad arī, nepārkāpjot esošos noteikumus, saskaņā ar trešo. Rezultātā tiks iegūta šāda datu kopa:

kolonna1 kolonna 2 kolonna 3
1 3 a
1 3 c
1 2 a
2 2 b
2 1 b
3 1 a
3 1 c

Komandas ORDER BY secība vaicājumā

Rindu kārtošana visbiežāk tiek veikta kopā ar datu atlases nosacījumu. Komanda ORDER BY tiek ievietota aiz izvēles nosacījuma WHERE. Piemēram, mēs izvēlamies produktus, kuru cena ir mazāka par 100 rubļiem, sakārtoti pēc nosaukuma alfabētiskā secībā:

ATLASĪT * NO precēm KUR cena 100 PASŪTĪT PĒC cenas ASC

Bieži vien ir nepieciešams parādīt vaicājuma rezultātu noteiktā secībā, piemēram, alfabētiskā secībā. Šim nolūkam DBVS ir īpaša funkcija SQL valoda- šķirošana. Šajā gadījumā programmētājs var izvēlēties, kuros laukos un kādā secībā tas notiks, lai sasniegtu vēlamo rezultātu, neizmantojot nopietnas programmēšanas prasmes.

Kas ir kārtošana datu bāzē?

Darbs ar datu bāzēm pastāvīgi ir saistīts ar lielu informācijas apjomu, kas ir jāsakārto. Šobrīd ir pieejamas vairākas DBVS ar plašu funkciju klāstu, no kurām populārākās ir Oracle un MS SQL. Informācijas šķirošanu, kā vienu no galvenajām procedūrām darbā ar datu bāzēm, nodrošina speciāla iebūvēta funkcija katrā no tām.

Datu ranžēšana ļauj vienkāršot meklēšanas procesu un dažos gadījumos palīdz atrisināt noteiktas problēmas vai optimizēt programmas darbību. SQL kārtošanu veic atsevišķi atlasīts lauks, un, ja nepieciešams, ja šī lauka elementos ir identiskas vērtības, varat norādīt papildu parametrus, kas nosaka rindu atrašanās vietu.

Kārtošanas komanda

SQL kārtošana datu bāzē tiek nodrošināta, izmantojot funkciju ORDER BY. Tātad, izvadot informāciju no datu bāzes, pēc kolonnu un tabulu norādīšanas, no kurām tiks veikta nolasīšana, vaicājumā jānorāda kārtošanas komanda un pēc tam jānosaka lauks vai lauki, pēc kuriem tiks veikta kārtošana.

Piemēram, ja jums ir jāiegūst dati no tabulas Personas laukiem Vārds un Vecums, vienlaikus parādot rezultātu alfabētiskā secībā pēc kolonnas Vārds, palīdzēs šāds vaicājums: IZVĒLĒTIES Vārds, Vecums NO Cilvēkiem PĒC vārda.

Kā iestatīt kārtošanas secību?

Mūsdienu apstākļi programmētājiem izvirza dažādus uzdevumus, un dažreiz ir nepieciešams iepriekš noteikt, kādā secībā rezultāts tiks parādīts - dilstošā vai augošā secībā, alfabēta secībā vai apgrieztā secībā? Un, lai to izdarītu SQL, kārtošanas secība tiek noteikta, vaicājumam pievienojot atslēgvārdu. Pēc lauku un tabulu atlases, no kurām tiks iegūta vēlamā informācija, jāpievieno ORDER BY, un pēc tam jānorāda kolonnas nosaukums, pēc kuras vēlaties kārtot.

Lai iegūtu apgriezto secību, pēc nosaukuma ir jānorāda parametrs DESC. Ja nepieciešams sakārtot elementus pēc diviem vai vairākiem kritērijiem, tad kolonnas tiek norādītas atdalītas ar komatiem, un prioritāte ranžēšanā tiks piešķirta laukam, kas sarakstā ir pirmais. Ir vērts atzīmēt, ka parametrs DESC paredz elementu kārtošanu apgrieztā secībā tikai vienā laukā, aiz kura nosaukuma ir norādīts šis atslēgvārds, tāpēc nepieciešamības gadījumā tas jānorāda visās atlasītajās kolonnās.

Alternatīvas šķirošanas metodes

Ja nav iespējams izmantot iebūvēto SQL šķirošanas funkciju, varat uzrakstīt kādu no labi zināmajiem algoritmiem. Ja nepieciešams panākt ātrāko elementu sakārtošanu, jāizmanto metode, kuras pamatā ir elementu masīva sadalīšana uz pusēm. Ļoti populāras ir arī “burbuļa” ranžēšanas metodes, kurās divas blakus esošie elementi apmainīt vietām nepareiza izvietojuma gadījumā, "piramīdas kārtošana", kas nosūta lielāko elementu uz saraksta beigām, un "insertion sort", kas iepriekš nosaka katra elementa atrašanās vietu pēc kārtas.

Pašam uzrakstot algoritmu, šķirošanas ātrums būtiski nepalielināsies, tomēr tas veicinās programmēšanas prasmju attīstību, kā arī ļaus modificēt procesu, pielāgojot ranžēšanas shēmu konkrētai datubāzei, lai uzlabotu programmas efektivitāti.

Nākotnē mums, iespējams, vajadzēs sakārtot atlasi — tekstam alfabētiskā secībā vai skaitliskām vērtībām augošā/dilstošā secībā. Šādiem nolūkiem iekšā SQL Tur ir īpašs operators SAKĀRTOT PĒC .

1. Atlasīto datu kārtošana.

Sakārtosim visu tabulu pēc produktu pārdošanas apjoma, proti, pēc kolonnas Summa.

ATLASĪT * NO Sumproduct ORDER BY Summa

Mēs redzam, ka vaicājums laukā sakārtoja ierakstus augošā secībā Summa. Obligāti jāievēro operatoru secība, t.i. operators SAKĀRTOT PĒC jāiet pašā pieprasījuma beigās. Pretējā gadījumā jūs saņemsit kļūdas ziņojumu.

Arī operatora iezīme SAKĀRTOT PĒC ir tas, ka tā var kārtot datus pēc lauka, kuru mēs neatlasījām vaicājumā, tas ir, pietiek ar to, ka tie vispār ir datu bāzē.

2. Kārtošana pēc vairākiem laukiem.

Tagad sakārtosim mūsu piemēru papildus vēl pēc viena lauka. Lai tas ir lauks Pilsēta, kas parāda preču tirdzniecības vietu.

ATLASĪT * NO Sumproduct ORDER BY Summa, City

Kārtošanas secība būs atkarīga no pieprasījuma lauku secības. Tas ir, mūsu gadījumā vispirms dati tiks sakārtoti pēc kolonnas Summa, un pēc tam līdz Pilsēta.

3. Šķirošanas virziens.

Pat ja noklusējuma operators SAKĀRTOT PĒC kārto augošā secībā, mēs varam arī norādīt kārtošanas vērtības dilstošā secībā. Lai to izdarītu, katra lauka beigās ievietojam operatoru DESC (kas ir vārda saīsinājums DZEJOŠS).

ATLASĪT * NO Sumproduct ORDER BY Summa DESC, pilsēta

IN šajā piemērā, vērtība laukā Summa tika sakārtoti dilstošā secībā un laukā Pilsēta- Augošā. Operators DESC attiecas tikai uz vienu kolonnu, tāpēc, ja nepieciešams, tas jāraksta aiz katra lauka, kas piedalās šķirošanā.