SELECT ( englannin sanasta select - "select") on SQL -kielen kyselyoperaattori ( DML / DQL ), joka palauttaa tietojoukon (valinnan) tietokannasta .
Operaattori palauttaa nollan tai useamman rivin. Palautettavien sarakkeiden luettelo määritetään käskyn osassa, jota kutsutaan SELECT-lauseeksi. Koska SQL on deklaratiivinen kieli, SELECT-kysely määrittää vain palautetun tietojoukon vaatimukset, eikä se ole tarkka ohje niiden laskemiseen. DBMS kääntää SELECT-kyselyn sisäiseksi suoritussuunnitelmaksi ("kyselysuunnitelma"), joka voi poiketa jopa syntaktisesti identtisissä kyselyissä tietystä DBMS:stä.
SELECT-lause koostuu useista lauseista (osioista):
SELECT-käskyllä on seuraava rakenne:
VALITSE [ DISTINCT | DISTINCTROW | KAIKKI ] select_expression ,... FROM taulukkoviittaukset [ WHERE where_definition ] [ GROUP BY { unsigned_integer | sarakkeen_nimi | kaava } ] [ ON missä_määritelmä ] [ ORDER BY { unsigned_integer | sarakkeen_nimi | kaava } [ ASC | DESC ], ...]Operaattorilause on tarkoitettu määrittelemään sarakkeiden tulosjoukko, joka saadaan sen jälkeen, kun lauseessa oleva taulukkolauseke on arvioitu SELECTja ryhmitelty tulokseen (jos sellainen on). Lause toteuttaa projektiooperaation, eli taulukon lausekkeen taulukoiden sarakkeiden osajoukon määrittämisen sekä sarakkeiden uudelleennimeämisen ja uusien laskettavien sarakkeiden lisäämisen. SELECTFROMGROUP BYSELECT
Lausea FROMkäytetään perustaulukon lausekkeen arvioimiseen, jota sitten käyttävät muut operaattorin lausekkeet SELECT.
Lauseen [[WHERE (SQL)|WHERE]] avulla määritetään, mitkä rivit tulee valita lauseen taulukkolausekkeesta FROM.
[[GROUP BY (SQL)|GROUP BY]] — valinnainen operaattorilause , jolla ryhmitellään rivejä aggregaattifunktioiden ( , , , …) SELECTtulosten perusteella .MAXSUMAVG
On välttämätöntä, että lauseessa määritetään SELECTvain tulosvirran vaaditut sarakkeet, jotka on lueteltu GROUP BYja/tai aggregoidut arvot . Yleinen virhe on sisällyttää SELECTlauseeseen sarake, joka puuttuu GROUP BY.
HAVING on valinnainen operaattoriehdotus, SELECTjonka avulla voit valita ryhmistä, jotka johtuvat GROUP BY.
Kun määritetään , voit HAVING <условия>määrittää ehtoja sarakkeille, jotka on määritetty kohdassa , GROUP BYja kullekin funktion muodostamalle ryhmälle laskettujen aggregaattifunktioiden arvoille GROUP BY.
ORDER BYSELECTon ja -operaattoreiden valinnainen lauseke UNION, mikä tarkoittaa, että SELECT, -operaattorit UNIONpalauttavat joukon rivejä, jotka on lajiteltu yhden tai useamman sarakkeen arvojen mukaan. Sitä voidaan soveltaa sekä numeerisiin sarakkeisiin että merkkijonoihin. Jälkimmäisessä tapauksessa lajittelu tapahtuu aakkosjärjestyksessä .
Lauseen käyttö ORDER BYon ainoa tapa lajitella rivien tulosjoukko. Ilman tätä lauseketta DBMS voi palauttaa rivit missä tahansa järjestyksessä. Jos tilaus tarvitaan, ORDER BYon oltava läsnä SELECT, UNION.
Lajittelu voidaan tehdä nousevassa tai laskevassa järjestyksessä.
"T" pöytä | Pyyntö | Tulos | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
VALITSE * FROM T |
| ||||||||||||
|
VALITSE C1 T : STA |
| ||||||||||||
|
VALITSE * FROM T , MISSÄ C1 = 1 |
| ||||||||||||
|
SELECT * FROM T ORDER BY C1 DESC |
|
Taulukon T kyselyyn
VALITSE * FROM Tpalauttaa annetun taulukon kaikkien rivien kaikki sarakkeet. Samaa taulukkoa varten kysely
VALITSE C1 T : STApalauttaa kaikkien taulukon rivien sarakkeen C1 arvot. Relaatioalgebran osalta voidaan sanoa, että projektio on tehty . Samaa taulukkoa varten kysely
VALITSE * FROM T , MISSÄ C1 = 1palauttaa taulukon kaikkien rivien kaikkien sarakkeiden arvot, joille kentän C1 arvo on 1. Relaatioalgebran suhteen voidaan sanoa, että valinta on tehty . Viimeinen pyyntö
SELECT * FROM T ORDER BY C1 DESCpalauttaa samat rivit kuin ensimmäinen, mutta tulos lajitellaan käänteisessä järjestyksessä (ZA), koska ORDER BY -avainsanaa käytetään C1-kentän lajittelukentässä. Tämä kysely ei sisällä WHERE-avainsanaa, joten se palauttaa mitä tahansa taulukosta. Useita ORDER BY -elementtejä voidaan määrittää pilkuilla erotettuina [esim. TILAA C1 ASC, C2 DESC] tarkempaan lajitteluun.
Valitsee kaikki rivit, joissa sarakkeen_nimi-kenttä on yhtä suuri kuin jokin luetelluista arvoista arvo1, arvo2,…
Palauttaa luettelon osastotunnuksista, joiden myynti ylitti 1 000 1. tammikuuta 2000, sekä niiden kyseisen päivän myyntimäärät:
SELECT DeptID , SUM ( SaleAmount ) FROM Sales WHERE SaleDate = '01-Jan-2000' GROUP BY DeptID HAVING SUM ( SaleAmount ) > 1000ISO SQL:2003: n mukaan palautettava tietojoukko voidaan rajoittaa seuraavilla tavoilla:
Ikkunatoimintoja on erilaisia . ROW_NUMBER() OVERvoidaan yksinkertaisesti rajoittaa palautettavien rivien määrää. Jos esimerkiksi haluat palauttaa enintään kymmenen riviä:
SELECT * FROM ( SELECT ROW_NUMBER ( ) OVER ( ORDER BY key ASC ) AS rivinumero , sarakkeet FROM taulukon nimi ) AS foo WHERE rivinumero <= 10ROW_NUMBER voi olla epädeterministinen: jos avain ei ole ainutlaatuinen, joka kerta kun kysely suoritetaan, on mahdollista määrittää eri numeroita riveille, joilla on sama avain . Kun avain on ainutlaatuinen, jokainen rivi saa aina yksilöllisen rivinumeron.
Funktio RANK() OVERtoimii paljolti samalla tavalla kuin ROW_NUMBER, mutta voi tietyissä olosuhteissa palauttaa enemmän kuin n riviä. Esimerkiksi saadaksesi 10 parasta nuorinta:
SELECT * FROM ( SELECT RANK ( ) OVER ( JÄRJESTÄ iän mukaan ASC ) AS ranking , henkilötunnus , henkilön_nimi , ikä FROM henkilö ) AS foo WHERE ranking < = 10Tämä koodi voi palauttaa yli 10 riviä. Jos esimerkiksi kaksi henkilöä on samanikäinen, se palauttaa 11 riviä.
Kaikki DBMS-järjestelmät eivät tue yllä olevia ikkunatoimintoja. Samaan aikaan monilla on epästandardi syntaksi samojen ongelmien ratkaisemiseksi. Alla on esimerkkejä yksinkertaisista näytteenottorajoituksista eri tietokantajärjestelmille:
Toimittaja/DBMS | Rajoitussyntaksi |
---|---|
DB2 | (Tukee standardia DB2-versiosta 6 lähtien) |
VALITSE * ASTA [ T ] HAE VAIN 10 ENSIMMÄISET RIVIÄ | |
tulilintu | VALITSE ENSIMMÄISET 10 * ALKAAN [ T ] |
Informix | VALITSE ENSIMMÄISET 10 * ALKAAN [ T ] |
Interbase | VALITSE * RIVISTA [ T ] 10 _ |
Microsoft | (Tukee standardia SQL Server 2005:stä lähtien) |
MyösVALITSE TOP 10 [ PROSENTTIA ] * T ARJ _ _ _ | |
MySQL | VALITSE * T - RAJASTA 10 |
SQLite | VALITSE * T - RAJASTA 10 |
PostgreSQL | (Tukee standardia PostgreSQL 8.4:stä lähtien) |
VALITSE * T - RAJASTA 10 | |
Oraakkeli | (Tukee standardia Oracle8i:stä lähtien) |
MyösVALITSE * MISTÄ RIVI < = 10 _ |
SQL | |
---|---|
Versiot |
|
Avainsanat | |
Aiheeseen liittyvät artikkelit | |
ISO/IEC SQL:n osat |
|
Tietokanta | |
---|---|
Käsitteet |
|
Objektit |
|
Avaimet | |
SQL | |
Komponentit |