Ordine inversă de sortare SQL după. Lucrul cu baza de date

19.06.2021 Lucrul cu imagini

Adesea este nevoie să afișați rezultatul unei interogări într-o anumită ordine, de exemplu, alfabetic. În acest scop, SGBD are o funcție specială în limbajul SQL - sortarea. În acest caz, programatorul poate alege ce câmpuri și în ce ordine vor apărea pentru a obține rezultatul dorit, fără a folosi abilități serioase de programare.

Ce este sortarea într-o bază de date?

Lucrul cu bazele de date este asociat în mod constant cu o cantitate mare de informații care trebuie organizate. În prezent, există o serie de SGBD-uri cu o gamă largă de funcții, dintre care cele mai populare sunt Oracle și MS SQL. Sortarea informațiilor, ca una dintre procedurile principale în lucrul cu bazele de date, este asigurată de o funcție specială încorporată în fiecare dintre ele.

Clasificarea datelor vă permite să simplificați procesul de căutare și, în unele cazuri, ajută la rezolvarea anumitor probleme sau la optimizarea funcționării programului. Sortarea SQL se realizează printr-un câmp selectat separat și, dacă este necesar, dacă există valori identice în elementele acestui câmp, puteți specifica parametri suplimentari care determină locația rândurilor.

Comanda de sortare

Sortarea SQL în baza de date este furnizată prin utilizarea funcției ORDER BY. Deci, la ieșirea informațiilor dintr-o bază de date, după ce ați specificat coloanele și tabelele din care va fi citită, trebuie să specificați o comandă de sortare în interogare, iar apoi să definiți câmpul sau câmpurile prin care va fi efectuată sortarea.

De exemplu, dacă trebuie să obțineți date din câmpurile Nume și Vârstă din tabelul Persoane, în timp ce afișați rezultatul în ordine alfabetică după coloana Nume, atunci următoarea interogare vă va ajuta: SELECTAȚI Nume, Vârsta FROM Persoane ORDEREAȚI DUPĂ Nume.

Cum se stabilesc ordinea de sortare?

Condițiile moderne pun diverse sarcini pentru programatori și, uneori, este necesar să se predetermina în ce ordine va fi afișat rezultatul - în ordine descrescătoare sau crescătoare, în ordine alfabetică sau în ordine inversă? Și pentru a face acest lucru în SQL, ordinea de sortare este determinată prin adăugarea unui cuvânt cheie la interogare. După selectarea câmpurilor și tabelelor din care se vor obține informațiile dorite, trebuie să adăugați ORDER BY, apoi să specificați numele coloanei după care doriți să sortați.

Pentru a obține ordinea inversă, trebuie să specificați parametrul DESC după nume. Dacă este necesară ordonarea elementelor după două sau mai multe criterii, atunci coloanele sunt indicate separate prin virgule, iar prioritate în clasament va fi dată câmpului care se află pe primul loc în listă. Este de remarcat faptul că parametrul DESC prevede aranjarea elementelor în ordine inversă doar într-un câmp, după numele căruia este indicat acest cuvânt cheie, deci, dacă este necesar, trebuie specificat în toate coloanele selectate.

Metode alternative de sortare

Dacă nu este posibil să utilizați funcția de sortare SQL încorporată, puteți scrie unul dintre algoritmii cunoscuți. Dacă trebuie să obțineți cea mai rapidă ordonare a elementelor, ar trebui să utilizați o metodă bazată pe împărțirea matricei de elemente în jumătate. Foarte populare sunt și metodele de clasare „bubble”, în care două elemente adiacente sunt schimbate dacă sunt poziționate incorect, „sortarea piramidală”, care trimite cel mai mare element în partea de jos a listei și „sortarea prin inserție”, care predetermina locația fiecărui element pe rând.

Scrierea singur a unui algoritm nu va crește semnificativ viteza de sortare, cu toate acestea, va contribui la dezvoltarea abilităților de programare și, de asemenea, vă va permite să modificați procesul prin ajustarea schemei de clasare la o anumită bază de date pentru a îmbunătăți eficiența programului.

La preluarea datelor, poate fi important să le obțineți într-o anumită formă ordonată. Sortarea se poate face după orice câmpuri cu orice tip de date. Acesta poate fi un sortare ascendent sau descendent pentru câmpurile numerice. Pentru câmpurile de caractere (text), acestea pot fi sortate în ordine alfabetică, deși în esență sunt sortate și în ordine crescătoare sau descrescătoare. De asemenea, poate fi efectuat în orice direcție - de la A la Z și invers de la Z la A.

Esența procesului de sortare este reducerea secvenței la o anumită ordine. Puteți afla mai multe despre sortare în articolul „Algoritmi de sortare”.

2, 4, 1, 5, 9

ar trebui să rezulte o secvență ordonată:

1, 2, 4, 5, 6

La fel, atunci când sortați în ordine crescătoare a valorilor șirurilor:

Ivanov Ivan, Petrov Petr, Ivanov Andrey

rezultatul ar trebui sa fie:

Ivanov Andrei, Ivanov Ivan, Petrov Petrov

Aici linia „Andrey Ivanov” s-a mutat la început, deoarece compararea șirurilor se realizează caracter cu caracter. Ambele rânduri încep cu aceleași caractere „Ivanov”. Deoarece simbolul „A” din cuvântul „Andrey” apare mai devreme în alfabet decât simbolul „I” din cuvântul „Ivan”, această linie va fi plasată mai devreme.

Sortarea într-o interogare SQL

Pentru a efectua sortarea, trebuie să adăugați comanda ORDER BY la șirul de interogare. După această comandă este indicat câmpul prin care se realizează sortarea.

De exemplu, folosim mărfuri mărfuri de masă:

num
(numar produs)
titlu
(Nume)
preţ
(preţ)
1 Mandarin50
2 Pepene verde120
3 Ananas80
4 Banană40

Datele de aici sunt deja ordonate după coloana „num”. Acum, să construim o interogare care va afișa un tabel cu produse sortate în ordine alfabetică:

SELECTA * DIN mărfuri COMANDĂ PENTRU titlu

SELECT * FROM bunuri – specifică selectarea tuturor câmpurilor din tabelul mărfurilor;

ORDER BY – comanda de sortare;

titlu – coloana prin care se va efectua sortarea.

Rezultatul executării unei astfel de solicitări este următorul:

num titlu preţ
3 Ananas80
2 Pepene verde120
4 Banană40
1 Mandarin50

De asemenea, puteți sorta pentru oricare dintre câmpurile tabelului.

Sortați direcția

În mod implicit, comanda ORDER BY sortează în ordine crescătoare. Pentru a controla manual direcția de sortare, specificați cuvântul cheie ASC (crescător) sau DESC (descrescător) după numele coloanei. Astfel, pentru a afișa tabelul nostru în ordinea descrescătoare a prețurilor, trebuie să adresați interogarea astfel:

SELECTA * DIN marfa COMANDA DUPA pret DESC

Sortarea după preț crescător va fi:

SELECTA * DIN mărfuri COMANDĂ PENTRU preț ASC

Sortare după mai multe câmpuri

SQL permite sortarea după mai multe câmpuri simultan. Pentru a face acest lucru, după comanda ORDER BY, câmpurile obligatorii sunt indicate separate prin virgule. Ordinea rezultatului interogării va fi configurată în aceeași ordine în care sunt specificate câmpurile de sortare.

coloana 1 coloana2 coloana3
3 1 c
1 3 c
2 2 b
2 1 b
1 2 o
1 3 o
3 4 o

Să sortăm tabelul după următoarele reguli:

SELECTA * FROM mytable ORDER BY coloana1 ASC, coloana2 DESC, coloana3 ASC

Aceste. prima coloană este ascendentă, a doua este descendentă, a treia este din nou ascendentă. Interogarea va ordona rândurile după prima coloană, apoi, fără a încălca prima regulă, după a doua coloană. Apoi, de asemenea, fără a încălca regulile existente, conform celei de-a treia. Rezultatul va fi un set de date ca acesta:

coloana 1 coloana2 coloana3
1 3 o
1 3 c
1 2 o
2 2 b
2 1 b
3 1 o
3 1 c

Ordinea comenzii ORDER BY într-o interogare

Sortarea rândurilor se realizează cel mai adesea împreună cu o condiție pentru selectarea datelor. Comanda ORDER BY este plasată după condiția de selecție WHERE. De exemplu, selectăm produse cu un preț mai mic de 100 de ruble, sortate după nume în ordine alfabetică:

SELECTA *DIN marfa UNDE pret 100 COMANDA DUPA pret ASC

Clauza ORDER BY din Access sortează înregistrările returnate de o interogare în ordine crescătoare sau descrescătoare a valorilor câmpurilor specificate.

Sintaxă

SELECTA listă_câmpuri
DIN masă
UNDE stare_selecție
[, câmpul 2 ][, ...]]]

O instrucțiune SELECT care conține o clauză ORDER BY include următoarele elemente:

Note

Clauza ORDER BY este opțională. Ar trebui să fie utilizat atunci când trebuie să afișați datele în formă sortată.

Ordinea implicită de sortare este crescătoare (de la A la Z, de la 0 la 9). Cele două exemple de mai jos arată sortarea numelor angajaților după nume.

SELECTAȚI Nume, Prenume
DE LA Angajati
COMANDA PENTRU Nume;
SELECTAȚI Nume, Prenume
DE LA Angajati
COMANDA PENTRU Nume ASC;

Pentru a sorta în ordine descrescătoare (Z la A, 9 la 0), adăugați cuvântul rezervat DESC la sfârșitul fiecărui câmp după care doriți să sortați înregistrările. Exemplul de mai jos sortează numele angajaților în ordinea descrescătoare a salariului.

SELECTAȚI Nume, Salariu
DE LA Angajati
COMANDA DUPA Salariu DESC, Prenume;

