A SELECT (az angol select - "select" szóból) egy lekérdezési operátor ( DML / DQL ) az SQL nyelvben , amely egy adatkészletet (kiválasztást) ad vissza az adatbázisból .
Az operátor nulla vagy több sort ad vissza. A visszaadandó oszlopok listája az utasítás SELECT részében van megadva. Mivel az SQL deklaratív nyelv, a SELECT lekérdezés csak a visszaadott adatkészlet követelményeit határozza meg, és nem ad pontos utasítást ezek kiszámítására. A DBMS a SELECT lekérdezést belső végrehajtási tervvé ("lekérdezési terv") fordítja le, amely még az adott DBMS-től szintaktikailag azonos lekérdezések esetén is eltérhet.
A SELECT utasítás több tagmondatból (szakaszból) áll:
A SELECT utasítás szerkezete a következő:
KIVÁLASZTÁS [ DISTINCT | DISTINCTROW | ALL ] select_expression ,... FROM table_references [ WHERE where_definition ] [ GROUP BY { unsigned_integer | oszlopnév | formula } ] [ HAVING where_definition ] [ ORDER BY { unsigned_integer | oszlopnév | képlet } [ ASC | DESC ], ...]Az SELECToperátori záradék SELECTcélja, hogy meghatározza az oszlopok eredményhalmazát, amelyet azután kapunk, hogy a záradékban lévő táblázatkifejezést kiértékelték FROMés csoportosították az eredményben GROUP BY(ha van ilyen). A záradék SELECTegy vetítési műveletet valósít meg, azaz egy táblázatkifejezés tábláinak oszlopainak egy részét adja meg, valamint egy oszlopok átnevezési műveletet és egy új kiszámítható oszlopok hozzáadásának műveletét.
A záradék FROMaz alaptábla-kifejezés kiértékelésére szolgál, amelyet azután az operátor többi tagmondata használ SELECT.
A záradékot [[WHERE (SQL)|WHERE]] arra használjuk, hogy meghatározzuk, mely sorokat válasszuk ki a záradékban található táblázatkifejezésből FROM.
[[GROUP BY (SQL)|GROUP BY]] — egy opcionális operátori záradék SELECTa sorok csoportosítására aggregált függvények eredményei alapján ( MAX, SUM, AVG, …).
A mondatban SELECTcsak a kimeneti adatfolyamban szükséges oszlopokat kell megadni, GROUP BYés/vagy összesített értékeket kell megadni. Gyakori hiba, hogy egy olyan SELECToszlopot vesznek fel egy mondatba, amely hiányzik a GROUP BY.
HAVING egy opcionális operátori javaslat SELECTa következőből származó csoportok kiválasztásához GROUP BY.
Ha meg van adva , HAVING <условия>feltételeket adhat meg a -ban megadott oszlopokon GROUP BYés az összesített függvények értékein, amelyeket az által alkotott csoportok mindegyikére számítanak ki GROUP BY.
ORDER BY az SELECTés operátorok opcionális záradéka UNION, ami azt jelenti, hogy a SELECT, operátorok UNIONegy vagy több oszlop értékei szerint rendezett sorok halmazát adják vissza. Numerikus oszlopokra és karakterláncokra egyaránt alkalmazható. Az utóbbi esetben a rendezés ábécé szerint történik .
A záradék ORDER BYhasználata az egyetlen módja a sorok eredményhalmazának rendezésének. E záradék nélkül a DBMS bármilyen sorrendben visszaadhatja a sorokat. Ha rendelésre van szükség, ORDER BYjelen kell lennie a SELECT, UNION.
A rendezés történhet növekvő vagy csökkenő sorrendben.
"T" tábla | Kérés | Eredmény | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
KIVÁLASZTÁS * FROM T |
| ||||||||||||
|
KIVÁLASZTÁS A C1 -BŐL T |
| ||||||||||||
|
SELECT * FROM T WHERE C1 = 1 |
| ||||||||||||
|
KIVÁLASZTÁS * FROM T ORDER BY C1 DESC |
|
T tábla lekérdezéséhez
KIVÁLASZTÁS * FROM Tvisszaadja az adott tábla összes sorának összes oszlopát. Ugyanerre a táblára vonatkozó lekérdezés
KIVÁLASZTÁS A C1 -BŐL Taz összes táblázatsor C1 oszlopának értékeit adja vissza. A relációs algebra szempontjából azt mondhatjuk, hogy egy vetítés készült . Ugyanerre a táblára vonatkozó lekérdezés
SELECT * FROM T WHERE C1 = 1visszaadja a táblázat összes olyan sorának összes oszlopának értékét, amelynél a C1 mező értéke 1. A relációs algebra szempontjából azt mondhatjuk, hogy a kijelölés megtörtént . Utolsó kérés
KIVÁLASZTÁS * FROM T ORDER BY C1 DESCugyanazokat a sorokat adja vissza, mint az első, azonban az eredmény fordított sorrendben (ZA) lesz rendezve, mivel az ORDER BY kulcsszót C1 mezővel rendezési mezőként használja. Ez a lekérdezés nem tartalmazza a WHERE kulcsszót, ezért a táblázatban szereplő tartalmat adja vissza. Több ORDER BY elem is megadható vesszővel elválasztva [pl. MEGRENDELÉS C1 ASC, C2 DESC] a pontosabb válogatás érdekében.
Kijelöli az összes olyan sort, ahol az oszlopnév mező megegyezik a felsorolt értékek egyikével: érték1, érték2,…
Visszaadja azon részlegazonosítók listáját, amelyek eladásai 2000. január 1-jén meghaladták az 1000-et, valamint az aznapi értékesítési összértéküket:
SELECT DeptID , SUM ( SaleAmount ) FROM Sales WHERE SaleDate = '01-Jan-2000' GROUP BY DeptID HAVING SUM ( SaleAmount ) > 1000Az ISO SQL:2003 szerint a visszaadott adatkészlet a következőkkel korlátozható:
Különféle ablakfunkciók vannak . ROW_NUMBER() OVERsegítségével egyszerűen korlátozható a visszaadott sorok száma. Például, ha legfeljebb tíz sort szeretne visszaadni:
SELECT * FROM ( SELECT ROW_NUMBER ( ) OVER ( ORDER BY kulcs ASC ) AS sorszám , oszlopok FROM táblanév ) AS foo WHERE sorszám <= 10A ROW_NUMBER lehet nem determinisztikus: ha a kulcs nem egyedi, akkor a lekérdezés minden egyes végrehajtásakor különböző számokat rendelhet az azonos kulcsú sorokhoz. Ha a kulcs egyedi, minden sor mindig egyedi sorszámot kap.
A függvény RANK() OVERnagyjából ugyanúgy működik, mint a ROW_NUMBER, de bizonyos feltételek mellett n -nél több sort is visszaadhat. Például az első 10 legfiatalabb személy megtalálásához:
SELECT * FROM ( SELECT RANK ( ) OVER ( ORDER BY kor ASC ) AS rangsor , személyazonosító , személynév , életkor FROM személy ) AS foo WHERE rangsor <= 10Ez a kód több mint 10 sort adhat vissza. Például, ha két azonos korú ember van, akkor 11 sort ad vissza.
Nem minden DBMS támogatja a fenti ablakfunkciókat. Ugyanakkor sok nem szabványos szintaxissal rendelkezik ugyanazon problémák megoldására. Az alábbiakban példák találhatók a különböző DBMS-ek egyszerű mintavételi megszorításaira:
Szállító/DBMS | Kényszer szintaxis |
---|---|
DB2 | (Támogatja a szabványt a DB2 6-os verziója óta) |
KIVÁLASZTÁS * A [ T ] -BÓL CSAK AZ ELSŐ 10 SOR KERESÉSE LE | |
Tűzmadár | ELSŐ 10 KIVÁLASZTÁSA * A [ T ] -BÓL |
Informix | ELSŐ 10 KIVÁLASZTÁSA * A [ T ] -BÓL |
Interbase | KIVÁLASZTÁS * A [ T ] 10. SORBÓL |
Microsoft | (Az SQL Server 2005 óta támogatja a szabványt) |
IsKIVÁLASZTÁS TOP 10 [ SZÁZALÉK ] * RENDEZÉS SZÁM SZERINT _ _ | |
MySQL | KIVÁLASZTÁS * A T HATÁRÉRTŐL 10 |
SQLite | KIVÁLASZTÁS * A T HATÁRÉRTŐL 10 |
PostgreSQL | (Támogatja a szabványt a PostgreSQL 8.4 óta) |
KIVÁLASZTÁS * A T HATÁRÉRTŐL 10 | |
Jóslat | (Az Oracle8i óta támogatja a szabványt) |
IsKIVÁLASZTÁS * FROM T WHERE SOR <= 10 |
SQL | |
---|---|
Verziók |
|
Kulcsszavak |
|
Kapcsolódó cikkek | |
Az ISO/IEC SQL részei |
|
Adatbázis | |
---|---|
Fogalmak |
|
Objektumok |
|
Kulcsok | |
SQL |
|
Alkatrészek |