SGBDR acționează asupra datelor cu operații de algebră relațională, cum ar fi proiecții, selecții, îmbinări, operații de setare (unire, excepție și intersectare) și multe altele. Operațiile algebrei relaționale sunt notate într-un limbaj matematic extrem de formal și greu de înțeles pentru utilizatorii finali, și posibil și pentru mulți ingineri de software. Prin urmare, SGBDR oferă un nivel deasupra algebrei relaționale care este ușor de înțeles, dar poate fi mapat la operațiile relaționale care stau la bază. Începând cu anii 1970, au apărut unele limbaje care fac această treabă; una dintre ele a fost SQL – un alt exemplu a fost QUEL. La începutul anilor 1980 (după o redenumire de la numele său original SEQUEL din cauza problemelor mărcii comerciale), SQL a obținut dominanța pe piață. Și în 1986 SQL a fost standardizat pentru prima dată.
Caracteristici
Token-urile și sintaxa SQL sunt modelate după vorbirea engleză obișnuită pentru a menține bariera de acces cât mai mică posibil. O comandă SQL precum UPDATE
nu este departe de propoziția „Schimbați salariul angajatului în 2000 pentru angajatul cu id-ul 511”.
employee SET salary = 2000 WHERE id = 511;
Cuvintele cheie din SQL pot fi exprimate în orice combinație de caractere majuscule și minuscule, adică cuvintele cheie nu sunt sensibile la majuscule. Nu există nicio diferență între UPDATE, update, Update, UpDate,
sau orice altă combinație de caractere majuscule și minuscule scrisă în cod SQL.
Apoi, SQL este un limbaj descriptiv, nu unul procedural. Nu interzice toate aspectele operațiunilor relaționale (care operație, ordinea lor, …), care sunt generate din instrucțiunea SQL dată. SGBDR are libertatea de a genera mai multe planuri de execuție dintr-o declarație. Poate compara mai multe planuri de execuție generate între ele și poate executa cel pe care îl consideră cel mai bun într-o situație dată. În plus, programatorul este eliberat de luarea în considerare a tuturor detaliilor accesului la date, de exemplu: Care dintre un set de criterii WHERE ar trebui să fie evaluate mai întâi dacă sunt combinate cu AND?
În ciuda simplificărilor de mai sus, SQL este foarte puternic. Permite manipularea unei înregistrări de set de date cu o singură declarație.
va afecta toate înregistrările angajaților cu un salariu real mai mic de 2000. Potențial, pot exista mii de înregistrări, doar câteva sau chiar zero. Operația poate depinde și de datele deja prezente în baza de date; declarația
UPDATE employee SET salary = salary * 1.1 WHERE salary < 2000;SET salary = salary * 1.1
duce la o creștere a salariilor cu 10%, care poate fi de 120 pentru un angajat și 500 pentru altul.
Proiectantul SQL a încercat să definească elementele de limbaj ortogonale între ele. Printre altele, acest lucru se referă la faptul că orice element de limbaj poate fi folosit în toate pozițiile unor enunțuri în care rezultatul acelui element poate fi utilizat direct. De exemplu: Dacă aveți o funcție power(), care ia două numere și returnează un alt număr, puteți utiliza această funcție în toate pozițiile în care numerele sunt permise. Următoarele afirmații sunt corecte din punct de vedere sintactic (dacă ați definit puterea funcției ()) – și conduc la aceleași rânduri rezultate.
SELECT salary FROM employee WHERE salary < 2048;
SELECT salary FROM employee WHERE salary < power(2, 11);
SELECT power(salary, 1) FROM employee WHERE salary < 2048;
Un alt exemplu de ortogonalitate este utilizarea subinterogărilor din UPDATE, INSERT, DELETE sau în altă instrucțiune SELECT.
Cu toate acestea, SQL nu este fără redundanțe. Adesea există mai multe formulări posibile pentru a exprima aceeași situație.
SELECT salary FROM employee WHERE salary < 2048;
SELECT salary FROM employee WHERE NOT salary >= 2048;
SELECT salary FROM employee WHERE salary between 0 AND 2048; -- 'BETWEEN' includes edges
Acesta este un exemplu foarte simplu. În enunțuri complexe, poate exista alegerea între îmbinări, subinterogări și predicatul existent.
Fundamente
Core SQL constă din instrucțiuni. Enunțurile constau din cuvinte cheie, operatori, valori, nume de obiecte sau funcții ale sistemului și utilizatorului. Declarațiile sunt încheiate printr-un punct și virgulă. În declarația SELECT salary FROM employee WHERE id <
token-urile SELECT, FROM și WHERE sunt cuvinte cheie. salary, employee și id sunt nume de obiecte, semnul „<” este un operator, iar „100” este o valoare.
100;
Standardul SQL organizează instrucțiunile în nouă grupuri:
„Principalele clase de instrucțiuni SQL sunt:
- Instrucțiuni de schemă SQL; acestea pot avea un efect persistent asupra setului de scheme.
- Instrucțiuni de date SQL; unele dintre acestea, declarațiile de modificare a datelor SQL, pot avea un efect persistent asupra datelor SQL.
- Instrucțiuni de tranzacție SQL; cu excepția <commit statement>, acestea și următoarele clase nu au efecte care persistă atunci când o sesiune SQL este terminată.
- Instrucțiuni de control SQL.
- Instrucțiuni de conexiune SQL.
- Instrucțiuni de sesiune SQL.
- Instrucțiuni de diagnosticare SQL.
- Instrucțiuni dinamice SQL.
- Declarație de excepție încorporată SQL.”
Această grupare detaliată este neobișnuită în vorbirea de zi cu zi. O alternativă tipică este organizarea instrucțiunilor SQL în următoarele grupuri:
- Limbajul de definire a datelor (Data Definition Language (DDL)): Gestionarea structurii obiectelor bazei de date (tabele CREATE / ALTER / DROP, vizualizări, coloane, …).
- Limbaj de interogare a datelor (Data Query Language (DQL)): recuperarea datelor cu declarația SELECT. Acest grup are o singură declarație.
- Limbajul de manipulare a datelor (Data Manipulation Language (DML)): Schimbarea datelor cu declarațiile INSERT, UPDATE, MERGE, DELETE, COMMIT, ROLLBACK și SAVEPOINT.
- Limbajul de control al datelor (Data Control Language (DCL)): gestionarea drepturilor de acces (GRANT, REVOKE).
Completitudine Turing
Core SQL, așa cum este descris mai sus, nu este complet Turing. Îi lipsesc ramurile condiționate, variabilele, subrutinele. Dar standardul, precum și majoritatea implementărilor, oferă o extensie pentru a satisface cererea de completitudine Turing. În „Partea 4: Module stocate persistente (SQL / PSM)” din standard, există definiții pentru IF-, CASE-, LOOP-, assignation- și alte instrucțiuni. Implementările existente ale acestei părți au nume diferite, sintaxă diferită și, de asemenea, un domeniu de operare diferit: PL/SQL în Oracle, SQL/PL în DB2, Transact-SQL sau T-SQL în SQL Server și Sybase, PL/pgSQL în Postgres și pur și simplu „proceduri stocate” în MySQL.
Lasă un răspuns