Limbaj de interogare structurat
Această intrare sau secțiune despre limbaje de programare nu menționează sursele necesare sau cei prezenți sunt insuficienți . |
SQL limbaj de programare | |
---|---|
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:
- creați și modificați scheme de baze de date (DDL = Limbajul de definire a datelor );
- introduceți, modificați și gestionați datele stocate (DML = Limbajul de manipulare a datelor );
- interogați datele stocate (DQL = Data Query Language );
- creați și gestionați accesul la date și instrumente de control (DCL = Limbajul de control al datelor ).
Î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:
- Limbajul de definire a datelor (DDL) - vă permite să creați și să ștergeți baze de date sau să modificați structura acestora
- Limbajul de manipulare a datelor (DML) - vă permite să inserați, să ștergeți, să modificați date
- Limbajul de control al datelor (DCL) - vă permite să gestionați utilizatorii și permisiunile
- Limbaj de interogare (QL) - vă permite să interogați baza de date, adică să citiți datele.
- Device Media Control Language (DMCL) - vă permite să controlați media ( memorii de masă ) în care sunt stocate datele.
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
orSOME
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
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
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
O formă de selectare compusă din mai multe tabele cu unul sau mai multe câmpuri comune este obținută prin clauza Join .
Subinterogare
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
- Algebra relațională
- Calcul relațional
- Data Definition Language
- Data Manipulation Language
- Query language
- Data Control Language
- SQL injection
- SQLJ
- 4GL
- PL/SQL
- Transact-SQL
- NoSQL
Altri progetti
- Wikibooks contiene testi o manuali su SQL
- Wikizionario contiene il lemma di dizionario « SQL »
- Wikimedia Commons contiene immagini o altri file su SQL
Collegamenti esterni
- ( EN ) Structured Query Language , su Enciclopedia Britannica , Encyclopædia Britannica, Inc.
- SQL . Guida gratuita in italiano realizzata dal Dipartimento del Tesoro (in pdf).
- Tutorial de SQL , su 1keydata.com .
- Istruzioni SQL di base , su kb.askmonty.org .
- ( EN ) SQL::2003 BNF , su savage.net.au .
- ( EN ) SQL99 BNF , su savage.net.au .
- ( EN ) SQL93 Specification ( TXT ), su contrib.andrew.cmu.edu .
- ( EN ) SQL93 BNF ( TXT ), su contrib.andrew.cmu.edu .
- ( EN ) SQL92 Specification , su savage.net.au .
- ( EN ) SQL92 BNF , su savage.net.au .
- ( EN ) PostgreSQL , su postgresql.org .
- ( EN ) Oracle SQL tutorials , su freeitsolutions.com .
- ( EN ) wiscorp.com .
- Manuale e tutorial SQL da Webmasterpoint.org , su webmasterpoint.org .
Controllo di autorità | LCCN ( EN ) sh86006628 · GND ( DE ) 4134010-3 · BNF ( FR ) cb12101816f (data) · BNE ( ES ) XX531785 (data) |
---|