Limbaj de interogare structurat

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
SQL
limbaj de programare
SQL ANATOMY wiki.svg
Părțile unei instrucțiuni.
Autor Donald Chamberlin
Data de origine 1974
Ultima versiune SQL: 2011
( 2011 )
Utilizare crearea, interogarea, gestionarea bazelor de date
Paradigme multiparadigm
Tastare static, puternic
Extensii comune .sql

În informatică , SQL ( Structured Query Language ) (/ skjuːˈɛl / "SQL") este un limbaj standardizat pentru baze de date bazate pe model relațional ( RDBMS ), conceput pentru următoarele:

În ciuda numelui, nu este deci un limbaj de interogare simplu: unele dintre subseturile sale, de fapt, vă permit să creați, să gestionați și să administrați baze de date.

Istorie

SQL s-a născut în 1974 de Donald Chamberlin , în laboratoarele IBM . S-a născut ca un instrument de lucru cu baze de date care urmează modelul relațional . În acel moment, totuși, se numea SEQUEL (din acest motiv pronunția corectă IPA a SQL este [ˈɛsˈkjuˈɛl] și cea informală [ˈsiːkwəl]). În 1975 a fost dezvoltat un prototip numit SEQUEL-XRM ; odată cu aceasta au fost efectuate experimente care au condus, în 1977 , la o nouă versiune a limbajului, care inițial ar fi trebuit să fie numită SEQUEL / 2, dar care apoi a devenit, din motive legale (numele SEQUEL fusese deja folosit și, mai presus de toate, înregistrat , într-un alt scop pentru o companie aeriană), SQL. Pe el a fost dezvoltat prototipul System R , care a fost utilizat de IBM pentru utilizări interne și pentru unii dintre clienții săi. Dar, având în vedere succesul său, și alte companii au început rapid să dezvolte produse bazate pe SQL. În 1981 IBM a început să vândă unele produse relaționale și în 1983 a lansat DB2 , popularul său SGBD relațional în ultimii ani ai secolului XX [ când? ] . SQL a devenit rapid standardul industrial pentru software-ul care utilizează modelul relațional.

ANSI l-a adoptat ca standard din 1986 , fără a face modificări substanțiale la versiunea dezvoltată inițial de IBM. În 1987 , ISO a procedat la fel. Această primă versiune standard se numește SQL / 86. În anii următori s-au făcut alte versiuni, care au fost SQL / 89, SQL / 92 și SQL / 2003. Acest proces de standardizare a avut ca scop crearea unui limbaj care să funcționeze pe toate SGBD relaționale (sisteme de gestionare a bazelor de date), dar acest obiectiv nu a fost atins. De fapt, diferiții producători au implementat limba cu numeroase variații și, în practică, au adoptat standardele la un nivel care nu depășește minimul, definit de Ansi ca nivel de intrare.

Caracteristici

SQL este un limbaj pentru interogarea și gestionarea bazelor de date prin utilizarea unor constructe de programare numite interogări . Cu SQL puteți citi, modifica, șterge date și gestiona exercițiile și funcțiile administrative din sistemul de baze de date. Majoritatea implementărilor au interfață cu linia de comandă pentru executarea directă a comenzilor, ca alternativă la interfața grafică cu un singur utilizator GUI .

Conceput inițial ca un limbaj de tip declarativ , de atunci a evoluat odată cu introducerea de structuri procedurale , instrucțiuni de control al fluxului , tipuri de date definite de utilizator și diverse alte extensii de limbaj. De la definirea standardului SQL: 1999, multe dintre aceste extensii au fost adoptate formal ca parte integrantă a SQL în secțiunea SQL / PSM a standardului.

Unele dintre cele mai frecvente critici adresate SQL se referă la lipsa portabilității codului între diferiți furnizori, la modul inadecvat în care sunt tratate datele lipsă (nule) și la semantica uneori complicată inutil.

Structura

Fiind un limbaj declarativ , SQL nu necesită scrierea secvențelor de operații (cum ar fi limbajele imperative ), mai degrabă decât specificarea proprietăților logice ale informațiilor căutate. Se împarte în:

Operatori

