SQL - SQL

SQL (Limbaj de interogare structurat)
Paradigmă Declarativ
Familie Limbajul interogării
Proiectat de Donald D. Chamberlin
Raymond F. Boyce
Dezvoltator ISO / IEC
A apărut prima dată 1974 ; Acum 47 de ani ( 1974 )
Versiune stabila
SQL: 2016 / decembrie 2016 ; acum 4 ani ( 2016-12 )
Disciplina de tastare Static , puternic
OS Cross-platform
Site-ul web www .iso .org / standard / 63555 .html
Implementări majore
Mulți
Dialecte
Influențată de
Jurnal de date
Influențat
CQL , LINQ , SPARQL , SOQL, PowerShell , JPQL , jOOQ , N1QL
SQL (format de fișier)
Extensie nume de fișier
.sql
Tipul media internet
aplicație / sql
Dezvoltat de ISO / IEC
Eliberarea inițială 1986 ( 1986 )
Tipul formatului Bază de date
Standard ISO / IEC 9075
Formatul deschis ? da
Site-ul web www .iso .org / standard / 63555 .html

SQL ( / ˌ ɛ s ˌ k ju ɛ l / ( asculta )Despre acest sunet SQL , / s í k w əl / "sequel" Structured Query Language ) este un limbaj specific domeniului utilizat în programarea și proiectate pentru gestionarea datelor deținute în un sistem de gestionare a bazelor de date relaționale (RDBMS) sau pentru procesarea fluxului într-un sistem de gestionare a fluxului de date relațional (RDSMS). Este deosebit de util în tratarea datelor structurate , adică a datelor care încorporează relații între entități și variabile.

SQL oferă două avantaje principale față de API - urile mai vechi de citire-scriere, cum ar fi ISAM sau VSAM . În primul rând, a introdus conceptul de accesare a mai multor înregistrări cu o singură comandă. În al doilea rând, elimină necesitatea specificării modului de a ajunge la o înregistrare, de exemplu cu sau fără index .

Bazat inițial pe calculul relațional algebră relațională și tuplă , SQL constă din mai multe tipuri de enunțuri, care pot fi clasificate informal ca sublimburi , în mod obișnuit: un limbaj de interogare a datelor (DQL), un limbaj de definire a datelor (DDL), un limbaj de control al datelor (DCL) ) și un limbaj de manipulare a datelor (DML). Domeniul de aplicare al SQL include interogarea datelor, manipularea datelor (inserare, actualizare și ștergere), definirea datelor ( crearea și modificarea schemelor ) și controlul accesului la date. Deși SQL este în esență un limbaj declarativ ( 4GL ), include și elemente procedurale .

SQL a fost unul dintre primele limbaje comerciale care a folosit modelul relațional al lui Edgar F. Codd . Modelul a fost descris în influenta sa lucrare din 1970, „Un model relațional de date pentru băncile mari de date partajate”. În ciuda faptului că nu a aderat în totalitate la modelul relațional descris de Codd , acesta a devenit cel mai utilizat limbaj de bază de date.

SQL a devenit un standard al American National Standards Institute (ANSI) în 1986 și al Organizației Internaționale pentru Standardizare (ISO) în 1987. De atunci, standardul a fost revizuit pentru a include un set mai mare de caracteristici. În ciuda existenței standardelor, majoritatea codului SQL necesită cel puțin unele modificări înainte de a fi portate pe diferite sisteme de baze de date .

Istorie

SQL a fost dezvoltat inițial la IBM de Donald D. Chamberlin și Raymond F. Boyce după ce a aflat despre modelul relațional de la Edgar F. Codd la începutul anilor 1970. Această versiune, numită inițial SEQUEL (Structured English Query Language), a fost concepută pentru a manipula și prelua datele stocate în sistemul original de gestionare a bazelor de date cvasirelaționale IBM, System R , pe care un grup de la IBM San Jose Research Laboratory îl dezvoltase în anii 1970.

