SELECT (fra det engelske select - "select") er en forespørgselsoperator ( DML / DQL ) i SQL -sproget , der returnerer et datasæt (selektion) fra databasen .
Operatøren returnerer nul eller flere rækker. Listen over kolonner, der skal returneres, er angivet i den del af sætningen, der kaldes SELECT-sætningen. Da SQL er et deklarativt sprog, definerer SELECT-forespørgslen kun kravene til det returnerede datasæt og er ikke en præcis instruktion om, hvordan de beregnes. DBMS'et oversætter SELECT-forespørgslen til en intern eksekveringsplan ("forespørgselsplan"), som kan afvige selv for syntaktisk identiske forespørgsler fra et specifikt DBMS.
SELECT-sætningen består af flere klausuler (sektioner):
SELECT-sætningen har følgende struktur:
VÆLG [ DISTINCT | DISTINCTROW | ALL ] select_expression ,... FROM table_references [ WHERE where_definition ] [ GROUP BY { unsigned_integer | col_name | formel } ] [ HAR hvor_definition ] [ BESTIL EFTER { unsigned_integer | col_name | formel } [ ASC | DESC ], ...]Operatorudtrykket SELECTer SELECTberegnet til at definere det resultatsæt af kolonner, der opnås efter tabeludtrykket i udtrykket er blevet evalueret FROMog grupperet i resultatet GROUP BY(hvis nogen). Udtrykket SELECTimplementerer en projektionsoperation, det vil sige specificering af et undersæt af kolonner fra tabeller i et tabeludtryk, såvel som en operation med at omdøbe kolonner og en operation med tilføjelse af nye beregnelige kolonner.
Klausulen FROMbruges til at evaluere basistabeludtrykket, som derefter bruges af resten af operatorens klausuler SELECT.
Klausulen [[WHERE (SQL)|WHERE]] bruges til at bestemme hvilke rækker der skal vælges fra tabeludtrykket i klausulen FROM.
[[GROUP BY (SQL)|GROUP BY]] — en valgfri operatorsætning SELECTtil gruppering af rækker baseret på resultaterne af aggregerede funktioner ( MAX, SUM, AVG, …).
SELECTDet er nødvendigt, at kun de kolonner, der kræves i outputstrømmen, angivet i GROUP BYog/eller aggregerede værdier , angives i sætningen . En almindelig fejl er at inkludere en SELECTkolonne i en sætning, der mangler i GROUP BY.
HAVING er et valgfrit operatørforslag SELECTtil valg af grupper, der stammer fra GROUP BY.
Når det er angivet , kan du HAVING <условия>angive betingelser på kolonnerne angivet i GROUP BYog på værdierne af aggregerede funktioner beregnet for hver gruppe dannet af GROUP BY.
ORDER BY er en valgfri klausul af operatorerne SELECTog UNION, hvilket betyder, at SELECToperatorerne UNIONreturnerer et sæt rækker sorteret efter værdierne af en eller flere kolonner. Det kan anvendes på både numeriske kolonner og strenge. I sidstnævnte tilfælde vil sortering ske alfabetisk .
Brug af en klausul ORDER BYer den eneste måde at sortere resultatet af rækker på. Uden denne klausul kan DBMS returnere rækkerne i vilkårlig rækkefølge. Ved behov for bestilling, ORDER BYskal være til stede i SELECT, UNION.
Sortering kan udføres i stigende eller faldende rækkefølge.
"T" bord | Anmodning | Resultat | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
VÆLG * FRA T |
| ||||||||||||
|
VÆLG C1 FRA T |
| ||||||||||||
|
VÆLG * FRA HVOR C1 = 1 _ |
| ||||||||||||
|
VÆLG * FRA BESTILLING AF C1 DESC _ |
|
Til tabel T-forespørgsel
VÆLG * FRA Treturnerer alle kolonner i alle rækker i den givne tabel. For den samme tabel, forespørg
VÆLG C1 FRA Treturnerer værdierne i kolonne C1 i alle tabelrækker. Med hensyn til relationel algebra kan vi sige, at der er lavet en fremskrivning . For den samme tabel, forespørg
VÆLG * FRA HVOR C1 = 1 _vil returnere værdierne for alle kolonner i alle rækker i tabellen, for hvilke værdien af feltet C1 er lig med 1. Med hensyn til relationel algebra kan vi sige, at der er foretaget et valg . Sidste anmodning
VÆLG * FRA BESTILLING AF C1 DESC _vil returnere de samme rækker som den første, men resultatet vil blive sorteret i omvendt rækkefølge (ZA) på grund af brugen af ORDER BY nøgleordet med C1 feltet som sorteringsfeltet. Denne forespørgsel indeholder ikke nøgleordet WHERE, så det vil returnere det, der er i tabellen. Flere ORDER BY-elementer kan angives adskilt med kommaer [f.eks. BESTIL EFTER C1 ASC, C2 DESC] for mere præcis sortering.
Vælger alle rækker, hvor feltet kolonnenavn er lig med en af de opregnede værdier værdi1, værdi2,...
Returnerer en liste over afdelings-id'er, hvis salg oversteg 1000 den 1. januar 2000, sammen med deres salgstotaler for den pågældende dag:
VÆLG DeptID , SUM ( SaleAmount ) FRA Salg HVOR SaleDate = '01-Jan-2000' GRUPPER EFTER DeptID HAR SUM ( SaleAmount ) > 1000Ifølge ISO SQL:2003 kan det returnerede datasæt begrænses med:
Der er forskellige vinduesfunktioner . ROW_NUMBER() OVERkan bruges til blot at begrænse antallet af returnerede rækker. For eksempel for at returnere ikke mere end ti rækker:
VÆLG * FRA ( SELECT ROW_NUMBER () OVER ( ORDER BY key ASC ) SOM rækkenummer , kolonner FRA tabelnavn ) SOM foo WHERE rækkenummer <= 10ROW_NUMBER kan være ikke-deterministisk: hvis nøglen ikke er unik, er det muligt at tildele forskellige numre til rækker, der har den samme nøgle , hver gang forespørgslen udføres . Når nøglen er unik, vil hver linje altid få et unikt linjenummer.
Funktionen RANK() OVERfungerer stort set på samme måde som ROW_NUMBER, men kan returnere mere end n rækker under visse betingelser. For eksempel for at få top 10 yngste mennesker:
VÆLG * FRA ( VÆLG RANK () OVER ( ORDER BY age ASC ) AS ranking , person_id , person_name , age FROM person ) AS foo WHERE ranking <= 10Denne kode kan returnere mere end 10 rækker. For eksempel, hvis der er to personer med samme alder, vil det returnere 11 rækker.
Ikke alle DBMS understøtter ovenstående vinduesfunktioner. Samtidig har mange ikke-standard syntaks til at løse de samme problemer. Nedenfor er eksempler på simple prøveudtagningsbegrænsninger for forskellige DBMS'er:
Leverandør/DBMS | Begrænsningssyntaks |
---|---|
DB2 | (Understøtter standard siden DB2 Version 6) |
VÆLG * FRA [ T ] HENT KUN DE FØRSTE 10 RÆKKER | |
ildfugl | VÆLG FØRSTE 10 * FRA [ T ] |
Informix | VÆLG FØRSTE 10 * FRA [ T ] |
Interbase | VÆLG * FRA [ T ] RÆKKER 10 |
Microsoft | (Understøtter standard siden SQL Server 2005) |
OgsåVÆLG TOP 10 [ PROCENT ] * FRA BESTILLING EFTER kol _ | |
MySQL | VÆLG * FRA T LIMIT 10 |
SQLite | VÆLG * FRA T LIMIT 10 |
PostgreSQL | (Understøtter standard siden PostgreSQL 8.4) |
VÆLG * FRA T LIMIT 10 | |
Oracle | (Understøtter standard siden Oracle8i) |
OgsåVÆLG * FRA HVOR ROWNUM < = 10 |
SQL | |
---|---|
Versioner |
|
Nøgleord | |
Relaterede artikler | |
Dele af ISO/IEC SQL |
|
Database | |
---|---|
Begreber |
|
Objekter | |
Nøgler | |
SQL | |
Komponenter |