SELECT (från engelska select - "select") är en frågeoperator ( DML / DQL ) i SQL -språket som returnerar en datamängd (selektion) från databasen .
Operatören returnerar noll eller fler rader. Listan över kolumner som ska returneras anges i den del av satsen som kallas SELECT-satsen. Eftersom SQL är ett deklarativt språk, definierar SELECT-frågan endast kraven för den returnerade datamängden och är inte en exakt instruktion om hur de ska beräknas. DBMS översätter SELECT-frågan till en intern exekveringsplan ("frågeplan"), som kan skilja sig även för syntaktiskt identiska frågor från en specifik DBMS.
SELECT-satsen består av flera satser (sektioner):
SELECT-satsen har följande struktur:
VÄLJ [ DISTINCT | DISTINCTROW | ALL ] select_expression ,... FROM table_references [ WHERE where_definition ] [ GROUP BY { unsigned_integer | kolnamn | formel } ] [ HAR var_definition ] [ BESTÄLLNING EFTER { unsigned_integer | kolnamn | formel } [ ASC | DESC ], ...]Operatörssatsen är avsedd att definiera resultatuppsättningen av kolumner som erhålls efter att SELECTtabelluttrycket SELECTi satsen har utvärderats FROMoch grupperats i resultatet GROUP BY(om något). Klausulen SELECTimplementerar en projektionsoperation, det vill säga specificerar en delmängd av kolumner från tabeller i ett tabelluttryck, såväl som en operation för att byta namn på kolumner och en operation för att lägga till nya beräkningsbara kolumner.
Klausulen FROManvänds för att utvärdera bastabelluttrycket, som sedan används av resten av operatorns satser SELECT.
Klausulen [[WHERE (SQL)|WHERE]] används för att bestämma vilka rader som ska väljas från tabelluttrycket i satsen FROM.
[[GROUP BY (SQL)|GROUP BY]] — En valfri operatorsats SELECTför gruppering av rader baserat på resultaten av aggregerade funktioner ( MAX, SUM, AVG, …).
SELECTDet är nödvändigt att endast de kolumner som krävs i utdataströmmen, listade i GROUP BYoch/eller aggregerade värden , anges i meningen . Ett vanligt misstag är att inkludera en SELECTkolumn i en mening som saknas i GROUP BY.
HAVING är ett valfritt operatörsförslag SELECTför att välja grupper som härrör från GROUP BY.
När det anges kan du HAVING <условия>ange villkor på kolumnerna som anges i GROUP BYoch på värdena för aggregerade funktioner beräknade för varje grupp som bildas av GROUP BY.
ORDER BY är en valfri klausul av operatorerna SELECToch , vilket innebär UNIONatt operatorerna returnerar en uppsättning rader sorterade efter värdena i en eller flera kolumner. Det kan appliceras på både numeriska kolumner och strängar. I det senare fallet kommer sorteringen att ske alfabetiskt . SELECTUNION
Att använda en sats ORDER BYär det enda sättet att sortera resultatuppsättningen av rader. Utan denna klausul kan DBMS returnera raderna i valfri ordning. Om beställning behövs, ORDER BYmåste finnas i SELECT, UNION.
Sortering kan göras i stigande eller fallande ordning.
"T" tabell | Begäran | Resultat | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
VÄLJ * FRÅN T |
| ||||||||||||
|
VÄLJ C1 FRÅN T |
| ||||||||||||
|
VÄLJ * FRÅN DÄR C1 = 1 _ |
| ||||||||||||
|
VÄLJ * FRÅN BESTÄLLNING AV C1 DESC _ |
|
För tabell T-fråga
VÄLJ * FRÅN Treturnerar alla kolumner i alla rader i den givna tabellen. För samma tabell, fråga
VÄLJ C1 FRÅN Tkommer att returnera värdena i kolumn C1 i alla tabellrader. När det gäller relationalgebra kan vi säga att en projektion har gjorts . För samma tabell, fråga
VÄLJ * FRÅN DÄR C1 = 1 _kommer att returnera värdena för alla kolumner i alla rader i tabellen för vilka värdet på fältet C1 är lika med 1. När det gäller relationalgebra kan vi säga att ett urval har gjorts . Sista förfrågan
VÄLJ * FRÅN BESTÄLLNING AV C1 DESC _kommer att returnera samma rader som den första, men resultatet kommer att sorteras i omvänd ordning (ZA) på grund av användningen av nyckelordet ORDER BY med C1-fältet som sorteringsfält. Den här frågan innehåller inte nyckelordet WHERE, så det returnerar allt som finns i tabellen. Flera ORDER BY-element kan anges separerade med kommatecken [t.ex. ORDER BY C1 ASC, C2 DESC] för mer exakt sortering.
Väljer alla rader där fältet kolumnnamn är lika med ett av de uppräknade värdena värde1, värde2,...
Returnerar en lista över avdelnings-ID vars försäljning översteg 1 000 den 1 januari 2000, tillsammans med deras försäljningssummor för den dagen:
VÄLJ DeptID , SUMMA ( SaleAmount ) FROM Sales WHERE SaleDate = '01-Jan-2000' GRUPP EFTER Avd. ID ATT HAR SUMMA ( SaleAmount ) > 1000Enligt ISO SQL:2003 kan den returnerade datamängden begränsas med:
Det finns olika fönsterfunktioner . ROW_NUMBER() OVERkan användas för att helt enkelt begränsa antalet returnerade rader. Till exempel, för att returnera högst tio rader:
VÄLJ * FRÅN ( VÄLJ RAD_NUMMER () ÖVER ( ORDER EFTER nyckel ASC ) SOM radnummer , kolumner FRÅN tabellnamn ) SOM foo WHERE radnummer <= 10ROW_NUMBER kan vara icke-deterministisk: om nyckeln inte är unik, varje gång frågan exekveras, är det möjligt att tilldela olika nummer till rader som har samma nyckel . När nyckeln är unik får varje rad alltid ett unikt radnummer.
Funktionen RANK() OVERfungerar ungefär på samma sätt som ROW_NUMBER, men kan returnera fler än n rader under vissa förhållanden. Till exempel, för att få de 10 yngsta:
VÄLJ * FRÅN ( VÄLJ RANK () ÖVER ( ORDNING EFTER ålder ASC ) AS ranking , person_id , person_name , age FROM person ) AS foo WHERE ranking <= 10Denna kod kan returnera fler än 10 rader. Till exempel, om det finns två personer i samma ålder, kommer det att returnera 11 rader.
Inte alla DBMS stöder ovanstående fönsterfunktioner. Samtidigt har många icke-standardiserad syntax för att lösa samma problem. Nedan finns exempel på enkla provtagningsbegränsningar för olika DBMS:er:
Säljare/DBMS | Begränsningssyntax |
---|---|
DB2 | (Stöder standard sedan DB2 version 6) |
VÄLJ * FRÅN [ T ] HÄMT ENDAST DE FÖRSTA 10 RADERNA | |
eldfågel | VÄLJ FÖRSTA 10 * FRÅN [ T ] |
Informix | VÄLJ FÖRSTA 10 * FRÅN [ T ] |
Interbas | VÄLJ * FRÅN [ T ] RADER 10 |
Microsoft | (Stöder standard sedan SQL Server 2005) |
OcksåVÄLJ TOP 10 [ PROCENT ] * FRÅN BESTÄLLNING EFTER kol _ | |
MySQL | VÄLJ * FRÅN T LIMIT 10 |
SQLite | VÄLJ * FRÅN T LIMIT 10 |
PostgreSQL | (Stöder standard sedan PostgreSQL 8.4) |
VÄLJ * FRÅN T LIMIT 10 | |
Orakel | (Stöder standard sedan Oracle8i) |
OcksåVÄLJ * FROM T WHERE ROWNUM <= 10 |
SQL | |
---|---|
versioner |
|
Nyckelord |
|
Relaterade artiklar | |
Delar av ISO/IEC SQL |
|
Databas | |
---|---|
Begrepp |
|
Objekt |
|
Nycklar | |
SQL |
|
Komponenter |