Strukturoitu kyselykieli
| SQL- ohjelmointikieli | |
|---|---|
| Ohjeen osat. | |
| Tekijä | Donald Chamberlin |
| Alkuperäpäivä | 1974 |
| Uusin versio | SQL: 2016 (joulukuu 2016 ) |
| Käyttö | luominen, kyselyt, tietokannan hallinta |
| Paradigmat | moniparadigma |
| Kirjoittaminen | staattinen, vahva |
| Yleiset laajennukset | .sql |
Tietojenkäsittelytieteessä SQL ( Structured Query Language ) ( / skjuːˈɛl / "SQL") on standardoitu tietokantakieli , joka perustuu relaatiomalliin ( RDBMS ) , joka on suunniteltu seuraaviin toimintoihin:
- luoda ja muokata tietokantaskeemoja (DDL = Data Definition Language );
- lisää, muokkaa ja hallitse tallennettuja tietoja (DML = Data Manipulation Language );
- tee kysely tallennetuista tiedoista (DQL = Data Query Language );
- luoda ja hallita tietojen käyttö- ja ohjaustyökaluja (DCL = Data Control Language ).
Nimestään huolimatta se ei siis ole yksinkertainen kyselykieli : jotkin sen osajoukot antavat itse asiassa mahdollisuuden luoda, hallita ja hallita tietokantoja.
Historia
SQL:n syntyi vuonna 1974 Donald Chamberlin IBM :n laboratorioissa . Se syntyi työkaluksi työskennellä relaatiomallia noudattavien tietokantojen kanssa . Tuolloin sitä kuitenkin kutsuttiin SEQUELiksi (tästä syystä SQL:n oikea IPA -ääntäminen on [ˈɛsˈkjuˈɛl] ja epävirallinen [ˈsiːkwəl]). Vuonna 1975 kehitettiin prototyyppi nimeltä SEQUEL-XRM ; sen kanssa tehtiin kokeita, jotka johtivat vuonna 1977 kielen uuteen versioon, jonka olisi alunperin pitänyt olla nimeltään SEQUEL / 2, mutta josta tuli sitten oikeudellisista syistä (nimi SEQUEL oli jo käytetty ja ennen kaikkea rekisteröity). , toisessa lentoyhtiön laajuudessa), SQL. Sille kehitettiin System R -prototyyppi , jota IBM käytti sisäiseen käyttöön ja joihinkin asiakkaisiinsa. Mutta sen menestyksen vuoksi myös muut yritykset alkoivat nopeasti kehittää SQL-pohjaisia tuotteita. Vuonna 1981 IBM aloitti joidenkin relaatiotuotteiden myynnin ja julkaisi vuonna 1983 DB2 :n, sen relaatiotietokantajärjestelmän , joka oli suosittu 1900-luvun viimeisinä vuosina . SQL:stä tuli nopeasti relaatiomallia käyttävien ohjelmistojen alan standardi.
ANSI otti sen käyttöön standardina vuodesta 1986 lähtien tekemättä merkittäviä muutoksia IBM:n alun perin kehittämään versioon. Vuonna 1987 ISO teki samoin. Tämä ensimmäinen standardiversio on nimeltään SQL / 86. Seuraavina vuosina tehtiin muita versioita, jotka olivat SQL / 89, SQL / 92 ja SQL / 2003. Tämän standardointiprosessin tarkoituksena oli luoda kieli, joka toimi kaikissa relaatiotietokantajärjestelmissä (Data Base Management Systems), mutta tätä tavoitetta ei saavutettu. Itse asiassa eri valmistajat ottivat kielen käyttöön useilla muunnelmilla ja käytännössä omaksuivat standardit tasolla, joka ei ylittänyt Ansin Entry Leveliksi määrittelemää minimiä.
Ominaisuudet
SQL on kieli tietokantojen kyselyyn ja hallintaan kyselyiksi kutsuttujen ohjelmointirakenteiden avulla . SQL:llä voit lukea, muokata, poistaa tietoja sekä harjoittaa tietokantajärjestelmän hallinta- ja hallintatoimintoja. Useimmissa toteutuksissa on komentorivikäyttöliittymä suoraa komentojen suorittamista varten vaihtoehtona vain GUI :lle .
Se suunniteltiin alun perin deklaratiivisen tyyppiseksi kieleksi , mutta se on sittemmin kehittynyt prosessirakenteiden , vuonhallintaohjeiden , käyttäjän määrittämien tietotyyppien ja useiden muiden kielilaajennusten myötä. SQL: 1999 -standardin määrittelystä lähtien monet näistä laajennuksista on otettu virallisesti osaksi SQL:ää standardin SQL/PSM-osassa.
Jotkut yleisimmistä SQL:lle kohdistetuista kritiikistä koskevat koodin siirrettävyyden puutetta eri toimittajien välillä, puuttuvien (nolla)tietojen sopimattomuutta ja toisinaan tarpeettoman monimutkaista semantiikkaa.
Rakenne
Koska SQL on deklaratiivinen kieli , se ei vaadi operaatiosarjojen (kuten pakollisten kielten ) kirjoittamista sen sijaan, että se määrittelee haetun tiedon loogiset ominaisuudet. Se on jaettu:
- Data Definition Language (DDL) - voit luoda ja poistaa tietokantoja tai muokata niiden rakennetta
- Data Manipulation Language (DML) - mahdollistaa tietojen lisäämisen, poistamisen ja muokkaamisen
- Data Control Language (DCL) - voit hallita käyttäjiä ja käyttöoikeuksia
- Kyselykieli (QL) - voit tehdä kyselyitä tietokannasta eli lukea tietoja.
- Device Media Control Language (DMCL) - voit hallita mediaa ( massamuisteja ), johon tiedot tallennetaan.
Operaattorit
Standardin SQL:n tarjoamat operaattorit on jaettu seitsemään luokkaan:
- Tehtäväoperaattorit
- Vertailuoperaattorit
- Merkkijonooperaattorit
- Aritmeettiset operaattorit
- Ehdolliset operaattorit
- Loogiset operaattorit
- Bittibittioperaattorit
Tehtäväoperaattorit
Määritysoperaattorit antavat arvon muuttujalle tai kentälle.
=Ilmaisee tehtävän eikä palauta arvoa.:=Se ilmaisee arvon määrittämisen muuttujalle, jota ei ole vielä muotoiltu, eikä palauta arvoa.
Vertailuoperaattorit
Vertailuoperaattoreita käytetään määrittämään arvojen yhtäläisyyksiä ja epätasa-arvoja sekä etsimään tiedoista. Alla on taulukkokaavio:
=Ilmaisee tasa-arvon kahden numeerisen arvon tai merkkijonon välillä (jos sitä ei käytetä määritysoperaattorina)ISSitä käytetään tarkistamaan, onko arvo NULL vai vastaako se Boolen arvoa (TOSI, EPÄTOSI, TUNTEMATTOMA).LIKEIlmaisee samankaltaisuuden kahden kirjaimellisen arvon välillä: LIKE-operaattorilla on mahdollista käyttää vertailuissa erikoismerkkejä% (korvaa mielivaltaisen määrän kirjaimia) ja _ (korvaa mielivaltaisen kirjaimen)<Määrittää, onko yksi arvo pienempi kuin toinen>Määrittää, onko yksi arvo suurempi kuin toinen<=Määrittää, onko yksi arvo pienempi vai yhtä suuri kuin toinen>=Määrittää, onko jokin arvo suurempi vai yhtä suuri kuin toinen<>Määrittää, eroavatko kaksi arvoa toisistaan!=vastaava<>BETWEEN ... ANDHakee arvon kahden arvon väliltäINMäärittää, sisältyykö arvo mahdollisten arvojen luetteloonEXISTSMäärittää, palauttaako tietty alikysely arvonANYoSOMEMäärittää, palauttaako tietty alikysely vähintään yhden määritetyistä arvoistaALLMäärittää, palauttaako tietty alikysely kaikki halutut arvot
Jotkut näistä operaattoreista vastaavat vastakkaista operaattoria käyttämällä termiä NOT:
IS NOTNOT LIKENOT BETWEENNOT INNOT EXISTS
Merkkijonooperaattorit
Merkkijonooperaattorit ottavat kaksi merkkijonoa operandina ja palauttavat Boolen tai merkkijonoarvon.
LIKE-operaattori
Operaattori LIKE(käytetään myös MATCHES) on yleensä avainsana hakukriteereille ja hakukoneen tekemille kyselyille.
Alaviiva ( _) -merkki, jota kutsutaan wildchariksi , etsii yhtä mielivaltaista merkkiä; symbolia %kutsutaan jokerimerkkioperaattoriksi ja se etsii mielivaltaista merkkijonoa, toisin sanoen numeroarvoaluetta. Voit etsiä alaviivaa lausekkeesta käyttämällä syntaksia [_](katso myös alla).
Microsoft Accessin syntaksi eroaa hieman tästä kansainvälisestä standardista ja on täydellisempi. Alaviivasymbolin sijasta sitä käytetään ?yksittäisen merkin (sekä numeron että kirjaimen) etsimiseen; symbolin sijasta %jokerimerkki-operaattori antaa *. Accessin avulla voit etsiä yksittäistä numeerista arvoa käyttämällä tiivistenäppäintä (tai tiivistenäppäintä ) #ja etsiä merkkiä (kirjainta ja numeroa) arvojoukon sisältä tai ulkopuolelta syntaksilla []ja [!]. Väli voi olla täsmällinen tai kollektiivinen: esimerkiksi [AF] tarkoittaa kirjaimia A:n ja F:n välillä, kun taas [A, F] tarkoittaa vain näiden kahden kirjaimen etsintää. Esimerkiksi lause, kuten "LIKE P [! AF] C" etsii sanoja, jotka alkavat "P" ja päättyvät "C" ja toisessa kirjaimessa ei ole merkkejä kirjainten A ja F välillä. Tämä toteutuksen täydellisyys LIKE johtuu siitä, että Access ei ennakoi monimutkaisempia operaattoreita, kuten SAMANLAISET ja REGEXP.
Tästä täydellisyydestä huolimatta OLE DB -ohjaimessa Windowsille on tunnettu virhe: jokerimerkkioperaattoria *voidaan käyttää vain sovelluksessa, kun taas klassista symbolia on käytettävä OLE DB / ODBC:n kautta %.
SAMANLAISET JA REGEXP-operaattorit
SAMANLAISET - operaattori on osa SQL - standardia ja sen avulla voit tarkistaa , vastaako merkkijono annettua säännöllistä lauseketta . Käytetty syntaksi eroaa Perlin ja POSIXin perustamista de facto -standardeista, ja tästä syystä valmistajat ottavat tämän operaattorin käyttöön melko rajoitetusti.
REGEXP-operaattori on yleisempi ja sen avulla voit myös tarkistaa, vastaako merkkijono annettua säännöllistä lauseketta. Käytetty syntaksi vaihtelee SQL-toteutuksen mukaan, mutta yleensä se noudattaa Perlin tai POSIXin asettamia de facto -standardeja.
SQL sisältää myös täydentävät operaattorit, jotka EIVÄT samankaltaisia kuin REGEXP ja NOT REGEXP .
BINARY
Tämän operaattorin tehtävänä on tehdä säännöllisten lausekkeiden käytöstä kirjainerottelua, eli varmistaa, että isot kirjaimet eroavat pienistä kirjaimista.
COLLATE
Tätä operaattoria käytetään määrittämään, mitä lajittelua (merkkijoukon lajittelun sääntöjoukkoa) käytetään nykyisessä lausekkeessa.
Aritmeettiset operaattorit
Aritmeettiset operaattorit hyväksyvät numeerisia operaattoreita (kokonaisluku tai desimaali) ja palauttavat vastaavan aritmeettisen operaation tuloksen. Alla on taulukkokaavio:
Käyttäjän kuvaus
+Tee lisäys tai jätä luvun etumerkki ennalleen-Vähennä tai käännä luvun etumerkki*Tee kertolasku/Tee jakoMODPalauttaa jaon loppuosanDIVPalauttaa jaon kokonaislukuosan
Ehdolliset operaattorit
SQL:n ainoa ehdollinen operaattori on WHERE (jos) ja sitä käytetään kohdistettujen hakuehtojen määrittämiseen.
Loogiset operaattorit
SQL:n loogiset operaattorit kuuluvat Boolen loogisiin operaattoreihin ja ovat AND (ja), OR (tai tai), NOT (ei), XOR (kutsutaan myös "exclusive OR").
- Looginen AND -operaattori , joka sitoo kaksi ehtoa, palauttaa arvon TOSI, jos ja vain jos molemmat operandit ovat tosi.
- Looginen TAI - operaattori , joka sitoo kaksi ehtoa, palauttaa arvon TRUE, jos ja vain jos ainakin yksi operandeista on tosi.
- NOT - operaattori hyväksyy vain yhden operandin ja palauttaa käänteisen arvon: false, jos tämä on tosi, tosi, jos tämä on epätosi.
- XOR - operaattori , joka hyväksyy kaksi ehtoa, palauttaa TRUE, jos ja vain jos vain yksi operandeista on tosi.
Bittioperaattorit
SQL-standardi ei tarjoa tätä operaattoriperhettä, mutta se on läsnä monissa toteutuksissa. Nämä operaattorit suorittavat AND-, OR-, NOT- ja XOR-operaatioita bittitasolla.
Yleiset säännöt operaattoreille
Lauseke koostuu arvosta tai operaatiosta, joka palauttaa arvon. Tämä määritelmä on rekursiivinen: lausekkeet voivat olla sisäkkäisiä. Koska operaattorit palauttavat aina arvon, on täysin laillista yhdistää ne yhteen muodostamaan yhä monimutkaisempia ehtoja.
Hakasulkujen () käyttö hakulausekkeiden sisällä mahdollistaa operaattoreiden tärkeysjärjestyksen muokkaamisen tai eksplisiittisen määrittämisen, eli niiden käsittelyjärjestyksen. Kun yhdistelmälauseke kirjoitetaan ilman hakasulkeita, sovelletaan kielen tarjoamien operaattoreiden välistä etusijaa.
DDL: Data Definition
DDL-kieltä ( Data Definition Language ) käytetään tietokannan objektien luomiseen, muokkaamiseen tai poistamiseen. DDL-komennot määrittelevät tietokannan ja siten sen sisältämän tiedon rakenteen, mutta ne eivät tarjoa työkaluja datan muokkaamiseen, jolle DML:ää ( Data Manipulation Language ) käytetään. Käyttäjällä on oltava tarvittavat oikeudet toimiakseen tietokantarakenteessa, ja nämä oikeudet määrätään DCL:n ( Data Control Language ) kautta.
Elementary Domains
SQL tarjoaa kuusi perhettä alkeistoimialueita, joista voidaan määrittää skeeman attribuutteihin yhdistettävät toimialueet.
DML: Data Manipulation
DML ( Data Manipulation Language ) tarjoaa komentoja tietojen lisäämiseen, muokkaamiseen ja poistamiseen tietokannan taulukoissa. Näiden tietojen rakenteen on oltava jo määritetty DDL:n kautta. Lisäksi käyttäjälle on etukäteen myönnettävä lupa käyttää tällaisia tietoja DCL:n kautta.
Lisää
Komennon tehtävänä on lisätä tietoja taulukoihin .
Arvojen kohdesarakkeet (tai -kentät) voidaan ilmoittaa komennossa tai olla ilmoittamatta. Jos niitä ei ole ilmoitettu, arvo on välitettävä komennolle jokaiselle taulukon sarakkeelle noudattaen tiukasti itse sarakkeiden järjestystä. Jos taas kohdesarakkeet on ilmoitettu, on mahdollista ilmoittaa vain ne sarakkeet, joiden arvot välitetään, edellyttäen että taulukon kaikkien ei nollasarakkeiden arvot (jotka eivät voi olla nollia) syötetään joka tapauksessa.
Itse lisäyskomento toimii lisäämällä taulukkoon vain yhden rivin kerrallaan. On kuitenkin mahdollista lisätä useampi kuin yksi rivi "automaattisesti" välittämällä lisättävälle riville riviä (tai monikkoa), jotka ovat tuloksena valintakomennolla, kunhan nämä rivit ovat yhteensopivia taulukon sarakkeiden kanssa, joissa tiedot lisätään.
Komentosyntaksin lisäys
- Yksinkertainen lisäys:
INSERT INTO taulukon_nimi
ARVOT ( arvoluettelo , kaikki , taulukon kenttien järjestystä noudattaen , esim . " lahjoitettu " ) ; _ _
tai
INSERT INTO taulukon_nimi ( lisäykseen liittyvien kenttien luettelo ) ARVOT ( arvoluettelo , kaikki , noudattaen yllä ilmoitettua kenttien järjestystä , esimerkki " lahjoitettu " ) ; _ _ _ _
- Lisää valitsemalla:
INSERT INTO taulukon_nimi ( luettelo lisäykseen liittyvistä kentistä , esim . " lahjoitettu " ) AS SELECT ... ;
Päivitä
Päivityskomennolla on kolmoistoiminto, joka muuttaa taulukoiden tietoja .
Kunkin muokattavan kentän nimi tulee ilmoittaa SET - avainsanan jälkeen, ja sen jälkeen tulee olla (yhtä)-symboli =ja uusi arvo, joka sen on saatava.
Voit muuttaa useita kenttiä samalla rivillä yhdellä päivityskomennolla erottamalla ne toisistaan symbolilla ,(pilkulla).
Yleinen komento päivittää kaikki taulukon rivit. Voit rajoittaa määrää käyttämällä lisäavainsanaa WHERE , jonka avulla voit tehdä laadullisen valinnan riveistä asettamalla ehtoja rivien tiedoille ennen päivitystä.
Komentosyntaksin päivitys
- Yleinen päivitys:
PÄIVITYS taulukon_nimi
SET kentän_nimi1 = 'arvo1_uusi' ,
kentän_nimi2 = 'arvo2_uusi' ,
...
;
- Päivitys ehdolla:
PÄIVITYS taulukon_nimi
SET kentän_nimi1 = 'arvo1_uusi' ,
kentän_nimi2 = 'arvo2_uusi'
WHERE kentän_nimi3 = 'arvo' ;
Poista
Poista - komennon tehtävänä on tietojen poistaminen taulukoista.
Kuten päivityskomento, myös delete voi toimia yleisellä tavalla poistamalla kaikki taulukon rivit tai se voi tunnistaa poistettavat rivit käyttämällä lisäavainsanaa WHERE ja siihen liittyvää ehtoa (tai ehtoja).
Komentosyntaksi poista
- Yleinen poisto:
POISTA taulukon_nimi ; _
- Poista ehdolla:
DELETE FROM taulukon_nimi
WHERE kentän_nimi = 'arvo' ;
Katkaise taulukko
Kuten jo mainittiin, Delete ilman Where-lausetta poistaa kaikki rivit määritetystä taulukosta. On kuitenkin toinen tapa tyhjentää taulukko kokonaan: Katkaise taulukko -komento . Jotkut DBMS-järjestelmät toteuttavat tämän komennon (jota ei ole SQL-standardissa) nopeammin kuin Poista, esimerkiksi poistamalla datatiedoston lukematta sitä ja luomalla sen uudelleen tyhjäksi. Tämä kuitenkin yleensä estää joidenkin lisävarustetietojen, kuten poistettujen rivien määrän, palauttamisen.
Katkaise taulukkokomennon syntaksi
KATKANA [ TABLE ] taulukon_nimi
Tapahtuma
Tapahtuma on joukko ohjeita, jotka liittyvät läheisesti toisiinsa. Jos jostain syystä (tietokantajärjestelmän sisäinen virhe, SQL-lauseiden virhe, järjestelmävirhe) jokin käskyistä ei valmistu, koko tapahtuma peruutetaan. Transaktion sanotaan siksi olevan atomioperaatio , eli se ei ole jaettavissa: jos sitä ei suoriteta kokonaan, sitä ei suoriteta ollenkaan. Tämä on yksi eniten käytetyistä työkaluista tietojen eheyden varmistamiseksi.
Kunnes tapahtuma on onnistunut, sen tekemät muutokset näkyvät vain tapahtuman aloittaneelle istunnolle. Eristystasosta riippuen muut käyttäjät voivat käyttää vanhempaa versiota tiedoista tai heidät voidaan asettaa pitoon, kunnes tapahtuma on valmis.
Kaikki DBMS-järjestelmät eivät tue tapahtumia, kun taas toiset tukevat niitä vain tietyissä olosuhteissa (esimerkiksi MySQL :ssä niitä tuetaan vain tietyntyyppisissä taulukoissa). Lisäksi DBMS voi rajoittaa tapahtumat SQL:n osajoukkoon (esimerkiksi MySQL:ssä, jos DDL-komento annetaan, nykyinen tapahtuma päättyy).
Jotkut tietokantajärjestelmät sallivat myös sisäkkäiset tapahtumat. Yhden tapahtuman tekemät muutokset, jotka sisältyvät toiseen tapahtumaan, ovat tehottomia, kunnes uloin tapahtuma on suoritettu onnistuneesti.
Semanttisesti hyvin samanlainen vaihtoehto on tallennuspisteet. Niiden avulla voit tallentaa version tiedoista kesken tapahtuman. Tämän jälkeen on mahdollista peruuttaa koko tapahtuma tai palauttaa jokin aiemmin asetetuista tallennuspisteistä. Tämä tallennus voidaan tehdä ehdollisen koodin lohkossa, mikä tekee tästä ominaisuudesta paljon dynaamisemman kuin sisäkkäiset tapahtumat.
Aloita transaktio
Jos haluat nimenomaisesti aloittaa tapahtuman, käytä BEGIN TRANSACTION -komentoa . Tämän komennon puuttuminen aiheuttaa sen, että jokainen lause toimii erillisenä tapahtumana.
Komentosyntaksi aloita tapahtuma
BEGIN TRANSACTION [ tapahtuman_nimi ];
Sitoudu
COMMIT -komentoa käytetään tapahtuman vahvistamiseen . Sen avulla tallennetaan kaikki aiemmin tietoihin tehdyt muutokset.
Komennon syntaksi commit
SITO [ TAPAHTUMA ] [ tapahtuman_nimi ];
Palautus
ROLLBACK -komentoa käytetään tapahtuman peruuttamiseen . Sen avulla kaikki aiemmin tietoihin tehdyt muutokset (tapahtuman alusta alkaen) peruuntuvat.
Komentosyntaksin palautus
PALAUTUS [ TAPAHTUMA ] [ tapahtuman_nimi ];
DQL: Tietokysely
DQL (data query language) sisältää komennot tietokannan tietojen lukemiseen ja käsittelyyn. Nämä tiedot on syötetty DML:n kautta DDL:llä luotuihin rakenteisiin, kun taas DCL määrittää, voiko käyttäjä käyttää niitä.
Valitse
Select - komennolla meillä on mahdollisuus poimia tiedot kohdistetusti tietokannasta.
Valitse-komennon syntaksi
VALITSE [ KAIKKI | ERILÄ | TOP ] Selection_elements_list FROM table_list_references
[ WHERE ehdollinen_lauseke ] [ GROUP BY sarakeluettelo [ HAVING Condition ] ] [ ORDER BY sarakeluettelo ] ;
missä se on:
- list_elements_selection on luettelo purettavista kentistä (erotettu toisistaan pilkulla);
- reference_list_table on luettelo taulukoista, joista tiedot poimitaan;
- ehdollinen_lauseke edustaa ehtojen luetteloa, eli vaatimuksia, jotka kentän on täytettävä, jotta se voidaan hakea kyselystä (ehdot määritetään käyttämällä vertailuoperaattoreita, loogisia liittimiä ja vertailevia, kuten välillä , in , kuten , on tyhjä );
- sarakeluettelo on sarake tai sarakkeet, joita on käytettävä viitteenä tulostietojen lajittelussa.
Oletusarvoisesti SELECT -komento toimii ALL - menetelmällä , mutta määrittämällä DISTINCT (tai UNIQUE toteutuksista riippuen) on mahdollista poistaa päällekkäiset rivit tuloksista.
GROUP BY -lausetta käytetään ryhmittelemään tulokset monikon mukaan, kun taas suhteellista HAVING -ehtoa käytetään tulosten suodattamiseen.
VALITSE toimittaja , summa ( laskun_määrä )
laskuista GROUP BY toimittajan MUKAAN HAVING summa ( laskun_määrä ) > 10 . 000
Tässä tapauksessa toimittajat, joiden kokonaisliikevaihto on yli 10 000, suodatetaan pois.
ORDER BY -lausetta käytetään lajittelemaan tulokset yhden tai useamman kentän perusteella.
LIMIT (tai TOP , toteutuksista riippuen) rajoittaa annettujen rivien määrää: LIMIT 10 ottaa taulukon ensimmäiset 10 riviä. On myös mahdollista hylätä useita rivejä tulosten alussa lisäämällä parametri LIMIT- tai OFFSET - lauseeseen .
Vakio-SQL:ssä ei ole lajittelua, jos et määritä ORDER BY -lausetta , joten ilman sitä LIMITilla on myös arvaamaton vaikutus.
Esimerkki on seuraava:
SELECT DISTINCT sukunimi , etunimi , kaupunki_asunto
FROM käyttäjiltä
WHERE vuotta > = 18
ORDER BY sukunimi
Tämä kysely poimii luettelon kaikista aikuisista käyttäjistä lajittelemalla tulos sukunimen mukaan. GROUP BY - ja ORDER BY - lauseissa kenttien nimet voidaan korvata SELECT - toiminnon järjestystä vastaavalla numerolla : viimeisessä tapauksessa ORDER BY sukunimellä voidaan kirjoittaa ORDER BY 1 .
Valinnan määritelmä on kuitenkin paljon laajempi, se tarjoaa monia muita vaihtoehtoja , mutta periaatteessa suurin osa kyselyistä koostuu näistä vaihtoehdoista.
SELECT DISTINCT *
käyttäjiltä _
tähdellä voit sisällyttää kaikki käyttäjätaulukon sarakkeet valintaan
Valinnan avulla on myös mahdollista suorittaa laskelmia:
Valitse DISTINCT cod_art , hinta yksikkö * varasto AS Yhteensä , varasto * rasitus AS TotIngombro ; artikkeleista _
tämä tuottaa poimittua dataa, mutta myös laskettua tietoa. AS-lausetta käytetään antamaan nimi uudelle sarakkeelle, joka näytetään suoritetun valinnan tuloksessa.
Monet DBMS-järjestelmät tukevat epästandardia LIMIT-lauseketta, joka on sijoitettava viimeiseksi ja joka voi olla kolmea muotoa:
LIMIT < numero_tulokset >
LIMIT < sijainti_ensimmäinen_tulos > , < numero_tulokset >
RAJA < numero_tulokset > [ OFFSET < position_ensimmäinen_tulos > ]
number_results on poimittavien rivien määrä. pos_first_result on ensimmäisen purettavan rivin indeksi. Yhdessä niillä voidaan jakaa tulokset lohkoiksi ja lukea niitä vähän kerrallaan (esimerkiksi DBA:n mukavuuden vuoksi tai web-sovelluksen näyttämien tulosten sivuttamiseen).
Liity
Valintamuoto, joka koostuu useista taulukoista, joissa on yksi tai useampi yhteinen kenttä, saadaan Join -lauseen kautta .
Alakysely
Alikyselyt voidaan lisätä minne tahansa SQL-kielen salliessa lausekkeen, joka palauttaa yhden arvon, ja FROM-lauseeseen. Tässä toisessa tapauksessa alikyselyjä kutsutaan myös johdetuiksi taulukoiksi.
Varsinaiset alikyselyt voivat palauttaa yksittäisen arvon tai joukon tuloksia, tapauksen mukaan. Melko yksinkertainen esimerkki on se, jossa haluat poimia taulukosta keskiarvon ylittävät numeeriset arvot. Yksi Select ei voi lukea keskiarvoa ja samalla sen ylittäviä arvoja. Tätä tarkoitusta varten meillä on valinta, joka lukee keskiarvon:
SELECT AVG ( kenttä1 ) FROM oma_taulukko ;
Tämä kysely sijoitetaan uloimman kyselyn WHERE-lauseeseen; alikysely suoritetaan ensin:
SELECT * FROM oma_taulukko WHERE kenttä1 > ( SELECT AVG ( kenttä1 ) FROM oma_taulukko );
Kuten näet, syntaktisesta näkökulmasta on välttämätöntä laittaa alikyselyt suluihin.
Johdetut taulukot
Johdetut taulukot ovat alikyselyn erikoistapaus: sisäinen Select poimii tiedot, jotka sitten ulkoinen valinta kysyy.
Seuraavaa esimerkkiä käytetään opetustarkoituksiin, mutta se ei ole optimaalinen lähestymistapa. Oletetaan kuitenkin, että haluat purkaa tietueet, joiden postikenttä ei ole tyhjä, ja valitse ne käyttäjien joukosta, joiden rekisteröinti on vahvistettu. Näin teet tämän johdetun taulukon kanssa:
SELECT email FROM ( SELECT sähköposti FROM käyttäjiltä WHERE vahvista = TOSI );
Todellisuudessa johdetut taulukot ovat hyödyllisiä silloin, kun muita mahdollisia lähestymistapoja ei ole, mikä tapahtuu, kun ulkoinen kysely sisältää JOIN.
DCL: Data Control
DCL:ää käytetään antamaan tai peruuttamaan käyttäjille tarvittavat käyttöoikeudet, jotta he voivat käyttää DML- ja DDL-komentoja sekä itse DCL-komentoja (jotka puolestaan on voitava muuttaa joidenkin objektien käyttöoikeuksia).
Myönnä
Grant - komento antaa tai myöntää yhden tai useamman käyttöoikeuden tietylle käyttäjälle (esim. luvan lisätä taulukkoon, muokata sitä tai poistaa sitä) ja arvokkaalle järjestelmänvalvojalle.
Peruuta
Peruuta - komento peruuttaa yhden tai useamman käyttöoikeuden tietyltä käyttäjältä (esim. luvan poistaa taulukosta).
Tallennetut ohjelmat
Termi Stored Programs tai Business Logic viittaa rutiineihin, jotka on ohjelmoitu SQL:llä, ja niissä on proseduurilaajennukset, jotka mahdollistavat vuon ohjauksen, silmukat , kohdistimet ja virheiden käsittelyn. Täydellisimmissä SQL-toteutuksissa tallennetut ohjelmat voivat olla erityyppisiä:
- Tallennettu menettely
- Tallennettu toiminto
- Laukaista
Lisäksi jotkin DBMS-järjestelmät, kuten MySQL , antavat sinun luoda SQL-proseduureja, jotka suoritetaan tiettynä aikana vain kerran tai toistuvasti tietyllä aikavälillä, kuten Unix-järjestelmien Cron Jobs.
SQL:n kritiikki
SQL on kyselykieli, joka on suunniteltu vuorovaikutukseen relaatiotietokantojen kanssa. Teoreetikot huomauttavat kuitenkin, että SQL:n alkuperäiset ominaisuudet, jotka ovat inspiroituneet monikkolaskennasta , itse asiassa rikkovat sitä . Sen viimeisimmät laajennukset tukevat täysin relaatiomallia , mutta ovat pahentaneet edellä mainittuja rikkomuksia .
Lisäksi SQL:n käytännön käyttöä kohtaan on esitetty monia kritiikkiä:
- se ei tarjoa standarditapaa jakaa pitkä komento lyhyemmiksi komentoiksi, joihin voidaan viitata nimellä (vaikka monet toteutukset todella tarjoavat tämän toiminnon);
- eri toteutukset eivät yleensä ole yhteensopivia keskenään;
- liian paljon luotetaan NULL -arvoihin , meta-arvoon, jonka joidenkin tutkijoiden mukaan pitäisi osoittaa arvon puuttumista, toisten mukaan sen pitäisi osoittaa tuntematonta arvoa, kun taas käytännössä sitä käytetään molempiin suuntiin tai vain toiseen. , mutta epäjohdonmukaisella tavalla .
Bibliografia
- ( FI ) "SQL-99 Complete, Really", Peter Gulutzan ja Trudy Pelzer, R&D Books, 1999, ISBN 978-0-87930-568-0
Aiheeseen liittyvät tuotteet
- Relaatioalgebra
- Relaatiolaskenta
- Tietojen määrittelykieli
- Tietojen käsittelykieli
- Kyselyn kieli
- Tiedonhallintakieli
- SQL-injektio
- SQLJ
- 4GL
- PL / SQL
- Transact-SQL
- NoSQL
Muut projektit
Wikikirjat sisältävät SQL -tekstiä tai käsikirjoja
Wikisanakirja sisältää sanakirjan lemma « SQL »
Wikimedia Commons sisältää kuvia tai muita tiedostoja SQL :llä
Ulkoiset linkit
- ( EN ) Structured Query Language , Encyclopedia Britannica , Encyclopædia Britannica, Inc.
- SQL . Valtiovarainministeriön tuottama ilmainen italiankielinen opas (pdf).
- SQL-opetusohjelma osoitteessa 1keydata.com .
- SQL :n peruskäskyt osoitteessa kb.askmonty.org .
- ( EN ) SQL:: 2003 BNF , osoitteessa savage.net.au .
- ( EN ) SQL99 BNF , osoitteessa savage.net.au .
- ( EN ) SQL93-määritys ( TXT ), osoitteessa contrib.andrew.cmu.edu .
- ( EN ) SQL93 BNF ( TXT ), osoitteessa contrib.andrew.cmu.edu .
- ( EN ) SQL92-määritys osoitteessa savage.net.au .
- ( EN ) SQL92 BNF , osoitteessa savage.net.au .
- ( EN ) PostgreSQL , osoitteessa postgresql.org .
- ( EN ) Oracle SQL -opetusohjelmat osoitteessa freeitsolutions.com .
- ( FI ) wiscorp.com .
- SQL - käsikirja ja opetusohjelma Webmasterpoint.org - osoitteesta webmasterpoint.org .