Dacă specificați un câmp care conține date Memo sau obiecte OLE în clauza ORDER BY, va apărea o eroare. Motorul bazei de date Microsoft Access nu acceptă sortarea după aceste tipuri de câmpuri.

Clauza ORDER BY este de obicei ultimul element dintr-o instrucțiune SQL.

Puteți include câmpuri suplimentare în clauza ORDER BY. Înregistrările sunt mai întâi sortate după câmpul specificat mai întâi în clauza ORDER BY. Înregistrările cu aceleași valori ale primului câmp sunt apoi sortate după al doilea câmp specificat și așa mai departe.

În viitor, poate fi necesar să ne sortăm selecția - alfabetic pentru text sau crescător/descrescător pentru valori numerice. În astfel de scopuri în SQL există un operator special COMANDA PENTRU .

1. Sortarea datelor selectate.

Să sortăm întregul nostru tabel după valoarea vânzărilor de produse, și anume după coloană Cantitate.

SELECTA * DIN Sumprodus ORDER BY Sum

Vedem că interogarea a sortat înregistrările în ordine crescătoare în câmp Cantitate. Este imperativ să urmați succesiunea operatorilor, adică. operator COMANDA PENTRU ar trebui să ajungă chiar la sfârșitul cererii. În caz contrar, veți primi un mesaj de eroare.

De asemenea, o caracteristică a operatorului COMANDA PENTRU este că poate sorta datele după un câmp pe care nu l-am selectat în interogare, adică este suficient să fie deloc în baza de date.

2. Sortarea după mai multe câmpuri.

Acum să sortăm exemplul nostru în plus după încă un câmp. Să fie un câmp Oraş, care afiseaza locul de vanzare a produselor.

SELECTA * DIN Sumprodus ORDER BY Sumă, oraș

Ordinea de sortare va depinde de ordinea câmpurilor din cerere. Adică, în cazul nostru, mai întâi datele vor fi sortate după coloană Cantitate, și apoi de Oraş.

3. Direcția de sortare.

Chiar dacă operatorul implicit COMANDA PENTRU sortează în ordine crescătoare, putem specifica și valori de sortare în ordine descrescătoare. Pentru a face acest lucru, la sfârșitul fiecărui câmp punem operatorul DESC (care este o abreviere a cuvântului DESCENDENT).

SELECTA * DIN Sumprodus ORDER BY Suma DESC , Oras

În acest exemplu, valoarea din câmp Cantitate au fost sortate în ordine descrescătoare, iar pe teren Oraş- ascendent. Operator DESC se aplică doar pentru o coloană, deci, dacă este necesar, trebuie scris după fiecare câmp care ia parte la sortare.


Următorul ciclu:

Pasul 8: Sortare simplă

Dacă rezultatul interogării dvs. SQL va deveni materialul sursă pentru un raport, atunci problema sortării datelor din acesta devine extrem de importantă, deoarece este foarte dificil pentru o persoană care citește un raport care nu este sortat corespunzător să găsească rapid informația de care au nevoie. Pentru a sorta datele după coloanele de rezultat al interogării (în cazul nostru, după câmpuri de tabel), SQL utilizează cuvântul cheie ORDER BY. Un exemplu de cea mai simplă sortare este prezentat mai jos. Baza este preluată de la solicitarea de la pasul 2: „Cerere cu un criteriu de selecție simplu”. Sortăm angajații după câmpul S_NAME (nume complet).

SELECTAȚI S_NAME, S_EXPERIENCE FROM D_STAFF WHERE S_EXPERIENCE

Sortarea rezultatului unei interogări SQL după un câmp.

Pasul 9. Sortare complexă

Este adesea, și chiar aproape întotdeauna, necesar să sortați datele după mai mult de o coloană și nu întotdeauna în ordine crescătoare. Sintaxa SQL necesită o listă de coloane separate prin virgulă după cuvântul cheie ORDER BY, precum și o metodă de sortare pentru fiecare coloană: în ordine crescătoare a valorilor - ASC sau în ordine descrescătoare - DESC. În exemplul de mai jos, arătăm înregistrările pentru toți angajații în ordinea descrescătoare a vechimii lor. Sortăm angajații cu aceeași vechime în muncă în ordine alfabetică.

SELECTAȚI S_EXPERIENCE, S_NAME DIN D_STAFF ORDER BY S_EXPERIENCE DESC, S_NAME ASC


Sortarea rezultatului unei interogări SQL după două câmpuri.

Destul de des, ordinea de sortare inversă este utilizată cu coloane precum [data]. Dacă data stochează, de exemplu, data la care au fost introduse informațiile, atunci la sortarea inversă, chiar la începutul listei sunt acele înregistrări care au fost adăugate recent în raport cu restul. Dacă o interogare preia anunțuri de știri din baza de date, atunci primim o listă de anunțuri sortate în ordinea descrescătoare a relevanței lor, ceea ce poate fi extrem de util, deoarece anunțurile sunt de obicei citite de sus în jos și chiar și pe site-urile de știri, nu toate sunt afișate, dar doar câteva sunt cele mai „proaspete”.