Prima încercare a lui Chamberlin și Boyce de a utiliza un limbaj de baze de date relaționale a fost SQUARE (Specificarea întrebărilor într-un mediu relațional), dar a fost dificil de utilizat din cauza notării de subindice / superindice. După ce s-au mutat în San Jose Research Laboratory în 1973, au început să lucreze la o continuare a SQUARE. Mai târziu, numele SEQUEL a fost schimbat în SQL (renunțarea la vocale) deoarece „SEQUEL” era o marcă comercială a companiei Hawker Siddeley Dynamics Engineering Limited din Marea Britanie . Eticheta Structured Query Language a devenit ulterior acronimul pentru SQL.

După testarea SQL pe site-urile de testare a clienților pentru a determina utilitatea și practicitatea sistemului, IBM a început să dezvolte produse comerciale bazate pe prototipul lor System R, inclusiv System / 38 , SQL / DS și DB2 , care erau disponibile comercial în 1979, 1981, respectiv 1983.

La sfârșitul anilor 1970, Relational Software, Inc. (acum Oracle Corporation ) a văzut potențialul conceptelor descrise de Codd, Chamberlin și Boyce și și-a dezvoltat propriul RDBMS bazat pe SQL cu aspirațiile de a-l vinde către Marina SUA , Central Intelligence Agenția și alte agenții guvernamentale din SUA . În iunie 1979, Relational Software a introdus prima implementare comercială a SQL, Oracle V2 (Version2) pentru computerele VAX .

Până în 1986, grupurile de standarde ANSI și ISO au adoptat oficial definiția standard a limbajului „Database Language SQL”. Noile versiuni ale standardului au fost publicate în 1989, 1992, 1996, 1999, 2003, 2006, 2008, 2011 și, cel mai recent, 2016.

Sintaxă

O diagramă care prezintă mai multe dintre elementele limbajului SQL care compun o singură declarație

Limbajul SQL este împărțit în mai multe elemente de limbaj, inclusiv:

  • Clauze , care sunt componente constitutive ale declarațiilor și interogărilor. (În unele cazuri, acestea sunt opționale.)
  • Expresii , care pot produce fie valori scalare , fie tabele formate din coloane și rânduri de date
  • Predicatele , care specifică condiții care pot fi evaluate la valori logice cu trei valori SQL (3VL) (adevărat / fals / necunoscut) sau valori de adevăr booleene și sunt utilizate pentru a limita efectele declarațiilor și interogărilor sau pentru a schimba fluxul programului.
  • Interogări , care recuperează datele pe baza unor criterii specifice. Acesta este un element important al SQL .
  • Declarațiile , care pot avea un efect persistent asupra schemelor și datelor, sau pot controla tranzacțiile , fluxul de programe, conexiunile, sesiunile sau diagnosticarea.
    • Instrucțiunile SQL includ, de asemenea, punctul și punctul (";") terminator de instrucțiuni. Deși nu este necesar pe fiecare platformă, este definit ca o parte standard a gramaticii SQL.
  • Spațiul alb nesemnificativ este, în general, ignorat în instrucțiunile și interogările SQL, ceea ce face mai ușoară formatarea codului SQL pentru lizibilitate.

Extensii procedurale

SQL este conceput pentru un scop specific: interogarea datelor conținute într-o bază de date relațională . SQL este un limbaj de programare declarativ bazat pe set , nu un limbaj de programare imperativ precum C sau BASIC . Cu toate acestea, extensiile la SQL standard adaugă funcționalitatea limbajului de programare procedurală , cum ar fi construcțiile de control al fluxului. Acestea includ:

Sursă Abreviere Numele complet
Standardul ANSI / ISO SQL / PSM SQL / Module stocate persistent
Interbase / Firebird PSQL SQL procedural
IBM DB2 SQL PL Limbaj procedural SQL (implementează SQL / PSM)
IBM Informix SPL Limbaj procedural stocat
IBM Netezza NZPLSQL (bazat pe Postgres PL / pgSQL)
Avantajos PSQL SQL procedural avantajos (implementează SQL / PSM și PL / SQL )
MariaDB SQL / PSM , PL / SQL SQL / Modul stocat persistent (implementează SQL / PSM), Limbaj procedural / SQL (bazat pe Ada )
Microsoft / Sybase T-SQL Transact-SQL
Mimer SQL SQL / PSM SQL / Modul stocat persistent (implementează SQL / PSM)
MySQL SQL / PSM SQL / Modul stocat persistent (implementează SQL / PSM)
MonetDB SQL / PSM SQL / Modul stocat persistent (implementează SQL / PSM)
NuoDB SSP Proceduri stocate Starkey
Oracol PL / SQL Limbaj procedural / SQL (bazat pe Ada )
PostgreSQL PL / pgSQL Limbaj procedural / Limbaj de interogare structurat PostgreSQL (bazat pe PL / SQL redus )
SAP R / 3 ABAP Programare avansată a aplicațiilor de afaceri
SAP HANA SQLScript SQLScript
Sybase Watcom-SQL SQL Anywhere Dialectul Watcom-SQL
Teradata SPL Limbaj procedural stocat