Operatorii, disponibili de SQL standard, sunt împărțiți în șapte categorii:

  • Operatori de misiune
  • Operatori de comparație
  • Operatori de șiruri
  • Operatori aritmetici
  • Operatori condiționati
  • Operatori logici
  • Operatori bit-bit

Operatori de misiune

Operatorii de atribuire atribuie o valoare unei variabile sau câmpuri.

  • = Exprimă o sarcină și nu returnează nicio valoare.
  • := Exprimă o atribuire a unei valori unei variabile care nu a fost încă instanțiată și nu returnează nicio valoare.

Operatori de comparație

Operatorii de comparație sunt utilizați pentru a determina egalități și inegalități între valori și pentru a căuta în date. Mai jos este o schemă de tabel:

  • = Exprimă egalitatea între două valori numerice sau șiruri de caractere (unde nu este folosit ca operator de atribuire)
  • IS Este folosit pentru a verifica dacă o valoare este NULĂ sau dacă corespunde unei valori booleene (ADEVĂRAT, FALS, NECUNOSCUT).
  • LIKE Exprimă similitudinea între două valori literal: cu operatorul LIKE este posibil să se utilizeze, pentru comparații, caracterele speciale% (înlocuiește un număr arbitrar de litere) și _ (înlocuiește o literă arbitrară)
  • < Determină dacă o valoare este mai mică decât alta
  • > Stabilește dacă o valoare este mai mare decât alta
  • <= Determină dacă o valoare este mai mică sau egală cu alta
  • >= Stabilește dacă o valoare este mai mare sau egală cu alta
  • <> Determină dacă două valori sunt diferite între ele
  • != echivalent cu <>
  • BETWEEN ... AND Preluează o valoare între două valori
  • IN Determină dacă o valoare este conținută într-o listă de valori posibile
  • EXISTS Determină dacă o anumită subinterogare returnează o valoare
  • ANY or SOME Determină dacă o anumită subinterogare returnează cel puțin una dintre valorile specificate
  • ALL Determină dacă o anumită subinterogare returnează toate valorile dorite

Unii dintre acești operatori corespund unui operator opus folosind termenul NU:

  • IS NOT
  • NOT LIKE
  • NOT BETWEEN
  • NOT IN
  • NOT EXISTS

Operatori de șiruri

Operatorii de șiruri iau două șiruri ca operanzi și returnează o valoare booleană sau șir.

LIKE operator

Operatorul LIKE (se utilizează și MATCHES) este, de obicei, baza criteriilor de căutare a cuvintelor cheie și a interogărilor făcute de un motor de căutare.

Caracterul de subliniere ( _ ), numit wildchar , caută un singur caracter arbitrar; simbolul % se numește operator wildcard și caută pe un șir arbitrar, adică pe o gamă de valori numerice. Pentru a căuta caracterul de subliniere într-o expresie, utilizați sintaxa [_] (vezi și mai jos).

