SQL | |
---|---|
Clasa de limba | Multi-paradigma |
Aparut in | 1974 |
Autor |
Donald Chamberlin Raymond Boyce |
Dezvoltator | ISO / IEC |
Extensie de fișier | .sql |
Eliberare | ISO/IEC 9075-1:2016 ( 14 decembrie 2016 ) |
Tip sistem | Static , strict |
Dialectele | SQL-86, SQL-89, SQL-92 , SQL:1999 , SQL:2003 , SQL:2008 , SQL:2011 , SQL:2016 |
A fost influențat | Jurnal de date |
influențat | Agena , CQL , LINQ , Windows PowerShell [1] |
Site-ul web | iso.org/standard/63555.h… |
Fișiere media la Wikimedia Commons |
SQL | |
---|---|
Extensie | .sql |
tip MIME | application/x-sql și application/sql [2] [3] |
Dezvoltator | ISO / IEC |
publicat | 1986 |
Ultima lansare | SQL:2016 ( 2016 ) |
Tip de format | Bază de date |
Standard(e) | ISO/IEC 9075 |
format deschis ? | da |
Fișiere media la Wikimedia Commons |
SQL ( MFA : [ ˈ ɛ s ˈ k j u ˈ ɛ l ]; prescurtare din engleză S trutured Query Language - „structured query language”) este un limbaj de programare declarativ folosit pentru a crea, modifica și gestiona date într-un mod relațional . o bază de date gestionată de un sistem adecvat de gestionare a bazelor de date .
Este, în primul rând, un limbaj informatic-logic conceput pentru a descrie, modifica și regăsește datele stocate în baze de date relaționale . În cazul general, SQL (fără un număr de extensii moderne) este considerat un limbaj de programare care nu este Turing complet , dar, în același timp, specificația standard de limbaj SQL/PSM prevede posibilitatea extensiilor sale procedurale .
Inițial, SQL a fost principalul mod în care utilizatorul a interacționat cu baza de date și a permis efectuarea următoarelor operațiuni:
De-a lungul timpului, SQL a devenit mai complex - îmbogățit cu noi constructe, oferind capacitatea de a descrie și gestiona noi obiecte stocate (cum ar fi indecși, vizualizări, declanșatoare și proceduri stocate) - și a început să preia caracteristici inerente limbajelor de programare.
Cu toate modificările sale, SQL rămâne cel mai comun mijloc lingvistic pentru interacțiunea aplicațiilor software cu bazele de date. În același timp, SGBD modern , precum și sistemele informaționale care utilizează SGBD, oferă utilizatorului instrumente avansate pentru construirea de interogări vizuale.
La începutul anilor 1970, într-unul dintre laboratoarele de cercetare IBM a fost dezvoltat un SGBD relațional experimental IBM System R , pentru care a fost creat apoi un limbaj special SEQUEL , care a făcut relativ ușor gestionarea datelor în acest SGBD. Abrevierea SEQUEL înseamnă Structured English Query Language - „Structured English Query Language”. Ulterior, din motive legale [4] , limbajul SEQUEL a fost redenumit SQL . Când primul standard de limbaj SQL a fost adoptat de ANSI ( American National Standards Institute ) în 1986 , pronunția oficială a devenit [ ˈɛ sˈk j uˈɛl ] -es - q- el . În ciuda acestui fapt, experții vorbitori de limba engleză continuă adesea să citească SQL ca pe o continuare (în rusă se spune adesea „es-ku-el”).
Scopul dezvoltării a fost acela de a crea un limbaj simplu non-procedural care să poată fi folosit de orice utilizator, chiar și fără abilități de programare [5] . Limbajul de interogare în sine a fost dezvoltat de Donald D. Chamberlin și Ray Boyce . Pat Selinger a dezvoltat optimizatorul bazat pe costuri, iar Raymond Lorie a dezvoltat compilatorul de interogări.
SEQUEL nu a fost singura limbă în acest scop. La Universitatea din California, Berkeley , a fost dezvoltat DBMS -ul non-comercial Ingres (care a fost progenitorul îndepărtat al acum popularului DBMS necomercial PostgreSQL ), care era un DBMS relațional, dar folosea propriul limbaj QUEL , care, în comparație cu limbajul SQL, nu a putut rezista concurenței în numărul de SGBD care îl suportă. Ca o abordare alternativă pentru a oferi acces utilizatorilor la bazele de date, a fost luată în considerare și metoda QBE apărută în anii 1970 , care a apărut ulterior într-o formă modificată într-o serie de medii integrate de gestionare a datelor, dar nu a înlocuit, ci doar a completat SQL.
Primele SGBD care au suportat noul limbaj au fost, în 1979, mașinile VAX ale Oracle V2 pentru software relațional (mai târziu Oracle ) și IBM System/38 , care se baza pe System/R.
Deoarece la începutul anilor 1980 existau mai multe variante de SGBD de la diferiți producători și fiecare dintre ele avea propria sa implementare a limbajului de interogare, s-a decis să se dezvolte un standard de limbaj care să garanteze portabilitatea software-ului de la un SGBD la altul ( cu condiția ca aceștia să susțină acest standard).
În 1983, Organizația Internațională pentru Standardizare (ISO) și Institutul Național American de Standarde (ANSI) au început să dezvolte un standard pentru limbajul SQL. După multe consultări și respingerea mai multor proiecte, în 1986 ANSI a introdus prima versiune a standardului, descrisă în ANSI X3.135-1986 sub titlul „Database Language SQL”. Neoficial, acest standard SQL-86 se numește SQL1. Un an mai târziu, o versiune a ISO 9075-1987 a fost finalizată sub același nume. Elaborarea acestui standard a fost realizată sub auspiciile Comitetului Tehnic TC97 ( ing. Comitetul Tehnic TC97 ), a cărui arie de activitate au fost procesele de calcul și prelucrarea informațiilor ( ing. Calcul și prelucrarea informațiilor ). Divizia sa, denumită Subcomitetul SC21 ( Subcomisia engleză SC21 ), a supravegheat dezvoltarea standardului, care a devenit cheia identității standardelor ISO și ANSI pentru SQL1 (SQL-86).
Standardul SQL1 a fost împărțit în două niveluri. Primul nivel a fost un subset al celui de-al doilea nivel, care a descris întregul document ca un întreg. Adică, o astfel de structură prevedea ca nu toate specificațiile standardului SQL1 să fie de Nivelul 1. Astfel, un furnizor care pretindea suport pentru acest standard trebuia să revendice nivelul la care se conformează implementarea limbajului SQL. Acest lucru a facilitat foarte mult adoptarea și suportul standardului, deoarece producătorii puteau implementa suportul acestuia în două etape.
De-a lungul timpului, asupra standardului s-au acumulat mai multe comentarii și dorințe, mai ales în ceea ce privește asigurarea integrității și corectitudinii datelor, drept urmare în 1989 a fost extins acest standard, numit SQL89. În special, i s-a adăugat conceptul de chei primare și străine . Versiunea ISO a documentului se numește ISO 9075:1989 „Limbajul bazei de date SQL cu îmbunătățiri de integritate”. În paralel, a fost finalizată și versiunea ANSI.
Imediat după finalizarea lucrărilor la standardul SQL1 în 1987, au început lucrările la o nouă versiune a standardului, care trebuia să înlocuiască standardul SQL89, numit SQL2, deoarece data adoptării documentului la acel moment nu era cunoscută. Astfel, de fapt, SQL89 și SQL2 au fost dezvoltate în paralel. O nouă versiune a standardului a fost adoptată în 1992, înlocuind standardul SQL89. Noul standard, intitulat SQL92, a fost în esență o extensie a standardului SQL1, încorporând multe completări de la versiunile anterioare ale instrucțiunilor.
La fel ca SQL1, SQL92 a fost, de asemenea, împărțit în mai multe niveluri, cu toate acestea, în primul rând, numărul de niveluri a fost crescut de la două la trei, iar în al doilea rând, au primit nume în loc de numere ordinale: initial ( English entry ), middle ( English .intermediate ) , complet ( în engleză complet ). Nivelul „complet”, ca și Nivelul 2 în SQL1, însemna întregul standard. Nivelul „începător” era un subset al nivelului „intermediar”, care, la rândul său, era un subset al nivelului „complet”. Nivelul Începător a fost comparabil cu Nivelul 2 al standardului SQL1, dar specificațiile pentru acest nivel au fost oarecum extinse. Astfel, lanțul de incluziuni de niveluri standard arăta cam așa: SQL1 Nivelul 1 → SQL1 Nivelul 2 → SQL92 „Inițial” → SQL92 „Mediu” → SQL92 „Complet”.
După adoptarea standardului SQL92, i s-au adăugat mai multe documente, extinzând funcționalitatea limbajului. Astfel, în 1995, a fost adoptat standardul SQL / CLI (Call Level Interface, Call Level Interface), redenumit ulterior CLI95. În anul următor, a fost adoptat standardul SQL/PSM (Persistent Stored Modules) , numit PSM-96 . [6]
Următorul standard a fost SQL:1999 (SQL3). Standardul actual este cel adoptat în 2003 ( SQL:2003 ) cu modificări minore făcute ulterior ( SQL:2008 ). Istoricul versiunilor standardului:
An | Nume | Alt nume | Schimbări |
---|---|---|---|
1986 | SQL-86 | SQL-87 | Prima versiune a standardului adoptată de ANSI și aprobată de ISO în 1987. |
1989 | SQL-89 | FIPS 127-1 | O versiune ușor modificată a standardului anterior. |
1992 | SQL-92 | SQL2, FIPS 127-2 | Modificări semnificative (ISO 9075); Nivelul de intrare SQL-92 a fost adoptat ca FIPS 127-2. |
1999 | SQL:1999 | SQL3 | S-a adăugat suport pentru expresii regulate , interogări recursive , suport pentru declanșare , extensii procedurale de bază, tipuri de date non-scalare și unele caracteristici orientate pe obiecte . |
2003 | SQL:2003 | Au introdus extensii pentru lucrul cu date XML , funcții ferestre (folosite pentru a lucra cu baze de date OLAP ), generatoare de secvențe și tipuri de date bazate pe acestea. | |
2006 | SQL:2006 | Funcționalitatea de lucru cu date XML a fost extinsă semnificativ. Acum puteți utiliza SQL și XQuery împreună în interogări . | |
2008 | SQL:2008 | Capacități îmbunătățite ale funcțiilor ferestrei, eliminate unele ambiguități ale standardului SQL:2003 [7] | |
2011 | SQL:2011 | Suport implementat pentru bazele de date cronologice (PERIOD FOR), suport pentru constructul FETCH [8] . | |
2016 | SQL:2016 | Securitate la nivel de rând, Funcții de tabel polimorf, JSON . |
În mod tradițional, ca și în cazul multor standarde din industria IT , a existat o problemă cu limbajul SQL: la un moment dat, mulți producători de software care utilizează SQL au decis că funcționalitatea în versiunea curentă (la acea vreme) a standardului era insuficientă și era de dorit extinderea lui . Ca urmare, diferiți producători de sisteme de management al bazelor de date (DBMS) folosesc diferite dialecte ale SQL, care sunt în general incompatibile între ele.
Înainte de 1996, Institutul Național de Standarde și Tehnologie (NIST) s-a ocupat de conformitatea implementărilor comerciale ale SQL cu standardul , care a stabilit nivelul de conformitate cu standardul. Ulterior, divizia DBMS a fost desființată, iar în acest moment toate eforturile de verificare a conformității DBMS cu standardul revin producătorului său.
Pentru prima dată conceptul de „nivel de conformitate” a fost propus în standardul SQL-92. În mod specific, ANSI și NIST au definit patru niveluri de conformitate cu implementarea acestui standard:
Este ușor de înțeles că fiecare nivel de conformitate ulterior a implicat în mod evident respectarea nivelului anterior. În plus, conform acestei „scări” de standarde, orice SGBD care corespundea nivelului de intrare se putea declara ca „compatibil cu SQL-92” („compatibil cu SQL-92”), deși, de fapt, portabilitatea și conformitatea cu standardul era limitată. la un set de caracteristici incluse la acest nivel.
Situația s-a schimbat odată cu introducerea standardului SQL:1999. De acum încolo, standardul a dobândit o structură modulară - partea principală a standardului a fost mutată în secțiunea „SQL/Fundație”, toate celelalte au fost mutate în module separate. În consecință, a mai rămas un singur nivel de compatibilitate - Core , ceea ce însemna suport pentru această parte principală. Suportul pentru alte caracteristici este lăsat la latitudinea furnizorilor DBMS. O situație similară a avut loc cu versiunile ulterioare ale standardului.
Mișcarea NoSQL din a doua jumătate a anilor 2000, care a fixat „negația SQL” în numele său, a fost cauzată nu atât de respingerea limbajului ca atare, cât de unificarea DBMS care a abandonat modelul relațional și principii de consistență strictă de dragul scalabilității orizontale și o serie de alte calități. În același timp, suportul SQL a fost într-adevăr absent în sistemele NoSQL timpurii, de-a lungul timpului, unele dintre aceste DBMS au dobândit limbaje de interogare specifice SQL ( CQL , N1QL , AQL și altele). În anii 2010, o serie de SGBD s-au clasificat ca NewSQL , menținând în același timp proprietățile de scalabilitate ale sistemelor NoSQL, suportul SQL este de asemenea implementat, în diferite sisteme - diferite grade de compatibilitate cu standardele. În plus, suportul pentru SQL în anii 2010 a apărut nu numai în DBMS, ci și pentru ecosistemul Hadoop ( Spark SQL , Phoenix , Impala ), precum și în middleware ( Kafka message broker , Flink stream processing system ), astfel , limbajul devine treptat standardul de facto pentru accesul la orice date în curs de prelucrare, nu doar de natură relațională.
Limbajul SQL este o colecție de operatori, instrucțiuni și funcții calculate.
Conform stilului obișnuit de programare , operatorii (și alte cuvinte rezervate) în SQL sunt în general recomandate să fie scrise cu majuscule [9] .
Instrucțiunile SQL sunt împărțite în:
În ciuda prezenței dialectelor și a diferențelor de sintaxă, în cea mai mare parte, textele de interogare SQL care conțin DDL și DML pot fi transferate destul de ușor de la un SGBD la altul. Există sisteme ai căror dezvoltatori s-au concentrat inițial pe utilizarea a cel puțin mai multor SGBD (de exemplu: sistemul electronic de gestionare a documentelor Documentum poate funcționa atât cu Oracle Database , cât și cu Microsoft SQL Server și DB2 ). Desigur, atunci când se utilizează unele caracteristici specifice implementării, o astfel de portabilitate este deja foarte dificil de realizat.
Disponibilitatea standardelorPrezența standardelor și a unui set de teste pentru a determina compatibilitatea și conformitatea unei anumite implementări a SQL cu un standard general acceptat contribuie doar la „stabilizarea” limbajului. Adevărat, merită remarcat faptul că standardul în sine este uneori prea formalizat și umflat în dimensiune (de exemplu, partea de bază a standardului SQL:2003 constă din mai mult de 1300 de pagini de text).
DeclarativCu SQL, programatorul descrie doar ce date trebuie preluate sau modificate. Cum se face acest lucru este decis de SGBD direct atunci când procesează interogarea SQL. Cu toate acestea, nu ar trebui să credeți că acesta este un principiu complet universal - programatorul descrie un set de date pentru eșantionare sau modificare, dar este util pentru el să-și imagineze cum va analiza DBMS textul solicitării sale. Cu cât interogarea este mai complexă, cu atât mai mult permite opțiuni de ortografie care diferă ca viteză de execuție, dar sunt aceleași în setul de date final.
Creatorii modelului de date relaționale Edgar Codd , Christopher Date și susținătorii lor subliniază că SQL nu este un limbaj relațional adevărat. În special, ei subliniază următoarele defecte în SQL din punctul de vedere al teoriei relaționale [10] :
În al treilea Manifest [11] publicat de Christopher Date și Hugh Darwen , ei expun principiile următoarei generații de DBMS și propun un limbaj Tutorial D care este cu adevărat relațional.
ComplexitateDeși SQL a fost conceput ca un instrument pentru utilizatorul final, mai târziu a devenit atât de complex încât a devenit o unealtă de programator.
Abateri de la standardeÎn ciuda prezenței standardului internațional ANSI SQL-92, mulți dezvoltatori de SGBD efectuează modificări limbajului SQL utilizat în SGBD dezvoltat, deviând astfel de la standard. Astfel, apar dialecte ale limbajului SQL specifice fiecărui SGBD anume.
Complexitatea lucrului cu structuri ierarhiceAnterior, dialectele SQL ale majorității SGBD-urilor nu ofereau o modalitate de a manipula structurile arborescente. Unii furnizori DBMS au venit cu soluții (de exemplu, Oracle Database utilizează clauza CONNECT BY ). ANSI standardizează acum constructul recursiv WITH din dialectul DB2 SQL . Interogările recursive ( Recursive Common Table Expressions ) au apărut în Microsoft SQL Server începând cu versiunea 2005 [12] .
Deoarece SQL nu este un limbaj de programare procedural familiar (adică nu oferă instrumente pentru construirea de bucle, ramuri și așa mai departe), extensiile introduse de diverși producători au vizat în primul rând extensii procedurale. Acestea sunt proceduri stocate ( proceduri stocate ) și limbaje procedurale „suplimentare”. Aproape fiecare DBMS folosește propriul limbaj procedural, în special, Oracle Database utilizează PL/SQL (acceptat și în DB2 și Timesten ), Interbase și Firebird folosesc PSQL , DB2 utilizează SQL PL , Microsoft SQL Server și Adaptive Server Enterprise - Transact-SQL , în PostgreSQL - PL/pgSQL .
![]() | ||||
---|---|---|---|---|
|
SQL | |
---|---|
Versiuni |
|
Cuvinte cheie | |
Articole similare | |
Părți ale ISO/IEC SQL |
|
Limbi de interogare | |
---|---|
Bază de date | |
---|---|
Concepte |
|
Obiecte | |
Chei | |
SQL |
|
Componente |
Limbaje de programare | |
---|---|
|
ISO | Standardele|
---|---|
| |
de la 1 la 9999 |
|
10000 până la 19999 |
|
20000+ | |
Vezi și: Lista articolelor ale căror titluri încep cu „ISO” |