Kuinka saan selville tietyn toimittajan valmistamien PC-mallien lukumäärän? Kuinka määrittää tietokoneiden, joilla on samat tekniset ominaisuudet, keskihinta? Näihin ja moniin muihin joihinkin tilastotietoihin liittyviin kysymyksiin voidaan vastata käyttämällä lopulliset (aggregaatti) toiminnot. Standardi tarjoaa seuraavaa aggregaattifunktiot:
Kaikki nämä funktiot palauttavat yhden arvon. Samalla toiminnot COUNT, MIN Ja MAX soveltuu mihin tahansa tietotyyppiin, kun taas SUMMA Ja AVG käytetään vain numeerisissa kentissä. Ero toiminnon välillä LASKEA(*) Ja LASKEA(<имя поля>) on, että toinen ei ota huomioon NULL-arvoja laskettaessa.
Esimerkki. Etsi henkilökohtaisten tietokoneiden vähimmäis- ja enimmäishinta:
Esimerkki. Etsi valmistajan A valmistamien tietokoneiden käytettävissä oleva määrä:
Esimerkki. Jos olemme kiinnostuneita valmistajan A valmistamien eri mallien määrästä, kysely voidaan muotoilla seuraavasti (käyttämällä sitä tosiasiaa, että tuotetaulukkoon jokainen malli kirjataan kerran):
Esimerkki. Selvitä valmistajan A valmistamien eri mallien lukumäärä. Kysely on samanlainen kuin edellinen, jossa piti määrittää valmistajan A valmistamien mallien kokonaismäärä. Täältä tulee myös etsiä eri mallien lukumäärä PC-pöytä (eli ne, jotka ovat myynnissä).
Sen varmistamiseksi, että tilastollisia indikaattoreita hankittaessa käytetään vain yksilöllisiä arvoja, milloin aggregaattifunktioiden argumentti voidaan käyttää DISTINCT-parametri. Toinen parametri ALL on oletusarvo ja olettaa, että kaikki sarakkeen palautetut arvot lasketaan. Operaattori,
Jos meidän on saatava tuotettujen PC-mallien lukumäärä kaikille valmistaja, sinun on käytettävä GROUP BY lauseke, seuraavat syntaktisesti WHERE-lausekkeet.
GROUP BY lauseke
GROUP BY lauseke käytetään määrittämään tulosjonoryhmiä, joihin voidaan soveltaa koontifunktiot (COUNT, MIN, MAX, AVG ja SUM). Jos tämä lauseke puuttuu ja käytetään koostefunktioita, kaikki sarakkeet, joiden nimet on mainittu VALITSE, pitäisi olla mukana aggregaattifunktiot, ja näitä toimintoja käytetään koko rivijoukolle, joka täyttää kyselypredikaatin. Muussa tapauksessa kaikki SELECT-luettelon sarakkeet ei sisälly aggregaattifunktioissa on määritettävä GROUP BY -lauseessa. Tämän seurauksena kaikki tuloskyselyrivit on jaettu ryhmiin, joille on ominaista samat arvoyhdistelmät näissä sarakkeissa.Tämän jälkeen kuhunkin ryhmään sovelletaan koostefunktioita. Huomaa, että GROUP BY:n kaikkia NULL-arvoja käsitellään samanarvoisina, ts. kun ryhmitellään kentällä, joka sisältää NULL-arvoja, kaikki tällaiset rivit kuuluvat yhteen ryhmään. Jos jos on GROUP BY -lauseke , SELECT-lauseessa ei aggregaattitoimintoja
, kysely palauttaa vain yhden rivin kustakin ryhmästä. Tätä ominaisuutta yhdessä DISTINCT-avainsanan kanssa voidaan käyttää poistamaan päällekkäiset rivit tulosjoukosta.
Katsotaanpa yksinkertaista esimerkkiä: VALITSE malli, COUNT(malli) AS määrä_malli, AVG(hinta) AS keskihinta PC:ltä |
GROUP BY mallin mukaan; Tässä pyynnössä jokaiselle PC-mallille määritetään niiden lukumäärä ja keskimääräiset kustannukset
. Kaikki rivit, joilla on sama malliarvo, muodostavat ryhmän, ja SELECT-tulostus laskee kunkin ryhmän arvojen lukumäärän ja keskihinta-arvot. Kyselyn tulos on seuraava taulukko: | malli | Määrä_malli |
1121 | 3 | 850.0 |
1232 | 4 | 425.0 |
1233 | 3 | 843.33333333333337 |
1260 | 1 | 350.0 |
Avg_price
Jos SELECT:ssä olisi päivämääräsarake, nämä indikaattorit olisi mahdollista laskea kullekin tietylle päivämäärälle. Tätä varten sinun on lisättävä päivämäärä ryhmittelysarakkeeksi, jonka jälkeen koontifunktiot lasketaan kullekin arvoyhdistelmälle (malli-päivämäärä). On olemassa useita erityisiä:
- aggregaattitoimintojen suorittamista koskevat säännöt Jos pyynnön seurauksena rivejä ei vastaanotettu
- (tai useamman kuin yhden rivin tietylle ryhmälle), silloin ei ole lähdetietoja minkään aggregaattifunktion laskemiseen. Tässä tapauksessa COUNT-funktioiden tulos on nolla ja kaikkien muiden funktioiden tulos on NULL. Argumentti aggregaattitoiminto itse ei voi sisältää aggregaattifunktioita
- (funktio funktiosta). Ne. yhdellä kyselyllä on mahdotonta saada esimerkiksi keskiarvojen maksimi. COUNT-funktion suorittamisen tulos on kokonaisluku
- (KOKONAISLUKU). Muut koontifunktiot perivät käsittelemiensä arvojen tietotyypit. Jos SUM-funktio tuottaa tuloksen, joka on suurempi kuin käytetyn tietotyypin maksimiarvo,.
virhe Joten jos pyyntö ei sisällä GROUP BY -lausekkeet aggregaattifunktiot, Tuo mukana SELECT-lauseke GROUP BY lauseke, jokainen rivijoukko, jolla on samat arvot sarakkeessa tai sarakeryhmässä määritellyllä sarakkeella GROUP BY lauseke, muodostaa ryhmän ja aggregaattifunktiot suoritetaan jokaiselle ryhmälle erikseen.
ON TARJOUS
Tämän jälkeen kuhunkin ryhmään sovelletaan koostefunktioita. Huomaa, että GROUP BY:n kaikkia NULL-arvoja käsitellään samanarvoisina, ts. kun ryhmitellään kentällä, joka sisältää NULL-arvoja, kaikki tällaiset rivit kuuluvat yhteen ryhmään. WHERE-lauseke määrittää sitten predikaatin rivien suodattamiseen ON TARJOUS pätee ryhmittelyn jälkeen määrittääksesi samanlaisen predikaatin, joka suodattaa ryhmät arvojen mukaan aggregaattifunktiot. Tätä lauseketta tarvitaan käyttämällä saatujen arvojen validointiin aggregaattitoiminto ei määritetyn tietuelähteen yksittäisiltä riveiltä FROM lausekkeesta, ja alkaen tällaisten linjojen ryhmiä. Siksi tällaista tarkistusta ei voida sisällyttää WHERE-lauseke.
TietotyypitSQL(Kutens, kuten standardissa)
Merkkijonotyypit
Numeeriset tietotyypit
Valuutta, merkki, binääritietotyypit
Boolen tyyppi. Siirrot
Esimerkkejä yksinkertaisista SQL-kyselyistä
Yksinkertaisimmat SELECT-kyselyt
SQL SELECT -lause on tärkein ja yleisimmin käytetty käsky. Se on suunniteltu hakemaan tietoa tietokantataulukoista.
SELECT-käskyn yksinkertaistettu syntaksi on seuraava.
VALITSE [ KAIKKI | DISTINCT ] select_item_commalist
FROM table_reference_commalist
[WHERE ehdollinen_lauseke]
[GROUP BY sarakkeen_nimi_commalist]
[ HAVING ehdollinen_lauseke ]
[ ORDER BY order_item_commalist ]
Hakasulkeet osoittavat elementtejä, joita ei välttämättä ole pyynnössä. SELECT-avainsana kertoo tietokannalle sen tämä ehdotus
on tiedonhakupyyntö.
Sanan SELECT jälkeen pilkuilla erotettuna luetellaan niiden kenttien nimet (määriteluettelo), joiden sisältöä pyydetään.
Vaadittu avainsana SELECT-kyselylauseessa on sana FROM. FROM-avainsanaa seuraa pilkuilla eroteltu luettelo taulukoiden nimistä, joista tiedot haetaan.
Valitse esimerkiksi elokuvasta nimi, kuvaus
Kaikkien SQL-kyselyiden tulee päättyä symboliin ";" (puolipiste). Tämän kyselyn tuloksena on taulukko...
Tämän taulukon sarakkeiden järjestys vastaa kyselyssä määritettyjen kenttien järjestystä
Jos haluat näyttää kaikkien taulukon sarakkeiden arvot, voit käyttää “*” (tähti) -symbolia sen sijaan, että luettelet niiden nimet.
VALITSE * elokuvasta;
Kiinnitetään vielä kerran huomiosi siihen, että SQL-kyselyn tuloksena saadut taulukot eivät täysin täytä relaatiosuhteen määritelmää. Erityisesti ne voivat sisältää monikoita (rivejä), joilla on identtiset attribuuttiarvot.
Esimerkiksi kysely "näyttelijöiden nimien luettelo" voidaan kirjoittaa seuraavasti.
valitse näyttelijän etunimi;
Sen tulos on taulukko, taulukko sisältää identtiset rivit. Jos haluat sulkea pois päällekkäiset tietueet SELECT-kyselyn tuloksesta, käytä DISTINCT-avainsanaa.
Jos VALITSE kysely hakee useita kenttiä, DISTINCT eliminoi päällekkäiset rivit, joissa kaikkien valittujen kenttien arvot ovat identtisiä.
Edellinen kysely voidaan kirjoittaa seuraavasti.
valitse näyttelijän eri etunimi;
Tämän seurauksena saamme taulukon, jossa päällekkäiset rivit jätetään pois.
ALL-avainsana toimii päinvastoin kuin DISTINCT, mikä tarkoittaa, että tulokseen sisällytetään päällekkäisiä rivejä.
ALL-avainsanan määrittelemä tila on oletusarvoinen, joten sitä ei käytännössä käytetä näihin tarkoituksiin todellisissa kyselyissä. Käytä sisään SELECT-lause
WHERE-lauseen avulla voit määrittää ehtolausekkeen (predikaatin), jonka arvo on tosi tai epätosi SELECT-käskyn käyttämille taulukon rivin kenttäarvoille.
WHERE-lause määrittää, mitkä rivit määritetyistä taulukoista tulee valita.
Kyselyn tuloksena oleva taulukko sisältää vain ne rivit, joille WHERE-lauseessa määritetty ehto (predikaatti) on tosi.
Esimerkki: Kirjoita kysely, joka hakee kaikkien toimijoiden sukunimet, joiden nimi on PENELOPE valitse näyttelijän sukunimi jossa etunimi="PENELOPE";< (меньше), >Lauseessa määritellyissä<- (меньше или равно), <>MISSÄ olosuhteet
Vertailuoperaatioita, jotka on määritelty operaattoreilla = (yhtä), > (suurempi kuin), voidaan käyttää.
= (suurempi tai yhtä suuri kuin),
(ei ole yhtä suuri), samoin kuin loogiset operaattorit AND, OR ja NOT.< 60 and rental_rate < 3
Esimerkiksi pyyntö saada nimet ja kuvaukset lyhytelokuville (lyhyt kuin 60 minuuttia), joiden vuokraus maksaa alle 3 dollaria, näyttää tältä:
valitse elokuvasta nimi, kuvaus
missä pituus
Tämän kyselyn tulos näyttää tältä:
vuokraus - vuokraus
1.
inventaario - varasto, varastot
2.
myymälä - varasto, kauppa
3.
Artikkelin sisältö
4.
Yksinkertaiset UPDATE (korvaa, liitä) kyselyt
5.
Yksinkertaiset DELETE (poista tietueet) -kyselyt
6.
Yksinkertaiset DROP (delete table) -kyselyt
7.
Monimutkaiset MySQL-kyselyt
8.
MySQL-kyselyt ja PHP-muuttujat
1. Yksinkertaisimmat SQL-kyselyt
1. Näyttää luettelon KAIKISTA tietokannoista.SHOW-tietokannat;
2. Luetteloi KAIKKI taulukot tietokannassa base_name.
NÄYTÄ taulukot kohdassa kantanimi;
2. Yksinkertaiset SELECT-kyselyt MySQL-tietokantaan
VALITSE– kysely, joka valitsee tietokannasta olemassa olevat tiedot. Voit määrittää valintaa varten tietyt valintaparametrit. Esimerkiksi venäjänkielisen pyynnön olemus kuulostaa tältä: SELECT sellaiset ja sellaiset sarakkeet FROM sellaisesta ja sellaisesta taulukosta WHERE tämän ja sellaisen sarakkeen parametri on yhtä suuri kuin arvo.1. Valitsee KAIKKI tiedot taulukosta tbl_name.
SELECT * FROM tbl_name;
2. Näyttää tietueiden määrän taulukossa tbl_name.
SELECT count(*) FROM tbl_name;
3. Valitsee (SELECT) taulukosta (FROM) tbl_name limit (LIMIT) 3 tietuetta alkaen 2:sta.
SELECT * FROM tbl_name RAJA 2,3;
4. Valitsee (VALITSE) KAIKKI (*) tietueet (FROM) taulukosta tbl_name ja lajittelee ne (ORDER BY) id-kentän mukaan järjestykseen.
SELECT * FROM tbl_nimi ORDER BY id;
5. Valitsee (VALITSE) KAIKKI tietueet (FROM) tbl_name-taulukosta ja lajittelee ne (ORDER BY) id-kentän mukaan KÄÄNTEISESSÄ järjestyksessä.
SELECT * FROM tbl_nimi ORDER BY id DESC;
6. Valitsee ( VALITSE) KAIKKI (*) tietueet kohteesta ( FROM) taulukoita käyttäjiä ja lajittelee ne ( TILAA) kentän poikki id nousevassa järjestyksessä, raja ( RAJOITTAA) 5 ensimmäistä merkintää.
SELECT * FROM käyttäjiltä ORDER BY id LIMIT 5;
7. Valitsee kaikki tietueet taulukosta käyttäjiä, missä on kenttä fname vastaa arvoa Gena.
SELECT * FROM käyttäjät WHERE fname="Gena";
8. Valitsee kaikki tietueet taulukosta käyttäjiä, jossa kentän arvo fname alkaa kanssa Ge.
SELECT * FROM käyttäjiltä WHERE fname LIKE "Ge%";
9. Valitsee kaikki tietueet taulukosta käyttäjiä, Missä fname päättyy na ja lajittelee tietueet arvon nousevaan järjestykseen id.
SELECT * FROM käyttäjiltä WHERE fname LIKE "%na" ORDER BY id;
10. Valitsee kaikki tiedot sarakkeista fname, nimi pöydältä käyttäjiä.
SELECT fname, lname FROM käyttäjiltä;
11.
Oletetaan, että käyttäjätietotaulukossasi on maa. Joten jos haluat näyttää VAIN luettelon esiintyvistä arvoista (joten esimerkiksi Venäjää ei näytetä 20 kertaa, vaan vain kerran), käytämme DISTINCT. Se tuo Venäjän, Ukrainan ja Valko-Venäjän pois toistuvien arvojen joukosta. Pöydästä siis käyttäjiä kaiuttimet maassa KAIKKI YKSILÖISET arvot tulostetaan
VALITSE ERI maa käyttäjiltä;
12. Valitsee KAIKKI rivitiedot taulukosta käyttäjiä Jossa ikä on arvot 18,19 ja 21.
SELECT * FROM käyttäjiltä WHERE ikä IN (18,19,21);
13.
Valitsee MAXIMUM-arvon ikä taulukossa käyttäjiä. Eli jos sinulla on suurin arvo taulukossasi ikä(englanninkielisestä iästä) on 55, niin kyselyn tulos on 55.
SELECT max(ikä) käyttäjiltä;
14. Valitse tiedot taulukosta käyttäjiä kenttien mukaan nimi Ja ikä JOSSA ikä ottaa pienimmän arvon.
VALITSE nimi, min(ikä) käyttäjiltä;
15. Valitse tiedot taulukosta käyttäjiä kentän poikki nimi JOSSA id EI YHTÄÄN 2.
SELECT nimi FROM users WHERE id!="2";
3. Yksinkertaiset INSERT (uusi merkintä) -kyselyt
LISÄÄ– kysely, jonka avulla voit ALKUUN lisätä tietueen tietokantaan. Eli se luo UUDEN tietueen (rivin) tietokantaan.1. Tekee uuden merkinnän taulukkoon käyttäjiä, kentällä nimi lisää Sergey, ja kentällä ikä lisää 25. Siten taulukkoon lisätään uusi rivi näillä arvoilla. Jos sarakkeita on enemmän, loput jäävät joko tyhjiksi tai oletusarvoin.
INSERT INTO käyttäjiin (nimi, ikä) ARVOT ("Sergey", "25");
4. Yksinkertaiset UPDATE-kyselyt MySQL-tietokantaan
PÄIVITTÄÄ– kysely, jonka avulla voit VARAA kenttäarvoja tai LISÄÄ jotain jo olemassa olevaan tietokannan riviin. Esimerkiksi siellä on valmis rivi, mutta ikäparametri on kirjoitettava siihen uudelleen, koska se on muuttunut ajan myötä.1. Taulukossa käyttäjiä ikä tulee 18.
UPDATE käyttäjät SET ikä = "18" WHERE id = "3";
2.
Kaikki on sama kuin ensimmäisessä pyynnössä, se näyttää vain pyynnön syntaksin, jossa kaksi tai useampi kenttää korvataan.
Taulukossa käyttäjiä WHERE-tunnus on 3 kentän arvoa ikä täyttää 18 ja maassa Venäjä.
UPDATE käyttäjät SET ikä = "18", maa = "Venäjä" WHERE id = "3";
5. Yksinkertaiset DELETE (delete record) -kyselyt MySQL-tietokantaan
POISTAA– kysely, joka poistaa rivin taulukosta.1. Poistaa rivin taulukosta käyttäjiä JOSSA id vastaa 10.
POISTA käyttäjiltä WHERE id = "10";
6. Yksinkertaiset DROP (delete table) -kyselyt MySQL-tietokantaan
PUDOTA– kysely, joka poistaa taulukon.1. Poistaa koko taulukon tbl_name.
DROP TABLE tbl_name;
7. Monimutkaiset kyselyt MySQL-tietokantaan
Mielenkiintoisia kyselyitä, joista voi olla hyötyä kokeneillekin käyttäjilleVALITSE tunnus, nimi, maa FROM käyttäjiltä, järjestelmänvalvojilta WHERE TO_DAYS(NOW()) - TO_DAYS(rekisteröintipäivä)<= 14 AND activation != "0" ORDER BY registration_date DESC;
Tämä monimutkainen kysely SELECTS saraketta id, nimi, maa TAULUKKOISSA käyttäjät, ylläpitäjät JOSSA rekisteröintipäivä(päivämäärä) ei vanhempi 14
päivää I aktivointi EI TASUTA 0
, LAJITTELU rekisteröintipäivä käänteisessä järjestyksessä (uusi ensin).
PÄIVITYS käyttäjät SET ikä = "18+" WHERE ikä = (VALITSE ikä FROM käyttäjistä WHERE mies = "mies");
Yllä on esimerkki ns pyyntö pyynnön sisällä SQL:ssä. Päivitä käyttäjien ikä yli 18-vuotiaaksi, jossa sukupuoli on mies. En suosittele tällaisia pyyntövaihtoehtoja. Henkilökohtaisesta kokemuksesta sanon, että on parempi luoda useita erillisiä - ne käsitellään nopeammin.
8. MySQL- ja PHP-tietokantakyselyt
PHP-sivun MySQL-kyselyissä voit lisätä muuttujia vertailuarvoiksi jne. Pari esimerkkiä1. Valitsee kaikki tietueet taulukosta käyttäjiä, missä on kenttä fname vastaa muuttujan arvoa $nimi.
SELECT * FROM käyttäjät WHERE fname="$nimi";
2. Taulukossa käyttäjiä WHERE-tunnus on 3 kentän arvoa ikä muuttuu $age-muuttujan arvoksi.
PÄIVITYS käyttäjät SET ikä = "$ikä" WHERE id = "3";
Huomio! Jos olet kiinnostunut jostain muusta esimerkistä, kirjoita kysymys kommentteihin!
Tämä liite sisältää tiiviimmän kuvauksen erilaisista SQL-komennoista. Tavoitteena on antaa sinulle nopea ja tarkka viittaus ja määritelmä SQL:stä. Tämän sovelluksen ensimmäisessä osassa määritellään elementit, joita käytetään SQL-komentojen luomiseen. toiseksi yksityiskohdat syntaksista ja lauseista sekä lyhyt kuvaus itse komennoista. Seuraavassa näkyvät vakiosopimukset (kutsutaan BNF-ehdoksi):
Lisäksi käytämme seuraavaa sekvenssiä (.,..) osoittamaan, että sitä edeltävä voi toistua kuinka monta kertaa tahansa, yksittäiset tapahtumat erotellaan pilkuilla. Attribuutit, jotka eivät ole osa virallista standardia, merkitään kuvaukseen (*epästandardi*).
HUOMAA: Tässä käyttämämme terminologia ei ole virallista ANSI-terminologiaa. Virallinen terminologia voi olla hyvin hämmentävää, joten olemme yksinkertaistaneet sitä jonkin verran.
Tästä syystä käytämme joskus muita ehtoja kuin ANSI tai samoja ehtoja, mutta hieman eri tavalla. Esimerkiksi määritelmämme on< predicate >eroaa ANSI-standardin määritelmäyhdistelmästä< predicate >Kanssa< search condition >.
SQL-ELEMENTIT
Tässä osassa määritellään SQL-komentojen elementit. Ne on jaettu kahteen luokkaan: Kielen peruselementit, Ja Kielen toiminnalliset elementit.
Peruselementit- Tämä luotuja lohkoja kieli; Kun SQL tutkii komentoa, se arvioi ensin jokaisen komentotekstin merkin näiden elementtien suhteen. Erottimet< separator >erottaa yksi osa ryhmästä toisesta; kaikki, mikä on erottimien välissä< separator >käsitellään moduulina. Tämän jaon perusteella SQL tulkitsee komennon.
Toiminnalliset elementit ovat monia muita asioita kuin avainsanoja, jotka voidaan tulkita moduuleiksi. Nämä ovat komennon osia, jotka on erotettu erottimilla< separator >, joilla on erityinen merkitys SQL:ssä. Jotkut niistä ovat erityisiä tiettyjä komentoja ja kuvataan yhdessä näiden komentojen kanssa myöhemmin tässä liitteessä. Tässä on listattu yhteisiä elementtejä kaikille kuvatuille komennoille. Toiminnalliset elementit voidaan määritellä keskenään tai jopa omin ehdoin. Esimerkiksi predikaatti< predicate >, viimeinen ja vaikein tapauksemme, sisältää predikaatin omassa määritelmässään. Tämä johtuu predikaatista< predicate >AND:n tai OR:n käyttö voi sisältää minkä tahansa määrän predikaatteja< predicate >joka voi toimia itsenäisesti. Esitimme sinulle predikaatin< predicate >tämän liitteen erillisessä osiossa tämän kielen toiminnallisen elementin monimuotoisuuden ja monimutkaisuuden vuoksi. Hän on jatkuvasti läsnä keskusteltaessa ryhmien muista toiminnallisista osista.
PERUSKIELEN OSAT
ELEMENTIN MÄÄRITELMÄ< separator > < comment > | < space > | < newline > < comment > --< string > < newline > < space >tilaa< newline >toteutuksen määrittelemä loppu merkkijono < identifier > < letter >[{< letter or digit > | < underscore}... ] < ИМЕЙТЕ ВВИДУ: Следу строгому стандарту ANSI, символы должны быть набраны в isot kirjaimet, ja tunniste< identifier >ei saa olla pidempi kuin 18 merkkiä. ELEMENTIN MÄÄRITELMÄ< underscore > - < percent sign > % < delimiter >jokin seuraavista: , ()< > . : = + " - | <> > = < = или < string > < string >[kaikki kirjoitetut tekstit lainausmerkeissä] Huomautus: In< string >, kaksi peräkkäistä lainausmerkkiä (" ") tulkitaan yhdeksi (").< SQL term >päättyy pääkielestä riippuen. (*vain sisäkkäinen*)
TOIMINNALLISET ELEMENTIT
Seuraava taulukko näyttää toiminnallisia elementtejä SQL-komennot ja niiden määritelmät: ELEMENT DEFINITION< query >SELECT-lauseke< subquery >SELECT-lause, joka on suljettu sulkeisiin toisen lauseen sisällä, joka itse asiassa arvioidaan erikseen kunkin toisen lauseen ehdokasriville.< value expression > < primary > | < primary > < operator > < primary > | < primary > < operator > < value expression > < operator >jokin seuraavista: + - / *< primary > < column name > | < literal > | < aggregate function > | < built-in constant > | < nonstandard function > < literal > < string > | < mathematical expressio ЭЛЕМЕНТ ОПРЕДЕЛЕНИЕ < built-in constant >KÄYTTÄJÄ |< implementation-dehned constant > < table name > < identifier > < column spec > [< table name > | < alias >.]< column name > < grouping column > < column spec > | < integer > < ordering column > < column spec > | < integer > < colconstraint >EI NULL | AINUTLAATUINEN | TARKISTA (< predicate >) | ENSISIJAINEN AVAIN | VIITTEET< table name >[(< column name >)] < tabconstraint >UNIQUE (< column list >) | TARKISTA (< predicate >) | ENSISIJAINEN AVAIN (< column list >) | ULKOINEN AVAIN (< column list >) VIITTEET< table name >[(< column list >)] < defvalue >OLETUSARVO =< value expression > < data type >Kelvollinen tietotyyppi (katso liite B, jos haluat kuvauksen ANSI:n tarjoamista tyypeistä, tai liite C muista yleisistä tyypeistä.)< size >Arvo riippuu< data type >(Katso liite B.)< cursor name > < identifier > < index name > < identifier > < synonym > < identifier >(*epästandardi*)< owner > < Authorization ID > < column list > < column spec > .,.. < value list > < value expression > .,.. < table reference > { < table name > [< alias >] } .,..PREDIKAATIT
Seuraavassa on luettelo eri predikaattityypeistä< predicate >kuvattu seuraavilla sivuilla:
< predicate > ::=
{ < comparison predicate > | < in predicate > | < null predicate > | < between predicate > | < like predicate > | < quantified predicate > | < exists predicate > } < predicate >on lauseke, joka voi olla tosi, epätosi tai tuntematon, paitsi< exists predicate >Ja< null predicate >, joka voi olla vain totta tai tarua.
Tuntematon vastaanotetaan, jos NULL-arvot estävät vastaanotetun vastauksen tulostuksen. Tämä tapahtuu milloin tahansa NULL arvo vertaa mihin tahansa arvoon. Vakiooperaattorit Boolen arvoa - AND, OR ja NOT - voidaan käyttää predikaatin kanssa. EI tosi = epätosi, EI epätosi = tosi ja EI tuntematon = tuntematon. AND- ja OR-tulokset yhdessä predikaattien kanssa on esitetty seuraavissa taulukoissa:
JA JA tosi Väärin Tuntematon Tosi tosi väärä tuntematon Väärä väärä väärä väärä Tuntematon tuntematon epätosi tuntematon TAI tosi Väärä Tuntematon Todella totta totta totta Väärä totta tuntematon Tuntematon tosi tuntematon tuntematon
Nämä taulukot luetaan samalla tavalla kuin kertotaulukko: yhdistät rivien tosi, väärät tai tuntemattomat arvot niiden sarakkeisiin saadaksesi tuloksen hiusristikkoon. Esimerkiksi JA-taulukossa kolmas sarake (Tuntematon) ja ensimmäinen rivi (True) risteyksessä oikeassa yläkulmassa antavat tuloksen - tuntematon, toisin sanoen: True AND Tuntematon = tuntematon. Laskujen järjestys määräytyy suluissa. He eivät esittele itseään joka kerta. EI arvioidaan ensin, sen jälkeen AND ja OR. Erilaisia tyyppejä predikaatit< predicate >käsitellään erikseen seuraavassa jaksossa.
< comparison predicate >(vertailupredikaatti)
Syntaksi
< value expresslon > < relational op > < value expresslon >
|
< subquery >
< relatlonal op > :: =
=
| <
|
>
| <
| >=
| < >
Jos jompikumpi< value expression >= NULL, tai< comparison predicate
>= tuntematon; toisin sanoen se on totta, jos vertailu on tosi tai epätosi, jos vertailu on epätosi.
< relational op >on vakiomatemaattiset arvot numeerisia arvoja; muille arvotyypeille nämä arvot ovat toteutuskohtaisia.
Molemmat< value expression >on oltava vertailukelpoisia tietotyyppejä. Jos alikysely< subquery >käytetään, sen tulee sisältää yksi lauseke< value expression >SELECT-lauseessa, jonka arvo korvaa toisen lausekkeen< value
expression >vertailupredikaatissa< comparision predicate >, joka kerta< subquery >todella täyttynyt.
< between predicate >
Syntaksi
< value expression >VÄLILLÄ< value expression >
JA< value expression >
< between predicate >- A B:N JA C:N VÄLILLÄ on sama merkitys kuin< predicate >- (A >= B JA< = C). < between predicate >jolle A EI B:N JA C:N VÄLILLÄ on sama merkitys kuin EI (B:N JA C:N VÄLILLÄ).< value expression >voidaan päätellä käyttämällä epätyypillistä kyselyä< subquery >(*epästandardi*).
< in prediicate >
Syntaksi
< value expression >IN< value list > | < subquery
>
Luettelo arvoista< value list >koostuu yhdestä tai useammasta suluissa olevasta arvosta, jotka erotetaan pilkuilla, joilla on vertailukelpoisia< value expression >tietotyyppi. Jos käytetään alikyselyä< subquery >, sen tulee sisältää vain yksi lauseke< value expression >SELECT-lauseessa (mahdollisesti enemmän, mutta tämä on ANSI-standardin ulkopuolella). Alakysely< subquery >itse asiassa se suoritetaan erikseen jokaiselle pääkyselyn ehdokasriville, ja sen antamat arvot muodostavat arvoluettelon< value list >tälle riville. Joka tapauksessa predikaatti< in predicate >on totta, jos ilmaus< value expression >esitetään arvoluettelossa< value list >, jos EI on määritetty. Lause A NOT IN (B, C) vastaa lausetta EI (A IN (B, C)).
< like predicate >
Syntaksi
< charvalue >PITÄÄ< pattern >
< charvalue >on mikä tahansa *epästandardi* lauseke< value expression >aakkosnumeerinen tyyppi.< charvalue >ehkä standardin mukaan vain tietty sarake< column spec >. Näyte< pattern >koostuu merkkijonosta, jonka kanssa tarkistetaan vastaavuus< charvalue >. Loppusymboli< escapechar >on yksi aakkosnumeerinen merkki. Ottelu tapahtuu, jos seuraavat ehdot täyttyvät:
Jos ottelu tapahtuu,< like predicate >- tosi, jos EI määritetty. Ilmaus NOT LIKE "teksti" vastaa sanaa EI (A LIKE "teksti").
< null predicate >
Syntaksi
< column spec >ON NULL
< column spec >= ON NULL, jos tässä sarakkeessa on NULL-arvo. Se onnistuu< null predicate >tosi, jos NULL-arvoa ei ole määritetty. Lause< column spec >IS NOT NULL, sillä on sama tulos kuin NOT (< column spec >ON NULL).
< quantified predicate >
Syntaksi
< value expression > < relational op >
< quantifier >
< subquery >
< quantifier >::= KAIKKI | KAIKKI | JOITAKIN
Alikyselyn SELECT-lauseke< subquery >tulee sisältää yksi ja vain yksi arvolauseke< value expression >. Kaikki alikyselyn palauttamat arvot< subquery >muodostaa joukko tuloksia< result set >. < value expression >verrattuna operaattoriin< relational operator >, jokaisella tulosjoukon jäsenellä< result set >. Tätä vertailua arvioidaan seuraavasti:
< exists predicate >
Syntaksi:
OLEMASSA (< subquery >)
Jos alikysely< subquery >tulostaa yhden tai useamman rivin tulosteita,< exists predicate >- uskollinen; ja väärin jos toisin.
SQL-KOMENNOT
Tässä osassa kerrotaan eri SQL-komentojen syntaksista. Tämä antaa sinulle mahdollisuuden etsiä komentoa nopeasti, löytää sen syntaksi ja lyhyt kuvaus sen toiminnasta.
MUISTA: Sanalla alkavia komentoja - EXEC SQL sekä sanaan päättyviä komentoja tai lauseita - voidaan käyttää vain sisäkkäisissä SQL:issä.
ALOITA ILMOITUSOSIO
Syntaksi
EXEC SQL BEGIN DECLARE SECTION< SQL term > < host-language variable declarations >EXEC SQL END DECLARE SECTION< SQL term >
Tämä komento luo pääkieliohjelmasta osan, joka ilmoittaa sisäkkäisissä SQL-käskyissä käytettävät päämuuttujat. SQLCODE-muuttuja on sisällytettävä yhtenä ilmoitetuista isäntäkielen muuttujista.
SULJE KUORSIN
Syntaksi
SUORITA SQL CLOSE CURSOR< cursor name > < SQL term >;
Tämä komento käskee kohdistimen sulkeutumaan, minkä jälkeen siitä ei voi hakea arvoa ennen kuin se avataan uudelleen.
SITOA (TYÖTÄ)
Syntaksi
Tämä komento jättää ennalleen kaikki tietokantaan tehdyt muutokset, kunnes nykyinen tapahtuma päättyy ja uusi tapahtuma alkaa.
LUO HAKEMISTO
(*EI STANDARDI*)
Syntaksi
LUO HAKEMISTO< Index name >
PÄÄLLÄ< table name > (<
column list >);
Tämä komento luo tehokkaan reitin kanssa nopea pääsy etsiäksesi rivejä, jotka sisältävät määritetyt sarakkeet. Jos määritetään UNIQUE, taulukko ei voi sisältää päällekkäisiä arvoja näissä sarakkeissa.
LUO SYNONYMI (*EI STANDARDI*)
(LUO SYNONYMI) (*EI STANDARDI*)
Syntaksi
LUO JULKINEN SYNONYMI< synonym >FOR
< owner >.< table
name >;
Tämä komento luo taulukolle vaihtoehdon (synonyymin). Synonyymi kuuluu sen luojalle ja itse taulukko yleensä toiselle käyttäjälle. Käyttämällä synonyymiä sen omistajan ei tarvitse viitata taulukkoon sen koko nimellä (mukaan lukien sen omistaja). Jos JULKINEN on määritetty, synonyymi kuuluu JÄRJESTELMÄ-hakemistoon ja on siksi kaikkien käyttäjien käytettävissä.
LUO TAULU
Syntaksi
LUO TAULU< table name >
({< column name > < data type
>[< size >]
[< colconstralnt > . . .]
[< defvalue
>]} . , . . < tabconstraint > . , . .);
Komento luo taulukon tietokantaan. Tämän taulukon omistaa sen luoja. Sarakkeet käsitellään nimijärjestyksessä.< data type
>- määrittää tietotyypin, jonka sarake sisältää. Vakio< data
type >kuvattu lisäyksessä B; kaikki muut käytetyt tietotyypit< data type >, käsitellään liitteessä C . Koko arvo< size >riippuu tietotyypistä< data type
>.
< colconstraint >Ja< tabconstraint >asettaa rajoituksia arvoille, jotka voidaan syöttää sarakkeeseen.
< defvalue >määrittää (oletus) arvon, joka lisätään automaattisesti, jos tälle riville ei ole määritetty muuta arvoa. (Katso luvusta 17 lisätietoja itse CREATE TABLE -komennosta ja luvusta 18 JA lisätietoja rajoituksista ja< defvalue >).
LUO NÄKYMÄ
Syntaksi
LUO NÄKYMÄ< table name >
AS< query >
;
Näkymää käsitellään kuten mitä tahansa taulukkoa SQL-komennot. Kun komento viittaa taulukon nimeen< table name >, pyyntö< query >suoritetaan, ja sen tulos vastaa tässä komennossa määritetyn taulukon sisältöä.
Joitakin näkymiä voidaan muokata, mikä tarkoittaa, että muokkauskomennot voidaan suorittaa näille näkymille ja välittää taulukkoon, johon kyselyssä viitattiin< query >. Jos WITH CHECK OPTION on määritetty, tämän muutoksen on myös täytettävä predikaattiehto< predicate >pyynnössä< query >.
ILMOITTAA KOHDISTIN
Syntaksi
EXEC SQL DECLARE< cursor name >KURSORI FOR
< query >< SQL
term >
Tämä komento sitoo ne kohdistimeen< cursor name >, pyynnöstä< query >. Kun kohdistin on auki (katso OPEN CURSOR), pyyntö< query >suoritetaan, ja sen tulos voidaan hakea (FETCH-komennolla) ulostuloa varten. Jos kursori on muokattavissa, kysely viittaa taulukkoon< query >, voi saada muutoksen sisältöön käyttämällä kohdistimen muokkaustoimintoa (katso luku 25 muokattavista kohdistimista).
POISTAA
Syntaksi
POISTA LÄHTEESTÄ< table name >
{ ; }
| MISSÄ NYKYINEN< cursorname >< SQL term >
Jos WHERE-lause puuttuu, KAIKKI rivit taulukosta poistetaan. Jos WHERE-lause käyttää predikaattia< predicate >, rivit, jotka täyttävät tämän predikaatin ehdon< predicate >poistetaan. Jos WHERE-lauseessa on CURRENT OF -argumentti kohdistimen nimessä< cursor name >, rivi taulukosta< table name >johon tällä hetkellä viitataan kohdistimen nimellä< cursor name >poistetaan. WHERE CURRENT -lomaketta voidaan käyttää vain sisäkkäisissä SQL:issä ja vain muokattavilla kohdistimilla.
EXEC SQL
Syntaksi
EXEC SQL< embedded SQL command > < SQL term >
EXEC SQL:ää käytetään osoittamaan kaikkien toisella kielellä sisäkkäisten SQL-komentojen alku.
FETCH
Syntaksi
EXEC SQL FETCH< cursorname >
INTO< host-varlable llst ><
SQL term >
FETCH hyväksyy lähdön kohteesta nykyinen linja pyytää< query >, lisää sen päämuuttujien luetteloon< host-variable list >, ja siirtää kohdistimen kohtaan seuraava rivi. Lista< host-variable list >voi sisältää indikaattorimuuttujan kohdemuuttujana (katso luku 25.)
MYÖNTÄ (SIIRTOOIKEUDET)
Syntaksi (vakio)
MYÖNTÄ KAIKKI
| (VALITSE
| LISÄÄ
| POISTAA
| PÄIVITYS [(< column llst >)]
| VIITTEET [(< column llst >)l) . , . .
PÄÄLLÄ< table name > . , . .
YLEISÖLLE |< Authorization ID > .
, . .
;
ALL-argumentti, joko etuoikeuksilla tai ilman, sisältää jokaisen oikeudet luettelossa. JULKINEN sisältää kaikki nykyiset käyttäjät ja kaikki tulevaisuudessa luodut käyttäjät. Tämän komennon avulla voit siirtää oikeuksia suorittaa toimintoja määritetyn nimen taulukossa. REFERENCES antaa sinun antaa käyttöoikeudet sarakeluettelon sarakkeiden käyttöön< column list >emoavaimena vieraalle avaimelle. Muut oikeudet koostuvat oikeudesta suorittaa komentoja, joiden oikeudet on merkitty niiden nimillä taulukossa. UPDATE on samanlainen kuin REFERENCES ja voi asettaa rajoituksia tietyille sarakkeille. GRANT OPTION mahdollistaa näiden oikeuksien siirtämisen muille käyttäjille.
Syntaksi (ei-standardi)
GRANT DBA
| RESURSSI
| YHTEYS... .
TO< Authorization ID
> . , . .
| < privilege > . , . . }
LÄHETTÄJÄ ( JULKINEN
| < Authorization ID > . , . . };
Etuoikeus< privelege >voi olla mikä tahansa GRANT-komennossa määritellyistä. REVOKE:n antavalla käyttäjällä on oltava samat oikeudet kuin GRANT:in antavalla käyttäjällä. ON-lausetta voidaan käyttää, kun tietyntyyppistä etuoikeutta käytetään erikoisobjektissa.
PALAUTUS (TYÖ)
(PALAUTUS) (TAPAHTUMAT)
Syntaksi
Komento kumoaa kaikki nykyisen tapahtuman aikana tietokantaan tehdyt muutokset. Se myös lopettaa nykyisen tapahtuman ja aloittaa uuden tapahtuman.
VALITSE
Syntaksi
VALITSE ( ERI | KAIKKI]< value expression > . , . . } / *
FROM< table reference
> . , . .
. , . . ];
Tämä lauseke järjestää kyselyn ja hakee arvot tietokannasta (katso Luku 3 - Luku 14). Seuraavat säännöt ovat voimassa:
SELECT-lause arvioi jokaisen ehdokasrivin taulukossa, jossa rivit näytetään itsenäisesti. Ehdokasmerkkijono määritellään seuraavasti:
Jokainen ehdokasrivi tuottaa arvoja, jotka muodostavat predikaatin<
predicate >WHERE-lauseessa on tosi, epätosi tai tuntematon. Jos GROUP BY:tä ei käytetä, kukin< value expression >sovelletaan vuorotellen jokaiseen ehdokasmerkkijonoon, jonka arvo tekee predikaatista tosi, ja tämän toiminnon tulos on tulos.
Jos GROUP BY on käytössä, ehdokasrivit yhdistetään käyttämällä koontifunktioita. Jos predikaattia ei ole<
predicate >ei asetettu, jokainen lauseke< value expression >koskee jokaista ehdokasriviä tai ryhmää. Jos DISTINCT on määritetty, kaksoisrivit poistetaan tulosteesta.
UNIONIN
Syntaksi
< query >(UNITO< query > } . . . ;
Kahden tai useamman kyselyn tulostaminen< query >yhdistetään. Jokainen pyyntö< query >tulee sisältää sama numero< value expression >SELECT-lauseeseen ja siinä järjestyksessä, että 1...n jokaisesta on tietotyyppiyhteensopiva< data type >ja koko< size >1.. n kanssa kaikki muut.
PÄIVITTÄÄ
Syntaksi
PÄIVITTÄÄ< table name >
SET (< column name > = < value
expression > } . , . .
([ MISSÄ< predlcate >]; }
| {
< SQL term >]}
UPDATE muuttaa arvoja jokaisessa nimetyssä sarakkeessa< column name >vastaavaan arvoon< value expression >. Jos WHERE-lause käyttää predikaattia< predicate >, sitten vain taulukon rivit, joiden nykyiset arvot muodostavat kyseisen predikaatin< predicate >oikein, muutoksiin pidätetään. Jos WHERE käyttää CURRENT OF -lausetta, arvot taulukon rivillä nimeltä< table name >sijaitsee kursorissa nimen kanssa< cursor name >ovat muuttumassa. WHERE CURRENT OF sopii käytettäväksi vain sisäkkäisissä SQL:issä ja vain muokattavissa olevien kohdistimien kanssa. Jos WHERE-lausetta ei ole, kaikki rivit muutetaan.
AINA (JOKA KERTA AS)
Syntaksi
SUORITA SQL AINA< SQLcond > < actlon > < SQL term
>
< SQLcond >::=SQLERROR | EI LÖYTY | SQLVAROITUS
(viimeinen on epästandardi)
< action >::=JATKA | GOTO< target >| GOTO< target >
< target >:: = riippuu isäntäkielestä
Syntaksi:
* Missä kentät1— valintakentät pilkuilla erotettuina, voit myös määrittää kaikki kentät *-merkillä; taulukko— sen taulukon nimi, josta poimimme tiedot; ehdot— näytteenottoolosuhteet; kentät2— kenttä tai kentät, jotka on erotettu pilkuilla lajittelua varten; laskea— ladattavien rivien määrä.
* Hakasulkeissa olevaa kyselyä ei vaadita tietojen hakemiseen.
Yksinkertaisia esimerkkejä selectin käytöstä
1. Normaali datanäytteenotto:
> SELECT * FROM käyttäjiltä
2. Tietojen otos yhdistämällä kaksi taulukkoa (JOIN):
SELECT u.name, r.* FROM käyttäjiltä u LIITY user_rights r PÄÄLLÄ r.user_id=u.id
*V tässä esimerkissä tiedoista otetaan näytteitä ja taulukoita yhdistetään käyttäjiä Ja user_rights. Heitä yhdistävät kentät user_id(käyttäjien_oikeudet-taulukossa) ja id(käyttäjät). Nimikenttä haetaan ensimmäisestä taulukosta ja kaikki kentät toisesta.
3. Näytteenotto aika- ja/tai päivämäärävälein
a) aloituspiste ja tietty aikaväli tunnetaan:
* viimeisen tunnin tiedot valitaan (kenttä päivämäärä).
b) aloituspäivä ja lopetuspäivä ovat tiedossa:
25.10.2017 Ja 25.11.2017 .
c) alkamis- ja lopetuspäivät + kellonaika ovat tiedossa:
* Valitse data väliltä 25.03.2018 0 tuntia 15 minuuttia Ja 25.4.2018 15 tuntia 33 minuuttia ja 9 sekuntia.
d) vedä tiedot tietyltä kuukaudelta ja vuodelta:
* Poimi tiedot missä kentässä päivämäärä niille on arvoja Huhtikuu 2018 vuosi.
4. Maksimi-, minimi- ja keskiarvojen näytteenotto:
> VALITSE max(ala), min(ala), keskim(pinta-ala) maasta
* max— enimmäisarvo; min- minimaalinen; keskim- keskimäärin.
5. Merkkijonon pituuden käyttäminen:
* Tämän kyselyn pitäisi näyttää kaikki käyttäjät, joiden nimessä on 5 merkkiä.
Esimerkkejä monimutkaisemmista tai harvoin käytetyistä kyselyistä
1. Yhdistäminen valittujen tietojen ryhmittelyllä yhdeksi riviksi (GROUP_CONCAT):
*pöydästä käyttäjiä kenttätiedot haetaan id, ne kaikki on sijoitettu yhdelle riville, arvot erotetaan toisistaan pilkkuja.
2. Tietojen ryhmittely kahden tai useamman kentän mukaan:
> SELECT * FROM käyttäjiltä GROUP BY CONCAT(nimi, "::", syntymä)
* Yhteenvetona voidaan todeta, että tässä esimerkissä lataamme tiedot käyttäjätaulukosta ja ryhmittelemme ne kenttien mukaan otsikko Ja syntymästä. Ennen ryhmittelyä yhdistämme kentät yhdeksi riviksi erottimella :: .
3. Kahden taulukon tulosten yhdistäminen (UNION):
> (VALITSE id, fio, osoite, "Käyttäjät" tyypiksi FROM users)
UNIONIN
(VALITSE id, fio, osoite, "Asiakkaat" tyypiksi FROM asiakkaat)
* Tässä esimerkissä tiedot otetaan taulukoista käyttäjiä Ja Asiakkaat.
4. Esimerkki keskiarvoista ryhmiteltynä jokaiselle tunnille:
VALITSE keskiarvo(lämpötila), DATE_FORMAT(päivämääräajan päivitys, "%Y-%m-%d %H") tunniksi_päivämääräksi arkistosta GROUP BY DATE_FORMAT(päivämääräajan päivitys, "%Y-%m-%d %H")
*tästä poimitaan kentän keskiarvo lämpötila pöydältä arkisto ja ryhmittele kenttien mukaan päivämääräaika päivitys(aikajaolla jokaiselle tunnille).
LISÄÄ
Syntaksi 1:
> INSERT INTO