Sintaxa Microsoft Access este ușor diferită de acest standard internațional și mai completă. În loc de simbolul de subliniere , utilizați ? pentru a căuta un singur caracter (atât numărul, cât și litera); în loc de simbolul % , operatorul wildcard este dat de * . Accesul vă permite să căutați o singură valoare numerică folosind tasta hash (sau hash ) ( # ) și să căutați un caracter (literă și număr) în interiorul sau în afara unui set de valori, cu sintaxa [] și [!] . Intervalul poate fi punctual sau colectiv: de exemplu, [AF] indică literele dintre A și F, în timp ce [A, F] indică doar căutarea acestor două litere. De exemplu, o afirmație precum „LIKE P [! AF] C” caută cuvinte care încep cu „P”, care se termină cu „C”, iar a doua literă nu are caracterele dintre literele A și F. Această completitudine în implementarea sa din LIKE se datorează faptului că Access nu include operatori mai complexi precum SIMILAR TO și REGEXP.

În ciuda acestei caracteristici complete, driverul OLE DB pentru Windows are o eroare cunoscută: operatorul wildcard * poate fi utilizat numai în cadrul aplicației, în timp ce simbolul clasic % trebuie utilizat prin OLE DB / ODBC.

SIMILARE CU și operatorii REGEXP

Operatorul SIMILAR TO face parte din standardul SQL și vă permite să verificați dacă un șir se potrivește cu o expresie regulată dată. Sintaxa utilizată este diferită de standardele de facto stabilite de Perl și POSIX și din acest motiv adoptarea acestui operator de către producători este destul de limitată.

Operatorul REGEXP este mai popular și vă permite, de asemenea, să verificați dacă un șir se potrivește cu o expresie regulată dată. Sintaxa utilizată variază în funcție de implementarea SQL, totuși respectă în general standardele de facto stabilite de Perl sau POSIX.

SQL include, de asemenea, operatori complementari care nu sunt similari cu și care nu sunt REGEXP .

BINAR

Acest operator servește pentru a face ca aplicarea expresiilor regulate să distingă între majuscule și minuscule, adică să se asigure că literele mari sunt considerate diferite de minuscule.

COLLATE

Acest operator este utilizat pentru a specifica ce colație (set de reguli pentru sortarea unui set de caractere) trebuie utilizat în expresia curentă.

Operatori aritmetici

Operatorii aritmetici acceptă operatori de tip numeric (întreg sau zecimal) și returnează rezultatul operației aritmetice corespunzătoare. Mai jos este o schemă de tabel:

Descrierea operatorului

  • + Faceți o adăugare sau lăsați semnul unui număr neschimbat
  • - Efectuați o scădere sau inversați semnul unui număr
  • * Faceți o multiplicare
  • / Fă o diviziune
  • MOD Returnează restul unei divizii
  • DIV Returnează partea întreagă a unei diviziuni

Operatori condiționati

Singurul operator condițional SQL este WHERE (unde) și este utilizat pentru a defini criteriile de căutare vizate.

Operatori logici

Operatorii logici ai SQL aparțin operatorilor logici booleeni și sunt ȘI (și), SAU (sau, sau), NU (nu), XOR (numit și „SAU exclusiv”).

  • Operatorul AND logic, care leagă două condiții, returnează TRUE dacă și numai dacă ambii operanzi sunt adevărați.
  • Operatorul OR logic, care leagă două condiții, returnează TRUE dacă și numai dacă cel puțin unul dintre operanzi este adevărat.
  • Operatorul NOT acceptă un singur operand și returnează valoarea inversă: false dacă este adevărat, adevărat dacă este fals.
  • Operatorul XOR , care acceptă două condiții, returnează TRUE dacă și numai dacă este adevărat doar unul dintre operanzi.

Operatori bit-bit

Standardul SQL nu prevede această familie de operatori, însă este prezent în multe implementări. Acești operatori efectuează operațiuni AND, OR, NOT și XOR la ​​nivel de biți.

Reguli generale pentru operatori

O expresie constă dintr-o valoare sau o operație care returnează o valoare. Această definiție este recursivă: expresiile pot fi imbricate. Deoarece operatorii returnează întotdeauna o valoare, este perfect legitim să le combinați împreună pentru a forma condiții din ce în ce mai complexe.

Utilizarea parantezelor rotunde () în expresiile de căutare vă permite să modificați sau să faceți explicită prioritatea operatorilor, adică ordinea în care sunt procesate. În cazul în care o expresie compusă este scrisă fără paranteze, se aplică prioritatea dintre operatorii furnizați de limbă.

DDL: Definiția datelor

Pictogramă lupă mgx2.svg Același subiect în detaliu: Limbajul de definire a datelor .

DDL ( Data Definition Language ) este utilizat pentru a crea, modifica sau șterge obiecte dintr-o bază de date. Comenzile DDL definesc structura bazei de date și, prin urmare, a datelor conținute în aceasta, dar nu oferă instrumentele pentru modificarea datelor pentru care este utilizat DML ( Data Manipulation Language ). Utilizatorul trebuie să aibă permisiunile necesare pentru a acționa asupra structurii bazei de date și aceste permisiuni sunt atribuite prin DCL ( Data Control Language ).

Domenii elementare

Pictogramă lupă mgx2.svg Același subiect în detaliu: Tipul de date (baze de date) .

SQL oferă șase familii de domenii elementare din care pot fi definite domeniile care trebuie asociate cu atributele schemei.

DML: Manipularea datelor

DML ( Data Manipulation Language ) oferă comenzi pentru inserarea, modificarea și ștergerea datelor în tabelele unei baze de date. Structura acestor date trebuie să fi fost deja definită prin DDL. În plus, permisiunea de accesare a acestor date trebuie atribuită anterior utilizatorului prin DCL.

Introduce

Comanda are funcția de a insera date în tabele .

Coloanele (sau câmpurile) țintă ale valorilor pot fi sau nu declarate în comandă. Dacă nu sunt declarate, trebuie transmisă o valoare comenzii pentru fiecare coloană a tabelului, respectând cu strictețe ordinea coloanelor. În cazul în care , pe de altă parte, sunt declarate coloanele țintă, este posibil să se indice numai coloanele pentru care sunt transmise valori, cu condiția ca valorile pentru toate coloanele nu nule (care nu poate fi nul) din tabel sunt introduse oricum.

De la sine, comanda insert funcționează prin inserarea unui singur rând în tabel la un moment dat. Cu toate acestea, este posibil să inserați mai mult de un rând „automat” trecând către inserție o serie de rânduri (sau tupluri) rezultate dintr-o comandă selectată, atâta timp cât aceste rânduri sunt compatibile cu coloanele tabelului pe care datele este inserat.

Introduceți sintaxa comenzii

  • Insert simplu:
 INSERT INTO table_name
VALORI (lista valori, toate, respectând ordinea“a câmpurilor de masă, de exemplu , «donat»);

sau

 INSERT INTO nume_tabelă (lista de domenii vizate de „includere)
VALORI (lista valori, toate, „respectând ordinea câmpurilor declarate peste, ca«donat»);
  • Inserați folosind selectați:
 INSERT INTO nume_tabelă (lista de domenii vizate de „intrare, de exemplu , «donat») AS
SELECTA ...;

Actualizați

Comanda de actualizare are funcția triplă de a modifica datele tabelelor.

Numele fiecărui câmp care trebuie modificat trebuie declarat după cuvântul cheie SET și trebuie să fie urmat de simbolul = (egal) și de noua valoare pe care trebuie să o asume.

Aveți posibilitatea să modificați mai multe câmpuri pe aceeași linie într - o comandă de actualizare unică, separându - le unul de altul cu simbolul , (virgula).

Comanda generică actualizează toate rândurile tabelului. Puteți restricționa numărul aplicând cuvântul cheie suplimentar WHERE , care vă permite să faceți o selecție calitativă a rândurilor impunând condiții asupra datelor din rânduri înainte de actualizare.

Sintaxa comenzii de actualizare

  • Actualizare generică:
 ACTUALIZARE nume_tabel
SET field_name1 = 'value1_new',
    field_name2 = 'new_value2' ,
     ...
;
  • Actualizați cu condiția:
 ACTUALIZARE nume_tabel
SET field_name1 = 'value1_new',
    field_name2 = 'new_value2'
WHERE field_name3 = 'valoare' ;

Șterge

Comanda de ștergere are funcția de a șterge date din tabele.

La fel ca comanda de actualizare, și ștergerea poate funcționa într-un mod generic ștergând toate rândurile din tabel sau poate identifica rândurile care trebuie șterse utilizând cuvântul cheie suplimentar WHERE și condiția (sau condițiile) asociate acestuia.

Sintaxa comenzii de ștergere

  • Ștergere generică:
 ȘTERGEȚI DIN table_name ;
  • Ștergeți cu condiția:
 ȘTERGEȚI DIN table_name
UNDE field_name = 'valoare' ;

Tăiați tabelul

După cum s-a menționat deja, o clauză Ștergere fără O unde șterge toate rândurile din tabelul specificat. Cu toate acestea, există un alt mod de a goli complet un tabel: comanda Trunchie tabel . Unele SGBD implementează această comandă (care nu este prezentă în standardul SQL) într-un mod mai rapid decât o Ștergere, de exemplu, ștergând fișierul de date fără a-l citi și recrea-l gol. Cu toate acestea, acest lucru împiedică în general returnarea unor informații accesorii, cum ar fi numărul de rânduri șterse.

Trunchierea sintaxei comenzii tabelului

 TRUNCATE [ TABLE ] nume_tabel

Tranzactia

O tranzacție este un bloc de instrucțiuni care sunt strâns legate între ele. În cazul în care, din orice motiv (o eroare internă în SGBD, o eroare în instrucțiunile SQL, o eroare de sistem) una dintre instrucțiuni nu se finalizează, întreaga tranzacție va fi anulată. Prin urmare, se spune că o tranzacție este o operație atomică , adică nu este divizibilă: dacă nu este efectuată în întregime, nu va fi efectuată deloc. Acesta este unul dintre cele mai utilizate instrumente pentru a asigura integritatea datelor.

Până când o tranzacție are succes, modificările pe care le face sunt vizibile doar pentru sesiunea care a inițiat tranzacția. În funcție de nivelul de izolare, ceilalți utilizatori vor putea accesa o versiune mai veche a datelor sau vor fi așteptați până la finalizarea tranzacției.

Nu toate SGBD acceptă tranzacții, în timp ce altele le acceptă numai în anumite condiții (de exemplu în MySQL sunt acceptate numai pentru anumite tipuri de tabele). Mai mult, SGBD poate limita tranzacțiile la un subset de SQL (de exemplu, în MySQL, dacă este emisă o comandă DDL, tranzacția curentă se termină).

Unele SGBD permit, de asemenea, tranzacții imbricate. Modificările efectuate de o tranzacție conținută într-o altă tranzacție nu sunt eficiente până când tranzacția exterioară nu este finalizată cu succes.

O alternativă semantic foarte similară este salvarea punctelor. Acestea vă permit să salvați o versiune a datelor în mijlocul unei tranzacții. Apoi va fi posibil să anulați întreaga tranzacție sau să restaurați unul dintre punctele de salvare stabilite anterior. Această salvare se poate face într-un bloc de cod condițional, ceea ce face această caracteristică mult mai dinamică decât tranzacțiile imbricate.

Începeți tranzacția

Pentru a iniția în mod explicit o tranzacție, utilizați comanda BEGIN TRANSACTION . Lipsa acestei comenzi face ca fiecare instrucțiune să acționeze ca o tranzacție separată.

Începeți sintaxa comenzii tranzacției
 BEGIN TRANSACTION [ transaction_name ];

Angajează-te

Comanda COMMIT este utilizată pentru a confirma tranzacția. Odată cu acesta sunt stocate toate modificările aduse datelor anterior.

Sintaxa comenzii Commit
 COMMIT [ TRANSACTION ] [ transaction_name ];

Revenire

Comanda ROLLBACK este utilizată pentru a anula tranzacția. Odată cu acesta, toate modificările aduse datelor anterior (începând de la începutul tranzacției) sunt anulate.

Sintaxa comenzii de revenire
 ROLLBACK [ TRANSACTION ] [ transaction_name ];

DQL: interogare date

DQL (limbajul de interogare a datelor) include comenzi pentru citirea și prelucrarea datelor într-o bază de date. Aceste date trebuie să fi fost introduse prin DML în structuri create cu DDL, în timp ce DCL stabilește dacă utilizatorul poate accesa aceste date.

Selectați

Cu comanda de selectare avem posibilitatea de a extrage datele, într-un mod țintit, din baza de date.

Sintaxa comenzii select

 SELECTEAZĂ [ TOATE | DISTINCT | TOP ] list_elements_selection
FROM table_references_list
[UNDE espressione_condizionale]
[ GROUP BY column_list [ HAVING Condition ] ]
[ ORDIN BY BY column_list ];

unde este:

  • list_elements_selection este lista câmpurilor care trebuie extrase (separate una de cealaltă cu o virgulă);
  • reference_list_table este lista tabelelor din care se extrag datele;
  • expresia_condițională reprezintă lista condițiilor, adică cerințele pe care trebuie să le respecte un câmp pentru a fi preluate din interogare (condițiile sunt specificate folosind operatorii de comparație, conectorii logici și comparatorii, cum ar fi între , în , cum ar fi , este nul ) ;
  • listă_coloană este coloana sau coloanele care trebuie luate ca referință pentru sortarea datelor de ieșire.

În mod implicit, comanda SELECT funcționează cu metoda ALL , dar prin specificarea DISTINCT (sau UNIQUE în funcție de implementări) este posibil să se elimine rândurile duplicate din rezultate.

Clauza GROUP BY este utilizată pentru a grupa rezultatele după tuplu, în timp ce condiția relativă HAVING este utilizată pentru a filtra rezultatele.

 SELECTAȚI vânzătorul , suma ( sumă_factură ) 
 DIN facturi
 GRUPUL PE Furnizor
 AVÂND sumă ( sumă_factură ) > 10 . 000

În acest caz, furnizorii care au o cifră de afaceri totală mai mare de 10.000 sunt eliminați.

Clauza ORDER BY este utilizată pentru a sorta rezultatele pe baza unuia sau mai multor câmpuri.

LIMIT (sau TOP , în funcție de implementări) limitează numărul de rânduri furnizate: LIMIT 10 ia primele 10 rânduri ale tabelului meu. De asemenea, este posibil să renunțați la un număr de rânduri la începutul rezultatelor adăugând un parametru la LIMIT sau la clauza OFFSET .

SQL standard nu oferă nicio sortare dacă nu specificați clauza ORDER BY , deci fără aceasta, LIMIT are și un efect imprevizibil.
Un exemplu este următorul:

 SELECT DISTINCT prenume , prenume , oraș_reședință
 DE la utilizatori
 UNDE ani > = 18
 ORDINĂ CU PRENUME

Această interogare extrage lista tuturor utilizatorilor adulți sortând rezultatul după numele de familie. În clauzele GROUP BY și ORDER BY , numele câmpurilor pot fi înlocuite cu numărul corespunzător ordinii funcției SELECT : în ultimul caz ORDER BY prenume puteți scrie ORDER BY 1 .

Definiția selectării este, totuși, mult mai largă, oferă multe alte opțiuni, dar, în principiu, majoritatea interogărilor sunt compuse cu aceste opțiuni.

 ALEGE DISTINCT *
 DE la utilizatori

asteriscul vă permite să includeți toate coloanele tabelului utilizator în selecție

Cu selectarea este posibilă și efectuarea de calcule:

 Selectați DISTINCT cod_art , preț_unitate * stoc AS Total , stoc * sarcină AS TotIngombro ;
 DIN articole

aceasta produce date extrase, dar și date calculate. Clauza AS este utilizată pentru a da un nume noii coloane care va fi afișată în rezultatul selectării efectuate.

Multe SGBD acceptă clauza LIMIT non-standard, care trebuie plasată ultima și poate lua trei forme:

 LIMITĂ < număr_rezultate >
 LIMIT < position_first_result > , < number_results >
 LIMIT < number_results > [ OFFSET < position_first_result > ]

number_results este numărul de rânduri de extras. pos_first_result este indexul primului rând care trebuie extras. Împreună, acestea pot fi folosite pentru a împărți rezultatele în blocuri și a le citi puțin câteodată (de exemplu pentru confortul DBA sau pentru paginarea rezultatelor afișate de o aplicație web).

A te alatura

Pictogramă lupă mgx2.svg Același subiect în detaliu: Join (SQL) .

O formă de selectare compusă din mai multe tabele cu unul sau mai multe câmpuri comune este obținută prin clauza Join .

Subinterogare

Pictogramă lupă mgx2.svg Același subiect în detaliu: interogări imbricate .

Subcercetările pot fi inserate oriunde limbajul SQL admite o expresie care returnează o singură valoare și în clauza FROM. În acest din urmă caz, subinterogarea se mai numește tabele derivate (tabele derivate).

Subcercările propriu-zise pot returna o singură valoare sau un set de rezultate, după caz. Un exemplu destul de simplu este acela în care doriți să extrageți valori numerice peste medie dintr-un tabel. O singură Selectare nu poate citi media și în același timp valorile care o depășesc. În acest scop, vom avea o selecție care citește media:

 SELECTEAZĂ AVG ( câmpul 1 ) DIN tabelul_meu ;

Această interogare va fi plasată în clauza WHERE a interogării externe; subinterogarea este executată mai întâi:

 SELECT * FROM my_table WHERE field1 > ( SELECT AVG ( field1 ) FROM my_table );

După cum puteți vedea, din punct de vedere sintactic este necesar să puneți subinterogările între paranteze.

Tabelele derivate

Tabelele derivate sunt un caz special de subinterogare: un Select intern extrage datele care vor fi apoi interogate de selectarea externă.

Următorul exemplu este utilizat în scopuri educaționale, dar nu este o abordare optimă. Cu toate acestea, să presupunem că doriți să extrageți înregistrările pentru care câmpul de poștă electronică nu este gol, alegându-le printre utilizatorii a căror înregistrare a fost confirmată. Iată cum puteți face acest lucru cu un tabel derivat:

 SELECT E-mail FROM ( SELECT E-mail FROM utilizatori WHERE confirm = TRUE );

În realitate, tabelele derivate sunt utile acolo unde nu există alte abordări posibile, ceea ce se întâmplă atunci când interogarea externă conține un JOIN.

DCL: control asupra datelor

DCL este utilizat pentru a oferi sau revoca utilizatorilor permisiunile necesare pentru a putea utiliza comenzile DML și DDL, precum și comenzile DCL în sine (pe care trebuie să le poată modifica la rândul lor permisiunile pentru unele obiecte).

Acorda

Comanda Grant acordă sau acordă una sau mai multe permisiuni unui anumit utilizator (de exemplu: permisiunea de a insera într-un tabel, de a-l modifica sau de a-l șterge) și unui administrator valoros.

Revoca

Comanda Revocare revocă una sau mai multe permisiuni unui anumit utilizator (de exemplu, permisiunea de ștergere dintr-un tabel).

Programe stocate

Termenul Programe stocate, sau Logică de afaceri, se referă la acele rutine programate în SQL, cu extensii procedurale care permit controlul fluxului, bucle , cursoare și gestionarea erorilor. În cele mai complete implementări SQL, programele stocate pot fi de diferite tipuri:

În plus, unele SGBD, cum ar fi MySQL , vă permit să creați proceduri SQL care sunt executate la un moment dat o singură dată sau în mod repetat la un anumit interval de timp, cum ar fi sistemele Cron Jobs ale Unix.

Critica SQL

SQL este un limbaj de interogare conceput pentru a interacționa cu baze de date relaționale. Cu toate acestea, teoreticienii subliniază că caracteristicile originale ale SQL, inspirate din calculul tuplelor , îl încalcă de fapt [ fără sursă ] . Cele mai recente extensii ale sale acceptă pe deplin modelul relațional , dar au înrăutățit încălcările menționate anterior [ citate ] .

În plus, există multe critici cu privire la utilizarea practică a SQL:

  • nu oferă o modalitate standard de a diviza o comandă lungă în comenzi mai scurte la care se poate face referire printr-un nume (deși multe implementări oferă de fapt această funcționalitate);
  • diferitele implementări sunt în general incompatibile între ele;
  • se pune prea multă încredere pe valorile NULL , o meta-valoare care, potrivit unor academicieni, ar trebui să indice absența unei valori, în opinia altora ar trebui să indice o valoare necunoscută, în timp ce în practică ajunge să fie folosită în ambele sensuri sau doar una , dar în mod inconsecvent [ fără sursă ] .

Bibliografie

  • ( EN ) „SQL-99 Complete, Really”, Peter Gulutzan și Trudy Pelzer, Cărți R&D, 1999, ISBN 978-0-87930-568-0

Elemente conexe

Altri progetti

Collegamenti esterni

Controllo di autorità LCCN ( EN ) sh86006628 · GND ( DE ) 4134010-3 · BNF ( FR ) cb12101816f (data) · BNE ( ES ) XX531785 (data)
Informatica Portale Informatica : accedi alle voci di Wikipedia che trattano di informatica