Pe lângă extensiile standard SQL / PSM și extensiile SQL proprietare, programabilitatea procedurală și orientată obiect este disponibilă pe multe platforme SQL prin integrarea DBMS cu alte limbi. Standardul SQL definește extensiile SQL / JRT (rutine și tipuri SQL pentru limbajul de programare Java) pentru a susține codul Java în bazele de date SQL. Microsoft SQL Server 2005 folosește SQLCLR (SQL Server Common Language Runtime) pentru a găzdui ansambluri .NET gestionate în baza de date , în timp ce versiunile anterioare ale SQL Server erau limitate la proceduri stocate extinse neadministrate scrise în principal în C. PostgreSQL permite utilizatorilor să scrie funcții într-o varietate de limbi - inclusiv Perl , Python , Tcl , JavaScript (PL / V8) și C.

Interoperabilitate și standardizare

Prezentare generală

Implementările SQL sunt incompatibile între furnizori și nu respectă neapărat standardele. În special, sintaxa datei și orei, concatenarea șirurilor, NULLs și sensibilitatea la caz compară variază de la furnizor la furnizor. Excepții deosebite sunt PostgreSQL și Mimer SQL care se străduiesc să respecte standardele, deși PostgreSQL nu aderă la standard în toate cazurile. De exemplu, plierea numelor necotate cu litere mici în PostgreSQL este incompatibilă cu standardul SQL, care spune că numele necotate ar trebui să fie pliate cu litere mari. Astfel, Fooar trebui să fie echivalent cu FOOnu fooconform standardului.

Implementările populare ale SQL omit de obicei suportul pentru caracteristicile de bază ale SQL standard, cum ar fi tipurile de date DATEsau TIME. Cele mai evidente astfel de exemple și, de altfel, cele mai populare DBMS SQL comerciale și proprietare, sunt Oracle (al cărui DATEcomportament este DATETIMElipsit de un TIMEtip) și MS SQL Server (înainte de versiunea 2008). Ca urmare, codul SQL poate fi portat rar între sistemele de baze de date fără modificări.

Motive pentru incompatibilitate

Mai multe motive pentru această lipsă de portabilitate între sistemele de baze de date includ:

  • Complexitatea și dimensiunea standardului SQL înseamnă că majoritatea implementatorilor nu acceptă întregul standard.
  • Standardul nu specifică comportamentul bazei de date în mai multe domenii importante (de exemplu , indici , stocare de fișiere ...), lăsând implementările să decidă cum să se comporte.
  • Standardul SQL specifică exact sintaxa pe care trebuie să o implementeze un sistem de baze de date conform. Cu toate acestea, specificația standardului pentru semantica constructelor de limbaj este mai puțin bine definită, ducând la ambiguitate.
  • Mulți furnizori de baze de date au baze de clienți mari existente; în cazul în care versiunea mai nouă a standardului SQL intră în conflict cu comportamentul anterior al bazei de date a furnizorului, este posibil ca furnizorul să nu fie dispus să întrerupă compatibilitatea cu versiunile anterioare .
  • Există puține stimulente comerciale pentru ca furnizorii să faciliteze schimbarea furnizorilor de baze de date (a se vedea blocarea furnizorilor ).
  • Utilizatorii care evaluează software-ul bazei de date tind să plaseze alți factori, cum ar fi performanța mai mare în prioritățile lor decât conformitatea standardelor.

Istoricul standardizării

