Pasūtiet pēc apraksta. Darbs ar datu bāzi. Datu kārtošana SQL vaicājuma rezultātā. Komandas ORDER BY secība vaicājumā

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 ieslēgts 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 iespējas, kas nosaka līniju 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 tiek apmainīti divi blakus esošie elementi, ja tie ir nepareizi novietoti, "piramīdas kārtošana", kas nosūta lielāko elementu saraksta beigās, 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.

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 to var kārtot alfabētiskā secībā, lai gan būtībā tas tiek kārtots arī 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

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 priekšraksts, 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, kas satur Memo vai tipa datus OLE objekti, radīsies kļūda. Kodols Microsoft DBVS 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 sakārtoti pēc otrā norādītā lauka utt.


Nākamais cikls:

8. darbība: vienkārša šķirošana

Ja jūsu SQL vaicājuma rezultāts kļūst par atskaites avota materiālu, jautājums par tajā esošo datu kārtošanu kļūst ārkārtīgi svarīgs, jo personai, kas lasa nepareizi sakārtotu pārskatu, ir ļoti grūti ātri atrast viņiem nepieciešamo informāciju. Lai kārtotu datus pēc vaicājuma rezultātu kolonnām (mūsu gadījumā pēc tabulas laukiem), SQL izmanto atslēgvārdu ORDER BY. Tālāk ir sniegts vienkāršākās šķirošanas piemērs. Pamats ir ņemts no pieprasījuma no 2. darbības: “Pieprasījums ar vienkāršu atlases kritēriju”. Mēs kārtojam darbiniekus pēc lauka S_NAME (pilns vārds).

SELECT S_NAME, S_PERIENCE NO D_STAFF, KUR S_PIEREDZE

SQL vaicājuma rezultātu kārtošana pēc viena lauka.

Solis 9. Sarežģīta šķirošana

Bieži un pat gandrīz vienmēr ir nepieciešams kārtot datus pēc vairāk nekā vienas kolonnas un ne vienmēr augošā secībā. SQL sintakse pieņem, ka pēc atslēgvārda ORDER BY tiek parādīts kolonnu saraksts, kas atdalīts ar komatu, kā arī katras kolonnas šķirošanas metode: vērtību augošā secībā - ASC vai dilstošā secībā - DESC. Tālāk esošajā piemērā mēs rādām ierakstus par visiem darbiniekiem dilstošā secībā pēc viņu darba stāža. Darbiniekus ar vienādu darba stāžu šķirojam alfabēta secībā.

ATLASĪT S_EXPERIENCE, S_NAME NO D_STAFF ORDER BY S_EXPERIENCE DESC, S_NAME ASC


SQL vaicājuma rezultātu kārtošana pēc diviem laukiem.

Diezgan bieži apgrieztā kārtošanas secība tiek izmantota tādām kolonnām kā [datums]. Ja datumā tiek saglabāts, piemēram, datums, kurā informācija tika ievadīta, tad, veicot apgriezto šķirošanu, saraksta pašā sākumā ir tie ieraksti, kas tika pievienoti nesen attiecībā pret pārējiem. Ja vaicājums izgūst ziņu paziņojumus no datu bāzes, mēs saņemam paziņojumu sarakstu, kas sakārtots dilstošā secībā pēc to atbilstības, kas var būt ļoti noderīgi, jo paziņojumi parasti tiek lasīti no augšas uz leju, un ziņu vietnēs tie netiek rādīti visi. , bet tikai daži “svaigākie”.




Tops