SQL | |
---|---|
Kieliluokka | Moniparadigma |
Esiintyi | 1974 |
Tekijä |
Donald Chamberlin Raymond Boyce |
Kehittäjä | ISO / IEC |
Tiedostotunniste _ | .sql |
Vapauta | ISO/IEC 9075-1:2016 ( 14. joulukuuta 2016 ) |
Tyyppijärjestelmä | Staattinen , tiukka |
Murteet | SQL-86, SQL-89, SQL-92 , SQL:1999 , SQL:2003 , SQL:2008 , SQL:2011 , SQL:2016 |
Vaikutettu | Datalog |
vaikutti | Agena , CQL , LINQ , Windows PowerShell [1] |
Verkkosivusto | iso.org/standard/63555.h… |
Mediatiedostot Wikimedia Commonsissa |
SQL | |
---|---|
Laajennus | .sql |
MIME -tyyppinen | Application/x-sql ja Application/sql [2] [3] |
Kehittäjä | ISO / IEC |
julkaistu | 1986 |
Viimeisin julkaisu | SQL:2016 ( 2016 ) |
Muototyyppi | Tietokanta |
Standardit) | ISO/IEC 9075 |
avoin muoto ? | Joo |
Mediatiedostot Wikimedia Commonsissa |
SQL ( MFA : [ ˈ ɛ s ˈ k j u ˈ ɛ l ]; lyhenne englannista Struktured Q uery L Anguage - "strukturoitu kyselykieli ") on deklaratiivinen ohjelmointikieli , jota käytetään tietojen luomiseen, muokkaamiseen ja hallintaan relaatiossa . tietokanta , jota hallinnoi sopiva tietokannan hallintajärjestelmä .
Se on ennen kaikkea informaatiolooginen kieli , joka on suunniteltu kuvaamaan, muokkaamaan ja hakemaan relaatiotietokantoihin tallennettua tietoa . Yleisesti ottaen SQL:ää (ilman useita nykyaikaisia laajennuksia) pidetään ohjelmointikielenä, joka ei ole Turing-täydellinen , mutta samalla kielistandardimääritys SQL / PSM tarjoaa mahdollisuuden sen prosessilaajennuksiin .
Aluksi SQL oli tärkein tapa, jolla käyttäjä oli vuorovaikutuksessa tietokannan kanssa, ja se salli seuraavien toimintojen suorittamisen:
Ajan myötä SQL muuttui monimutkaisemmiksi – rikastui uusilla rakenteilla, tarjosi mahdollisuuden kuvata ja hallita uusia tallennettuja objekteja (kuten indeksejä, näkymiä, laukaisimia ja tallennettuja proseduureja) ja alkoi saada ohjelmointikielille ominaisia ominaisuuksia.
Kaikkine muutoksineen SQL on edelleen yleisin kielellinen keino sovellusohjelmistojen ja tietokantojen vuorovaikutuksessa. Samaan aikaan nykyaikaiset DBMS - järjestelmät sekä DBMS:ää käyttävät tietojärjestelmät tarjoavat käyttäjälle edistyneitä työkaluja visuaalisen kyselyn rakentamiseen.
1970-luvun alussa yhdessä IBM :n tutkimuslaboratorioista kehitettiin kokeellinen relaatiotietokantajärjestelmä IBM System R , jolle sitten luotiin erityinen SEQUEL -kieli , joka teki suhteellisen helpon hallita tietoja tässä DBMS:ssä . Lyhenne SEQUEL tarkoittaa Structured English QUEry Language - "Structured English Query Language". Myöhemmin oikeudellisista syistä [4] SEQUEL - kieli nimettiin uudelleen SQL :ksi . Kun ANSI ( American National Standards Institute ) hyväksyi ensimmäisen SQL- kielistandardin vuonna 1986 , viralliseksi ääntämykseksi tuli [ ˈɛ sˈ k j uˈ ɛ l ] -es-q-el . Tästä huolimatta englanninkieliset asiantuntijat jatkavat usein SQL:n lukemista jatkona (venäjäksi he sanovat usein "es-ku-el").
Kehityksen tavoitteena oli luoda yksinkertainen ei-proseduurikieli, jota kuka tahansa käyttäjä voisi käyttää myös ilman ohjelmointitaitoja [5] . Itse kyselykielen ovat kehittäneet Donald D. Chamberlin ja Ray Boyce . Pat Selinger kehitti kustannusperusteisen optimoijan ja Raymond Lorie kehitti kyselykääntäjän .
SEQUEL ei ollut ainoa kieli tähän tarkoitukseen. Kalifornian yliopistossa Berkeleyssä kehitettiin ei - kaupallinen Ingres DBMS (joka oli nyt suositun ei-kaupallisen DBMS:n PostgreSQL :n kaukainen esi-isä ), joka oli relaatiotietokantajärjestelmä, mutta käytti omaa QUEL-kieltä , joka verrattuna SQL-kieltä, ei kestänyt kilpailua sitä tukevien DBMS-järjestelmien lukumäärässä. Vaihtoehtoisena tapana tarjota käyttäjien pääsy tietokantoihin harkittiin myös 1970-luvulla ilmestynyttä QBE -menetelmää , joka myöhemmin ilmestyi muunnetussa muodossa useisiin integroituihin tiedonhallintaympäristöihin, mutta ei korvannut, vaan vain täydensi SQL:ää.
Ensimmäiset uutta kieltä tukeneet tietokantajärjestelmät olivat vuonna 1979 Oracle V2 for Relational Softwaren (myöhemmin Oracle ) VAX - koneet ja IBM:n System/38 , joka perustui System/R:ään.
Koska 1980-luvun alussa oli olemassa useita eri valmistajien DBMS-versioita ja jokaisessa niistä oli oma kyselykielen toteutus, päätettiin kehittää kielistandardi, joka takaa ohjelmiston siirrettävyyden DBMS:stä toiseen ( edellyttäen, että ne tukevat tätä standardia).
Vuonna 1983 International Organization for Standardization (ISO) ja American National Standards Institute (ANSI) alkoivat kehittää standardia SQL-kielelle. Useiden neuvottelujen ja useiden luonnosten hylkäämisen jälkeen ANSI esitteli vuonna 1986 ensimmäisen standardin versionsa, joka on kuvattu ANSI X3.135-1986:ssa otsikolla "Database Language SQL". Epävirallisesti tätä SQL-86-standardia kutsutaan nimellä SQL1. Vuotta myöhemmin ISO 9075-1987 -versio valmistui samalla nimellä. Tämän standardin kehitystyö tehtiin Teknisen komitean TC97 ( eng. Technical Committee TC97 ) alaisuudessa, jonka toiminta-alueena oli laskenta- ja tiedonkäsittelyprosessit (esim . Computing and Information Processing ). Hänen osastonsa, jota kutsutaan nimellä Subcommittee SC21 ( englanniksi Subcommittee SC21 ), valvoi standardin kehittämistä, josta tuli avain ISO- ja ANSI-standardien identiteetille SQL1:lle (SQL-86).
SQL1-standardi jaettiin kahteen tasoon. Ensimmäinen taso oli toisen tason osajoukko, joka kuvasi koko asiakirjaa kokonaisuutena. Toisin sanoen tällainen rakenne edellyttäen, että kaikki SQL1-standardin spesifikaatiot eivät ole tasoa 1. Näin ollen toimittajan, joka väitti tukea tälle standardille, oli vaadittava taso, jota sen SQL-kielen toteutus noudattaa. Tämä helpotti huomattavasti standardin käyttöönottoa ja tukemista, koska valmistajat saattoivat toteuttaa sen tuen kahdessa vaiheessa.
Ajan mittaan standardiin on kertynyt useita kommentteja ja toiveita erityisesti tietojen eheyden ja oikeellisuuden varmistamisen osalta, minkä seurauksena vuonna 1989 tätä standardia laajennettiin, nimeltään SQL89. Erityisesti siihen lisättiin käsite primaari- ja vierasavaimet . Asiakirjan ISO-versio on nimeltään ISO 9075:1989 "Database Language SQL integrity Enhancements". Samanaikaisesti valmistui myös ANSI-versio.
Välittömästi SQL1-standardin työskentelyn valmistumisen jälkeen vuonna 1987 aloitettiin työ standardin uudella versiolla, jonka oli tarkoitus korvata SQL89-standardi, nimeltään SQL2, koska asiakirjan hyväksymispäivämäärä ei tuolloin ollut tiedossa. Siten itse asiassa SQL89 ja SQL2 kehitettiin rinnakkain. Vuonna 1992 otettiin käyttöön uusi versio standardista, joka korvasi SQL89-standardin. Uusi standardi, nimeltään SQL92, oli pohjimmiltaan SQL1-standardin laajennus, joka sisälsi monia lisäyksiä ohjeiden aiemmista versioista.
Kuten SQL1, myös SQL92 jaettiin useille tasoille, mutta ensinnäkin tasojen määrä nostettiin kahdesta kolmeen, ja toiseksi ne saivat nimet järjestysnumeroiden sijasta: alku ( englanniksi merkintä ), keski ( englanniksi .intermediate ) , täysi ( englanniksi full ). "Täydellinen" taso, kuten SQL1:n taso 2, tarkoitti koko standardia. "Aloitus" taso oli "keskitaso" osajoukko, joka puolestaan oli "täydellisen" tason alajoukko. Aloittelijataso oli verrattavissa SQL1-standardin tasoon 2, mutta tämän tason määrityksiä laajennettiin jonkin verran. Näin ollen standarditasojen sisällyttämisketju näytti tältä: SQL1 Taso 1 → SQL1 Taso 2 → SQL92 "Alkuperäinen" → SQL92 "Keskitaso" → SQL92 "Täysi".
SQL92-standardin käyttöönoton jälkeen siihen lisättiin useita asiakirjoja, jotka laajensivat kielen toimivuutta. Joten vuonna 1995 otettiin käyttöön SQL / CLI (Call Level Interface, Call Level Interface) -standardi, joka nimettiin myöhemmin uudelleen CLI95:ksi. Seuraavana vuonna otettiin käyttöön SQL/PSM (Persistent Stored Modules) -standardi, nimeltään PSM-96 . [6]
Seuraava standardi oli SQL:1999 (SQL3). Nykyinen standardi on vuonna 2003 hyväksytty standardi ( SQL:2003 ), jossa on myöhemmin tehtyjä pieniä muutoksia ( SQL:2008 ). Standardin versiohistoria:
vuosi | Nimi | Muu nimi | Muutokset |
---|---|---|---|
1986 | SQL-86 | SQL-87 | Ensimmäinen versio standardista, jonka ANSI hyväksyi ja ISO hyväksyi vuonna 1987. |
1989 | SQL-89 | FIPS 127-1 | Hieman muokattu versio edellisestä standardista. |
1992 | SQL-92 | SQL2, FIPS 127-2 | Merkittävät muutokset (ISO 9075); SQL-92 Entry Level on otettu käyttöön FIPS 127-2:na. |
1999 | SQL:1999 | SQL3 | Lisätty tuki säännöllisille lausekkeille , rekursiivisille kyselyille, liipaisintuelle , perusproseduurilaajennuksille, ei-skalaaritietotyypeille ja eräille oliopohjaisille ominaisuuksille. |
2003 | SQL:2003 | Otettiin käyttöön laajennuksia työskentelyyn XML - tietojen, ikkunatoimintojen (käytetään OLAP - tietokantojen kanssa), sekvenssigeneraattoreiden ja niihin perustuvien tietotyyppien kanssa. | |
2006 | SQL:2006 | XML-tiedon kanssa työskentelyn toiminnallisuutta on laajennettu merkittävästi. Nyt voit käyttää SQL:ää ja XQueryä yhdessä kyselyissä . | |
2008 | SQL:2008 | Parannettu ikkunatoimintojen ominaisuuksia, poistettu joitakin SQL:2003-standardin epäselvyyksiä [7] | |
2011 | SQL:2011 | Toteutettu tuki kronologisille tietokannoille (PERIOD FOR), tuki FETCH-konstruktiolle [8] . | |
2016 | SQL:2016 | Rivitason suojaus, polymorfiset taulukkofunktiot, JSON . |
Perinteisesti, kuten monissa IT - alan standardeissa, SQL-kielessä oli ongelma: jossain vaiheessa monet SQL:ää käyttävien ohjelmistojen valmistajat päättivät, että standardin nykyisen (silloin) version toiminnallisuus oli riittämätön, ja sitä oli toivottavaa laajentaa. Tämän seurauksena eri tietokannanhallintajärjestelmien (DBMS) valmistajat käyttävät erilaisia SQL:n murteita, jotka eivät yleensä ole yhteensopivia keskenään.
Ennen vuotta 1996 National Institute of Standards and Technology (NIST) käsitteli SQL:n kaupallisten toteutusten yhdenmukaisuutta standardin kanssa , mikä määritti standardin noudattamisen tason. Myöhemmin DBMS-divisioona hajotettiin, ja tällä hetkellä kaikki pyrkimykset tarkistaa DBMS:n standardinmukaisuus kuuluvat sen valmistajalle.
Ensimmäistä kertaa "vaatimustenmukaisuustason" käsite ehdotettiin SQL-92-standardissa. Erityisesti ANSI ja NIST ovat määrittäneet neljä tämän standardin noudattamistasoa:
On helppo ymmärtää, että jokainen seuraava vaatimustenmukaisuuden taso merkitsi ilmeisesti edellisen tason noudattamista. Lisäksi näiden standardien "tikkaat" mukaan kaikki Entry-tasoa vastaavat DBMS-järjestelmät saattoivat ilmoittaa olevansa "SQL-92-yhteensopiva" ("yhteensopiva SQL-92:n kanssa"), vaikka itse asiassa siirrettävyys ja standardin noudattaminen oli rajoitettua. tämän tason ominaisuuksiin.
Tilanne muuttui SQL:1999-standardin käyttöönoton myötä. Tästä eteenpäin standardi on saanut modulaarisen rakenteen - pääosa standardista on siirretty "SQL/Foundation" -osioon, kaikki loput on siirretty erillisiin moduuleihin. Näin ollen jäljellä oli vain yksi yhteensopivuustaso - Core , mikä tarkoitti tukea tälle pääosalle. Muiden ominaisuuksien tuki on jätetty DBMS-toimittajien harkintaan. Samanlainen tilanne tapahtui standardin myöhemmissä versioissa.
2000 - luvun toisen puoliskon NoSQL -liike , joka kiinnitti nimeensä "SQL:n kieltämisen", ei johtunut niinkään kielen hylkäämisestä sinänsä, vaan DBMS:n yhdistämisestä, joka hylkäsi relaatiomallin ja tiukan johdonmukaisuuden periaatteet horisontaalisen skaalautuvuuden ja useiden muiden ominaisuuksien vuoksi. Samaan aikaan SQL-tuki todellakin puuttui varhaisista NoSQL-järjestelmistä, ajan myötä jotkin näistä DBMS-järjestelmistä hankkivat erityisiä SQL:n kaltaisia kyselykieliä ( CQL , N1QL , AQL ja muut). 2010-luvulla useat DBMS-järjestelmät luokittelivat itsensä NewSQL :ksi . NoSQL-järjestelmien skaalautuvuusominaisuudet säilyvät, mutta myös SQL-tukea on toteutettu eri järjestelmissä - eri asteista yhteensopivuutta standardien kanssa. Lisäksi SQL:n tuki 2010-luvulla ilmestyi DBMS:n lisäksi myös Hadoop-ekosysteemiin ( Spark SQL , Phoenix , Impala ) sekä väliohjelmistoon ( Kafka message broker , Flink stream Processing System ), joten , kielestä on vähitellen tulossa de facto standardi pääsylle kaikkiin käsiteltäviin tietoihin, ei vain suhteellisiin tietoihin.
SQL-kieli on kokoelma operaattoreita, ohjeita ja laskettuja funktioita.
Yleisen ohjelmointityylin mukaan operaattorit (ja muut varatut sanat) SQL:ssä on yleensä suositeltavaa kirjoittaa isoilla kirjaimilla [9] .
SQL-lauseet on jaettu:
Murteista ja syntaksisista eroista huolimatta DDL:n ja DML:n sisältävät SQL-kyselytekstit voidaan pääosin siirtää melko helposti DBMS:stä toiseen. On järjestelmiä, joiden kehittäjät keskittyivät alun perin ainakin useiden tietokantajärjestelmien käyttöön (esimerkiksi Documentum sähköinen dokumentinhallintajärjestelmä voi toimia sekä Oracle Databasen että Microsoft SQL Serverin ja DB2 :n kanssa ). Joitakin toteutuskohtaisia ominaisuuksia käytettäessä tällainen siirrettävyys on luonnollisesti jo erittäin vaikea saavuttaa.
Standardien saatavuusStandardien ja testien olemassaolo, jolla määritetään tietyn SQL:n toteutuksen yhteensopivuus ja yhteensopivuus yleisesti hyväksytyn standardin kanssa, vain edistävät kielen "vakauttumista". On totta, että standardi itsessään on joskus liian formalisoitu ja kooltaan paisunut (esimerkiksi SQL:2003-standardin perusosa koostuu yli 1300 sivusta tekstiä).
DeklaratiivistaSQL:llä ohjelmoija kuvaa vain, mitä tietoja on haettava tai muutettava. DBMS päättää suoraan SQL-kyselyn käsittelyn yhteydessä, miten tämä tehdään. Sinun ei kuitenkaan pitäisi ajatella, että tämä on täysin universaali periaate - ohjelmoija kuvaa tietojoukon näytteenottoa tai muokkausta varten, mutta hänen on hyödyllistä kuvitella, kuinka DBMS jäsentää pyyntönsä tekstin. Mitä monimutkaisempi kysely on rakennettu, sitä enemmän se sallii oikeinkirjoitusvaihtoehdot, jotka eroavat suoritusnopeudeltaan, mutta ovat samat lopullisessa tietojoukossa.
Relaatiotietomallin luojat Edgar Codd , Christopher Date ja heidän kannattajansa huomauttavat, että SQL ei ole todellinen relaatiokieli. Erityisesti he tuovat esiin seuraavat SQL:n puutteet relaatioteorian näkökulmasta [10] :
Christopher Daten ja Hugh Darwenin julkaisemassa kolmannessa manifestissa [11] he esittävät DBMS:n seuraavan sukupolven periaatteet ja ehdottavat opetusohjelma D -kieltä , joka on todella suhteellinen.
MonimutkaisuusVaikka SQL suunniteltiin loppukäyttäjän työkaluksi, siitä tuli myöhemmin niin monimutkainen, että siitä tuli ohjelmoijan työkalu.
Poikkeamat standardeistaHuolimatta kansainvälisen standardin ANSI SQL-92 olemassaolosta, monet DBMS-kehittäjät tekevät muutoksia kehitetyssä DBMS:ssä käytettyyn SQL-kieleen, mikä poikkeaa standardista. Siten ilmestyy kullekin tietylle tietokantajärjestelmälle ominaisia SQL-kielen murteita.
Hierarkkisten rakenteiden kanssa työskentelyn monimutkaisuusAikaisemmin useimpien DBMS-järjestelmien SQL-murteet eivät tarjonneet tapaa käsitellä puurakenteita. Jotkut DBMS-toimittajat ovat keksineet ratkaisuja (esimerkiksi Oracle Database käyttää CONNECT BY -lausetta ). ANSI standardoi nyt rekursiivisen WITH - konstruktin DB2 SQL - murreesta . Rekursiiviset kyselyt ( Recursive Common Table Expressions ) ovat ilmestyneet Microsoft SQL Serverissä versiosta 2005 lähtien [12] .
Koska SQL ei ole tuttu proseduuriohjelmointikieli (eli se ei tarjoa työkaluja silmukoiden, haarojen ja niin edelleen rakentamiseen), eri valmistajien esittämät laajennukset koskivat ensisijaisesti prosessilaajennuksia. Nämä ovat tallennettuja proseduureja ( tallennetut menettelyt ) ja proseduurillisia "lisäosia" kieliä. Melkein jokainen DBMS käyttää omaa proseduurikieltä, erityisesti Oracle Database käyttää PL/SQL :ää (tuettu myös DB2 :ssa ja Timestenissa ), Interbase ja Firebird käyttävät PSQL :tä , DB2 käyttää SQL PL :tä , Microsoft SQL Serveriä ja Adaptive Serveriä Enterprise - Transact-SQL , muodossa PostgreSQL - PL/pgSQL .
![]() | ||||
---|---|---|---|---|
|
SQL | |
---|---|
Versiot |
|
Avainsanat | |
Aiheeseen liittyvät artikkelit | |
ISO/IEC SQL:n osat |
|
Kyselykielet | |
---|---|
Tietokanta | |
---|---|
Käsitteet |
|
Objektit | |
Avaimet |
|
SQL | |
Komponentit |
Ohjelmointikielet | |
---|---|
|
ISO- standardit | |
---|---|
| |
1-9999 _ _ |
|
10 000 - 19999 |
|
20 000+ | |
Katso myös: Luettelo artikkeleista, joiden otsikot alkavat sanalla "ISO" |