SQL a fost adoptat ca standard de ANSI în 1986 ca SQL-86 și ISO în 1987. Este menținut de ISO / IEC JTC 1, Tehnologia informației, Subcomitetul SC 32, Gestionarea și schimbul de date .

Până în 1996, Institutul Național de Standarde și Tehnologie (NIST) program de standarde de gestionare a datelor a certificat conformitatea DBMS SQL cu standardul SQL. Furnizorii se autocertifică acum conformitatea produselor lor.

Standardul original , a declarat că pronunția oficial pentru "SQL" a fost un initialism : / ˌ ɛ s ˌ k ju ɛ l / ( "ESS tac el"). Indiferent, mulți vorbitori de limba engleza profesionisti baze de date (inclusiv Donald Chamberlin însuși) utilizează acronimul -cum ar fi pronunțat de / s í k w əl / ( „sequel“), oglindire numele de dezvoltare prelansare limba lui, „Sequel“.
Standardul SQL a trecut printr-o serie de revizuiri:

An Nume Alias Comentarii
1986 SQL-86 SQL-87 Mai întâi formalizat de ANSI
1989 SQL-89 FIPS 127-1 Revizuire minoră care a adăugat constrângeri de integritate, adoptată ca FIPS 127-1
1992 SQL-92 SQL2, FIPS 127-2 Revizie majoră (ISO 9075), nivel de intrare SQL-92 adoptat ca FIPS 127-2
1999 SQL: 1999 SQL3 S-au adăugat potrivire expresie regulată, interogări recursive (de exemplu închidere tranzitivă ), declanșatoare , suport pentru instrucțiuni procedurale și de control al fluxului, tipuri nescalare (matrici) și câteva caracteristici orientate obiect (de exemplu tipuri structurate ), suport pentru încorporarea SQL în Java ( SQL / OLB ) și invers ( SQL / JRT )
2003 SQL: 2003 Introducerea caracteristicilor legate de XML ( SQL / XML ), funcții de fereastră , secvențe standardizate și coloane cu valori autogenerate (inclusiv coloane de identitate)
2006 SQL: 2006 ISO / IEC 9075-14: 2006 definește modalitățile prin care SQL poate fi utilizat cu XML. Acesta definește modalitățile de importare și stocare a datelor XML într-o bază de date SQL, manipularea acestora în baza de date și publicarea atât a datelor XML cât și a datelor SQL convenționale în formă XML. În plus, permite aplicațiilor să integreze interogări în codul lor SQL cu XQuery , limbajul de interogare XML publicat de World Wide Web Consortium ( W3C ), pentru a accesa simultan date SQL și documente XML obișnuite.
2008 SQL: 2008 Legalizează ORDER BY în afara definițiilor cursorului. Adaugă INSTEAD OF triggers, instrucțiune TRUNCATE, clauză FETCH
2011 SQL: 2011 Adaugă date temporale (PERIOD FOR) (mai multe informații la: Baza de date temporală # Istoric ). Îmbunătățiri pentru funcțiile ferestrei și clauza FETCH.
2016 SQL: 2016 Adaugă potrivirea modelului de rând, funcțiile tabelului polimorf, JSON
2019 SQL: 2019 Adaugă partea 15, tablouri multidimensionale (tip MDarray și operatori)

Standardul actual

Standardul este desemnat în mod obișnuit prin modelul: ISO / IEC 9075-n: aaaa Partea n: titlu sau, ca scurtătură, ISO / IEC 9075 .

ISO / IEC 9075 este completat de ISO / IEC 13249: SQL Multimedia și pachete de aplicații (SQL / MM), care definește interfețe și pachete bazate pe SQL pentru aplicații răspândite pe scară largă precum video, audio și date spațiale . Părțile interesate pot achiziționa documente privind standardele SQL de la ISO, IEC sau ANSI. O schiță de SQL: 2008 este disponibilă gratuit ca arhivă zip .

Anatomia SQL Standard

Standardul SQL este împărțit în 10 părți, dar cu lacune în numerotare datorită retragerii părților învechite.

  • ISO / IEC 9075-1: 2016 Partea 1: Framework (SQL / Framework). Oferă concepte logice.
  • ISO / IEC 9075-2: 2016 Partea 2: Fundație (SQL / Fundație). Conține cele mai centrale elemente ale limbajului și constă atât din caracteristici obligatorii, cât și opționale .
  • ISO / IEC 9075-3: 2016 Partea 3: Interfață la nivel de apel ( SQL / CLI ). Acesta definește componentele de interfață (structuri, proceduri, legături variabile) care pot fi utilizate pentru a executa instrucțiuni SQL din aplicații scrise în Ada, respectiv C ++, COBOL, Fortran, MUMPS, Pascal sau PL / I. (Pentru Java vezi partea 10.) SQL / CLI este definit în așa fel încât instrucțiunile SQL și apelurile de procedură SQL / CLI sunt tratate ca separate de codul sursă al aplicației apelante. Conectivitatea bazei de date deschise este un super-set bine cunoscut de SQL / CLI. Această parte a standardului constă numai din caracteristici obligatorii .
  • ISO / IEC 9075-4: 2016 Partea 4: Module stocate persistente ( SQL / PSM ). Standardizează extensiile procedurale pentru SQL, inclusiv fluxul de control, gestionarea stării, semnale și demisii ale stării instrucțiunilor, cursori și variabile locale și atribuirea expresiilor variabilelor și parametrilor. În plus, SQL / PSM formalizează declararea și întreținerea rutinelor lingvistice persistente ale bazei de date (de exemplu, „proceduri stocate”). Această parte a standardului constă numai din caracteristici opționale .
  • ISO / IEC 9075-9: 2016 Partea 9: Managementul datelor externe ( SQL / MED ). Oferă extensii la SQL care definesc tipurile de ambalaje de date străine și tipurile de legături de date pentru a permite SQL să gestioneze date externe. Datele externe sunt date accesibile, dar care nu sunt gestionate de un SGBD bazat pe SQL. Această parte a standardului constă numai din caracteristici opționale .
  • ISO / IEC 9075-10: 2016 Partea 10: Legarea limbajului obiectelor ( SQL / OLB ). Acesta definește sintaxa și semantica SQLJ , care este SQL încorporat în Java (vezi și partea 3). Standardul descrie, de asemenea, mecanisme pentru a asigura portabilitatea binară a aplicațiilor SQLJ și specifică diverse pachete Java și clasele conținute ale acestora. Această parte a standardului constă numai din caracteristici opționale . Spre deosebire de SQL / OLB, JDBC definește un API și nu face parte din standardul SQL.
  • ISO / IEC 9075-11: 2016 Partea 11: Scheme de informații și definiții ( SQL / Schemata ). Acesta definește Schema de informații și Schema de definiție, oferind un set comun de instrumente pentru a face ca bazele de date și obiectele SQL să se autodescrie. Aceste instrumente includ identificatorul obiectului SQL, constrângerile de structură și integritate, specificațiile de securitate și autorizare, caracteristicile și pachetele ISO / IEC 9075, suportul caracteristicilor furnizate de implementările DBMS bazate pe SQL, informații despre implementarea DBMS bazate pe SQL și elemente de dimensionare și valorile acceptate de implementările SGBD. Această parte a standardului conține atât caracteristici obligatorii, cât și opționale .
  • ISO / IEC 9075-13: 2016 Partea 13: Rutine și tipuri SQL folosind limbajul de programare Java TM ( SQL / JRT ). Specifică abilitatea de a invoca metode Java statice ca rutine din aplicațiile SQL („Java-in-the-database”). De asemenea, solicită posibilitatea de a utiliza clasele Java ca tipuri structurate de utilizator definite de SQL. Această parte a standardului constă numai din caracteristici opționale .
  • ISO / IEC 9075-14: 2016 Partea 14: Specificații legate de XML ( SQL / XML ). Specifică extensii bazate pe SQL pentru utilizarea XML împreună cu SQL. Este introdus tipul de date XML , precum și mai multe rutine, funcții și mapări de tip XML-la-SQL pentru a sprijini manipularea și stocarea XML într-o bază de date SQL. Această parte a standardului constă numai din caracteristici opționale .
  • ISO / IEC 9075-15: 2019 Partea 15: Tablouri multidimensionale (SQL / MDA). Specifică un tip de tablou multidimensional (MDarray) pentru SQL, împreună cu operații pe MDarrays, felii MDarray, celule MDarray și caracteristici conexe. Această parte a standardului constă numai din caracteristici opționale .

Extensii la standardul ISO / IEC

ISO / IEC 9075 este completat de ISO / IEC 13249 SQL Multimedia și pachete de aplicații . Acest standard strâns legat, dar separat, este dezvoltat de același comitet. Acesta definește interfețele și pachetele bazate pe SQL. Scopul este un acces unificat la aplicații tipice de baze de date cum ar fi text, imagini, extragere de date sau date spațiale .

  • ISO / IEC 13249-1: 2016 Partea 1: Cadru
  • ISO / IEC 13249-2: 2003 Partea 2: Full-Text
  • ISO / IEC 13249-3: 2016 Partea 3: Spațială
  • ISO / IEC 13249-5: 2003 Partea 5: Imagine statică
  • ISO / IEC 13249-6: 2006 Partea 6: Exploatarea datelor
  • ISO / IEC 13249-7: 2013 Partea 7: Istorie
  • ISO / IEC 13249-8: xxxx Partea 8: metadate Registrul de acces MRA (în curs de execuție)

Rapoarte tehnice

ISO / IEC 9075 este, de asemenea, însoțit de o serie de rapoarte tehnice, publicate ca ISO / IEC TR 19075. Aceste rapoarte tehnice explică justificarea și utilizarea anumitor caracteristici ale SQL, oferind exemple acolo unde este cazul. Rapoartele tehnice sunt non-normative; dacă există vreo discrepanță față de 9075, textul din 9075 este valabil. Rapoartele tehnice 19075 disponibile în prezent sunt:

  • ISO / IEC TR 19075-1: 2011 Partea 1: Suport pentru expresii regulate XQuery în SQL
  • ISO / IEC TR 19075-2: 2015 Partea 2: Suport SQL pentru informații legate de timp
  • ISO / IEC TR 19075-3: 2015 Partea 3: SQL încorporat în programe care utilizează limbajul de programare Java
  • ISO / IEC TR 19075-4: 2015 Partea 4: SQL cu rutine și tipuri folosind limbajul de programare Java
  • ISO / IEC TR 19075-5: 2016 Partea 5: Recunoașterea modelului de rând în SQL
  • ISO / IEC TR 19075-6: 2017 Partea 6: Suport SQL pentru JavaScript Object Notation (JSON)
  • ISO / IEC TR 19075-7: 2017 Partea 7: Funcțiile tabelului polimorf în SQL
  • ISO / IEC TR 19075-8: 2019 Partea 8: Tablouri multidimensionale (SQL / MDA)
  • ISO / IEC TR 19075-9: 2020 Partea 9: Capabilități de procesare analitică online (OLAP)

Alternative

Ar trebui făcută o distincție între alternativele la SQL ca limbaj și alternativele la modelul relațional în sine. Mai jos sunt propuse alternative relaționale la limbajul SQL. Consultați baza de date de navigație și NoSQL pentru alternative la modelul relațional.

Procesare SQL distribuită

Arhitectura de baze de date relaționale distribuite (DRDA) a fost proiectată de un grup de lucru din cadrul IBM în perioada 1988-1994. DRDA permite bazelor de date relaționale conectate la rețea să coopereze pentru a îndeplini cererile SQL.

Un utilizator sau un program interactiv poate emite instrucțiuni SQL către un RDB local și poate primi tabele de date și indicatori de stare ca răspuns de la RDB-uri la distanță. Instrucțiunile SQL pot fi, de asemenea, compilate și stocate în RDB-uri la distanță ca pachete și apoi invocate de numele pachetului. Acest lucru este important pentru funcționarea eficientă a programelor de aplicații care emit interogări complexe, de înaltă frecvență. Este deosebit de important atunci când mesele care urmează să fie accesate sunt amplasate în sisteme la distanță.

Mesajele, protocoalele și componentele structurale ale DRDA sunt definite de Arhitectura de gestionare a datelor distribuite . Procesarea SQL distribuită ala DRDA este distinctă de bazele de date SQL distribuite contemporane .

Critici

Proiecta

SQL se abate în mai multe moduri de la fundamentarea sa teoretică, de modelul relațional și de calculul său de tupluri. În acel model, un tabel este un set de tupluri, în timp ce în SQL, tabelele și rezultatele interogării sunt liste de rânduri; același rând poate apărea de mai multe ori, iar ordinea rândurilor poate fi utilizată în interogări (de exemplu, în clauza LIMIT). Criticii susțin că SQL ar trebui să fie înlocuit cu un limbaj care revine strict la fundamentul original: de exemplu, a se vedea al treilea manifest .

Ortogonalitate și completitudine

Specificațiile timpurii nu au acceptat caracteristici majore, cum ar fi tastele primare. Seturile de rezultate nu au putut fi denumite și subinterogările nu au fost definite. Acestea au fost adăugate în 1992.

Lipsa tipurilor de sumă a fost descrisă ca un obstacol către utilizarea deplină a tipurilor definite de utilizator SQL. Asistența JSON, de exemplu, trebuie adăugată de un nou standard în 2016.

Nul

Conceptul de Nul face obiectul unor dezbateri . Marcatorul Null indică absența unei valori și este distinct de o valoare 0 pentru o coloană întreagă sau un șir gol pentru o coloană de text. Conceptul de valori nule impune logica cu 3 valori în SQL , care este o implementare concretă a logicii generale cu 3 valori .

Dubluri

O altă critică populară este că permite rânduri duplicate, făcând integrarea cu limbaje precum Python , ale căror tipuri de date ar putea face dificilă reprezentarea datelor cu precizie, în termeni de analiză și prin absența modularității.

Acest lucru este de obicei evitat prin declararea unei chei primare sau a unei constrângeri unice, cu una sau mai multe coloane care identifică în mod unic un rând din tabel.

Nepotrivire a impedanței

Într-un sens similar cu nepotrivirea impedanței obiect-relațional , apare o nepotrivire între limbajul SQL declarativ și limbajele procedurale în care SQL este de obicei încorporat.

Tipuri de date SQL

Standardul SQL definește trei tipuri de tipuri de date :

  • tipuri de date predefinite
  • tipuri construite
  • tipuri definite de utilizator.

Tipurile construite sunt unul dintre ARRAY, MULTISET, REF (erence) sau ROW. Tipurile definite de utilizator sunt comparabile cu clasele în limbaj orientat obiect cu proprii constructori, observatori, mutatori, metode, moștenire, supraîncărcare, suprascriere, interfețe etc. Tipurile de date predefinite sunt sprijinite intrinsec de implementare.

Tipuri de date predefinite

  • Tipuri de caractere
  • Personaj (CHAR)
  • Caracter variabil (VARCHAR)
  • Obiect mare cu caractere (CLOB)
  • Tipuri de caractere naționale
  • Personaj național (NCHAR)
  • Caracterul național variază (NCHAR VARYING)
  • Obiect mare cu caracter național (NCLOB)
  • Tipuri binare
  • Binar (BINAR)
  • Variabil binar (VARBINAR)
  • Obiect mare binar (BLOB)
  • Tipuri numerice
  • Tipuri numerice exacte (NUMERIC, DECIMAL, SMALLINT, INTEGER, BIGINT)
  • Tipuri numerice aproximative (FLOAT, REAL, DUBLĂ PRECIZIE)
  • Tipul cu virgulă mobilă zecimală (DECFLOAT)
  • Tipuri Datetime (DATE, TIME, TIMESTAMP)
  • Tipul intervalului (INTERVAL)
  • Boolean
  • XML
  • JSON

Vezi si

Note

Referințe

Surse

Documente cu standarde SQL

ITTF standarde și rapoarte tehnice disponibile publicului

ISO / IEC Tehnologia Informatiei Task Force publică standarde accesibile publicului , inclusiv SQL. Corectele tehnice (corecții) și rapoartele tehnice (documente de discuții) sunt publicate acolo.

SQL - Partea 1: Framework (SQL / Framework)

Proiecte de documente

Standardele SQL formale sunt disponibile de la ISO și ANSI contra cost. Pentru utilizare informativă, spre deosebire de respectarea strictă a standardelor, proiectele întârziate sunt deseori suficiente.

linkuri externe