SELECT (din engleză select - „select”) este un operator de interogare ( DML / DQL ) în limbajul SQL care returnează un set de date (selectare) din baza de date .
Operatorul returnează zero sau mai multe rânduri. Lista coloanelor de returnat este specificată în partea din instrucțiune numită clauza SELECT. Deoarece SQL este un limbaj declarativ, interogarea SELECT definește doar cerințele pentru setul de date returnat și nu este o instrucțiune precisă despre cum să le calculeze. SGBD traduce interogarea SELECT într-un plan intern de execuție („plan de interogare”), care poate diferi chiar și pentru interogări identice sintactic de la un anumit SGBD.
Instrucțiunea SELECT constă din mai multe clauze (secțiuni):
Instrucțiunea SELECT are următoarea structură:
SELECTAȚI [ DISTINCT | DISTINCTROW | ALL ] select_expression ,... FROM table_references [ WHERE unde_definition ] [ GROUP BY { unsigned_integer | col_name | formula } ] [ AVÂND unde_definiție ] [ ORDER BY { unsigned_integer | col_name | formula } [ ASC | DESC ], ...]Clauza SELECToperator SELECTare scopul de a defini setul de coloane de rezultat care se obține după ce expresia tabelului din clauză a fost evaluată FROMși grupată în rezultat GROUP BY(dacă există). Clauza SELECTimplementează o operație de proiecție, adică specificarea unui subset de coloane din tabelele unei expresii de tabel, precum și o operație de redenumire a coloanelor și o operație de adăugare de noi coloane calculabile.
Clauza FROMeste folosită pentru a evalua expresia tabelului de bază, care este apoi folosită de restul clauzelor operatorului SELECT.
Clauza [[WHERE (SQL)|WHERE]] este folosită pentru a determina ce rânduri trebuie selectate din expresia tabelului din clauză FROM.
[[GROUP BY (SQL)|GROUP BY]] — o clauză operator opțională SELECT, pentru gruparea rândurilor pe baza rezultatelor funcțiilor agregate ( MAX, SUM, AVG, …).
SELECTEste necesar ca numai coloanele necesare în fluxul de ieșire, listate în GROUP BYși/sau valori agregate , să fie specificate în propoziție . O greșeală comună este să includeți o SELECTcoloană într-o propoziție care lipsește din GROUP BY.
HAVING este o sugestie opțională a operatorului SELECTpentru selectarea grupurilor rezultate din GROUP BY.
Atunci când este specificat , HAVING <условия>puteți specifica condiții pe coloanele specificate în GROUP BYși pe valorile funcțiilor agregate calculate pentru fiecare grup format din GROUP BY.
ORDER BY este o clauză opțională a operatorilor SELECTși UNION, ceea ce înseamnă că operatorii SELECT, UNIONreturnează un set de rânduri sortate după valorile uneia sau mai multor coloane. Poate fi aplicat atât coloanelor numerice, cât și șirurilor. În acest din urmă caz, sortarea va avea loc alfabetic .
Utilizarea unei clauze ORDER BYeste singura modalitate de a sorta setul de rânduri rezultat. Fără această clauză, SGBD poate returna rândurile în orice ordine. Dacă este necesară comanda, ORDER BYtrebuie să fie prezent în SELECT, UNION.
Sortarea se poate face în ordine crescătoare sau descrescătoare.
Tabelul „T”. | Cerere | Rezultat | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
SELECTAȚI * DIN T |
| ||||||||||||
|
SELECTAȚI C1 DIN T |
| ||||||||||||
|
SELECTAȚI * DIN T UNDE C1 = 1 |
| ||||||||||||
|
SELECTAȚI * DIN T ORDER BY C1 DESC |
|
Pentru interogarea tabelului T
SELECTAȚI * DIN Tva returna toate coloanele din toate rândurile din tabelul dat. Pentru același tabel, interogați
SELECTAȚI C1 DIN Tva returna valorile coloanei C1 din toate rândurile tabelului. În ceea ce priveşte algebrei relaţionale , putem spune că a fost făcută o proiecţie . Pentru același tabel, interogați
SELECTAȚI * DIN T UNDE C1 = 1va returna valorile tuturor coloanelor din toate rândurile tabelului pentru care valoarea câmpului C1 este egală cu 1. În ceea ce privește algebra relațională , putem spune că a fost făcută o selecție . Ultima cerere
SELECTAȚI * DIN T ORDER BY C1 DESCva returna aceleași rânduri ca și primul, totuși rezultatul va fi sortat în ordine inversă (ZA) datorită utilizării cuvântului cheie ORDER BY cu câmpul C1 ca câmp de sortare. Această interogare nu conține cuvântul cheie WHERE, așa că va returna orice se află în tabel. Mai multe elemente ORDER BY pot fi specificate separate prin virgule [ex. ORDER BY C1 ASC, C2 DESC] pentru o sortare mai precisă.
Selectează toate rândurile în care câmpul nume_coloană este egal cu una dintre valorile enumerate value1, value2,...
Returnează o listă de ID-uri de departament ale căror vânzări au depășit 1000 la 1 ianuarie 2000, împreună cu totalul vânzărilor lor pentru ziua respectivă:
SELECTAȚI DeptID , SUM ( SaleAmount ) FROM Sales WHERE SaleDate = '01-Jan-2000' GROUP BY DeptID HAVING SUM ( SaleAmount ) > 1000Conform ISO SQL:2003 , setul de date returnat poate fi limitat cu:
Există diferite funcții ale ferestrei . ROW_NUMBER() OVERpoate fi folosit pentru a limita pur și simplu numărul de rânduri returnate. De exemplu, pentru a returna nu mai mult de zece rânduri:
SELECT * FROM ( SELECT ROW_NUMBER () OVER ( ORDER BY tasta ASC ) AS rownumber , coloane FROM tablename ) AS foo WHERE rownumber <= 10ROW_NUMBER poate fi nedeterminist: dacă cheia nu este unică, de fiecare dată când se execută interogarea, este posibil să se atribuie numere diferite rândurilor care au aceeași cheie . Când cheia este unică, fiecare linie va primi întotdeauna un număr unic de linie.
Funcția RANK() OVERfuncționează în același mod ca ROW_NUMBER, dar poate returna mai mult de n rânduri în anumite condiții. De exemplu, pentru a obține primii 10 cei mai tineri:
SELECT * FROM ( SELECT RANK () OVER ( ORDER BY age ASC ) AS clasament , person_id , person_name , age FROM person ) AS foo WHERE clasament <= 10Acest cod poate returna mai mult de 10 rânduri. De exemplu, dacă există două persoane cu aceeași vârstă, va returna 11 rânduri.
Nu toate SGBD-urile acceptă funcțiile ferestrei de mai sus. În același timp, mulți au sintaxă non-standard pentru rezolvarea acelorași probleme. Mai jos sunt exemple de constrângeri simple de eșantionare pentru diferite SGBD:
Furnizor/DBMS | Sintaxa constrângerii |
---|---|
DB2 | (Acceptă standard începând cu DB2 Versiunea 6) |
SELECTAȚI * DIN [ T ] ADUCE NUMAI PRIMELE 10 RÂNDURI | |
pasăre de foc | SELECTAȚI PRIMILE 10 * DIN [ T ] |
Informix | SELECTAȚI PRIMILE 10 * DIN [ T ] |
Interbază | SELECTAȚI * DIN [ T ] RÂNDURI 10 |
Microsoft | (Acceptă standard începând cu SQL Server 2005) |
De asemeneaSELECTARE TOP 10 [ PROCENT ] * DIN T ORDER BY col | |
MySQL | SELECTAȚI * DIN T LIMITĂ 10 |
SQLite | SELECTAȚI * DIN T LIMITĂ 10 |
PostgreSQL | (Acceptă standardul de la PostgreSQL 8.4) |
SELECTAȚI * DIN T LIMITĂ 10 | |
Oracol | (Acceptă standardul de la Oracle8i) |
De asemeneaSELECTAȚI * DIN T WHERE ROWNUM <= 10 |
SQL | |
---|---|
Versiuni |
|
Cuvinte cheie | |
Articole similare | |
Părți ale ISO/IEC SQL |
|
Bază de date | |
---|---|
Concepte |
|
Obiecte |
|
Chei | |
SQL |
|
Componente |