Documente Academic
Documente Profesional
Documente Cultură
LIMBAJUL SQL
1. GENERALITI
1
Luminia SCRIPCARIU Limbajul SQL
2. REGULI SQL
Limbajul SQL folosete termenii de tabele, coloane i rnduri n locul celor de relaii,
atribute i nregistrri.
O instruciune SQL include cuvinte rezervate i cuvinte definite de utilizator pentru a
denumi tabelele, atributele, indexurile etc., nefiind sensibil la formatul literei (majuscul sau liter
mic). Totui SQL devine sensibil la formatul literelor (case sensitive) n cazul nregistrrilor din
BD, adic dou nregistrri CLIENT i Client sunt tratate distinct.
Regulile sau conveniile adoptate n mod universal pentru scrierea instruciunilor SQL
pot fi sintetizate astfel:
a. Fiecare clauz a unei instruciuni trebuie scris pe o linie nou, cu separare prin virgul.
b. Dac o clauz are mai multe pri, fiecare dintre acestea este scris pe o linie nou i
indentat pentru a indica relaia cu linia superioar.
c. Majusculele sunt utilizate pentru cuvintele rezervate (SELECT, INSERT, DELETE,
GRANT etc.).
d. Literele mici sunt folosite pentru termenii proprii utilizatorului (denumiri de tabele,
coloane, cmpuri etc.).
e. Bara vertical | semnific operaia logic SAU adic alegerea dintre dou sau mai
multe opiuni.
f. Acoladele indic un element necesar.
g. Parantezele ptrate indic un element opional.
h. Punctele de suspensie (...) specific o repetare opional a unui articol din BD, de zero
sau de mai multe ori.
i. n practic, se creeaz mai nti structura BD prin definirea tabelelor i stabilirea
formatului datelor, precum i definirea drepturilor de acces ale utilizatorilor, dup care se
trece la popularea BD.
j. Fiecare instruciune se ncheie prin caracterul punct i virgul.
k. Valorile, n general, sunt scrise ntre paranteze rotunde, separate prin virgule.
l. Valorile literale sunt ncadrate de apostroafe.
Parametrii unui tip de date se scriu ntre paranteze rotunde dup cuvntul care l definete.
Precizia se exprim ca numr de cifre din mantis (partea ntreag). Scala se exprim ca
numr de cifre din exponent (numr de zecimale). Numrul de cifre din cmpul principal este
separat prin virgul de numrul de zecimale prin care se exprim o valoare.
Se poate impune i condiia ca obligatoriu un cmp s fie completat, folosind termenul-cheie
NOT NULL. Este cazul cheii primare dintr-o relaie sau a unei chei alternative.
Cmpurile din instruciunea INTERVAL sunt de forma:
YEAR|MONTH|DAY|HOUR|MINUTE [precizie]
3
Luminia SCRIPCARIU Limbajul SQL
Exemplu:
Instruciunea SQL:
INTERVAL YEAR(1) TO MONTH
semnific un interval de la 0 ani i 0 luni (timpul prezent) la 9 ani i 11 luni. Numrul de ani poate
fi scris n acest caz cu o singur cifr.
Formatul de baz dat de ISO al instruciunii de creare a unui tabel n BD este urmtorul:
EXEMPLU:
CREATE TABLE agenti(
cod_agent DEC(3,0) NOT NULL UNIQUE,
nume VARCHAR(20) NOT NULL,
4
Luminia SCRIPCARIU Limbajul SQL
prenume VARCHAR(20) NOT NULL,
cnp DEC(13,0) NOT NULL,
filiala VARCHAR(10),
salariu DEC(5,2),
vechime SMALLINT DEFAULT 0
PRIMARY KEY (cod_agent));
Observaii:
1. Tipul datelor poate fi declarat separat sub forma unui domeniu de valori i utilizat
pentru mai multe variabile de acelai tip:
CREATE DOMAIN nume_domeniu AS tip_de_date
[DEFAULT opiune_prestabilit]
[CHECK (condiie)];
La crearea tabelului se specific n locul tipului datelor, numele domeniului scris cu
majuscule.
2. Instruciunea DROP elimin articole din BD i poate avea dou opiuni:
DROP ARTICOL nume_articol [RESTRICT|CASCADE]
Opiunea RESTRICT nu va permite tergerea articolului dac de acesta depind alte date
din BD. Se evit astfel pierderea de date.
Opiunea CASCADE este una extrem care determin tergerea acelui articol din BD
precum i a tuturor datelor care depindeau de acesta. Este util pentru actualizarea
structurii BD dup o perioad mai lung de timp sau atunci cnd se reproiecteaz aceasta.
5
Luminia SCRIPCARIU Limbajul SQL
3. Indexul este o structur care ofer acces accelerat la nregistrrile din BD pe baza
valorilor dintr-una sau mai multe coloane ale unui tabel, mbuntind astfel
performanele de interogare:
CREATE [UNIQUE] INDEX nume_index
ON nume_tabel (coloana [ASC|DESC] [, ])
Utilizarea indexurilor trebuie fcut cu oarecare rezerve ntruct solicit mai multe resurse
din partea serverului de BD.
4. Pentru modificarea structurii de coloane a unui tabel deja creat, se folosete
instruciunea:
ALTER TABLE nume_tabel
[ADD [COLUMN] nume_coloan tip_de_date [NOT NULL] [UNIQUE]
[DEFAULT opiune_prestabilit] [CHECK (condiie)]
[DROP [COLUMN] nume_coloan [RESTRICT | CASCADE]]
[ADD [CONSTRAINT [nume_constrngere]] definiie_constrngere]
[DROP CONSTRAINT nume_constrngere [RESTRICT | CASCADE]]
[ALTER [COLUMN] SET DEFAULT opiune_ prestabilit]
[ALTER [COLUMN] DROP DEFAULT]
Exemplu:
SELECT *
FROM agenti
WHERE filiala = centru;
Rezultatul acestei comenzi SQL va fi afiarea tuturor nregistrrilor din tabelul agenti
corespunztoare filialei centru.
7
Luminia SCRIPCARIU Limbajul SQL
Pentru a selecta date din mai multe tabele, n cadrul clauzelor WHERE i HAVING, se
folosesc operaiile cu mulimi: UNION, INTERSECT, EXCEPT.
Clauza WHERE poate fi urmat de unul din urmtoarele 5 predicate:
Compararea valorilor folosind operatorii de comparare (=, <, >, <=, >=, <> ISO, !=)
i/sau operatorii logici (AND, OR, NOT);
Testarea domeniului de valori al unei expresii (BETWEEN/NOT BETWEEN);
Testarea apartenenei la o mulime de valori (IN/ NOT IN);
Corespondena la un anumit model (LIKE/NOT LIKE);
Testarea condiiei de null (IS NULL/IS NOT NULL).
Testele LIKE/NOT LIKE folosesc simbolul procent (%) pentru reprezentarea unui ir de
zero sau mai multe caractere i caracterul liniu de subliniere pentru reprezentarea oricrui
caracter singular.
Exemplu: Clauza:
WHERE nume=A%
selecteaz toate nregistrrile al cror nume ncepe cu litera A.
Clauza ORDER BY poate ordona nregistrrile cresctor sau descresctor, alfabetic sau
numeric, pe baza uneia sau a mai mutor coloane. Prima coloan constituie cheia major de
sortare, iar urmtoarele sunt chei minore de sortare.
Exemple:
INSERT INTO agenti (nume, prenume, cnp, filiala)
VALUES (popescu, marius, 1900102111111, iasi);
8
Luminia SCRIPCARIU Limbajul SQL
UPDATE nume_tabel
SET coloana_1 = valoarea_1[, coloana_2 = valoarea_2 ]
[WHERE condiie];
Exemplu:
Pentru majorarea cu 5% a salariilor tuturor agenilor cu vechime de minimum 3 ani se scrie
comanda SQL:
UPDATE agenti
SET salariu = salariu*1,05
WHERE vechime >= 3;
6. VEDERI
Prin definiie, o vedere este o relaie virtual produs la cerere prin operaii relaionale,
folosind relaiile existente n baza de date.
O vedere este creat prin instruciunea CREATE VIEW:
CREATE VIEW nume_vedere [(nume_coloan [, ])]
9
Luminia SCRIPCARIU Limbajul SQL
AS SELECT [WITH [CASCADED|LOCAL] CHECK OPTION];
Pentru a crea vederea, utilizatorul trebuie s aib drepturi de interogare (SELECT) asupra
tuturor tabelelor implicate n subselecie i drepturi de utilizare (USAGE) asupra tuturor coloanelor
solicitate.
O vedere care restrnge accesul la nregistrrile selectate dintr-unul sau mai multe tabele
fr restricionarea coloanelor, se numete vedere orizontal.
O vedere vertical restrnge accesul la anumite atribute (coloane) dintr-unul sau mai multe
tabele. De exemplu, salariile sunt confideniale i nu pot fi vizualizate de ctre ageni ntr-o vedere
vertical. Acest lucru devine posibil ntr-o vedere orizontal care i permite fiecruia s citeasc
propria nregistrare din BD.
Instruciunea CREATE VIEW se combin cu instruciunea SELECT i cu clauzele acesteia.
Exemplu:
Managerul agentiei dorete s cunoasc proprietile gestionate de toi agenii, fr detalii
specifice legate de cnp, salariu etc. Presupunem c n BD exist un tabel ageni i un tabel
proprieti:
Agenti (cnp, nume, prenume, filiala, salariu, vechime);
Proprietati (nr_proprietate, zona, tip, suprafata, pret, adresa, cod_proprietar, cnp)
Vederea este creat prin comanda:
CREATE VIEW agenti_proprietati
AS SELECT nr_proprietate, nume_agent, prenume_agent, filiala
FROM agenti nume, agenti prenume, agenti filiala, proprietati nr_proprietate
WHERE agenti.cnp = proprietati.cnp
GROUP BY agenti.filiala;
O vedere este reactualizabil dac SGBD este capabil s urmreasc orice rnd sau coloan
pn la relaia-surs.
Vederile pot fi folosite pentru a crea noi vederi.
O vedere care face apel la mai multe tabele se numete vedere unificat.
O vedere care utilizeaz clauza GROUP BY se mai numete i vedere grupat.
Distrugerea unei vederi se face prin instruciunea:
DROP VIEW nume_vedere [RESTRICT | CASCADE]
Opiunea CASCADE determin tergerea tuturor vederilor bazate pe vederea eliminat.
nregistrrile dintr-o vedere care n urma reactualizrii BD sau inserrii de noi date satisfac
sau nu mai satisfac clauza WHERE vor intra sau vor iei din acea vedere, fiind numite i rnduri
10
Luminia SCRIPCARIU Limbajul SQL
migratoare. Clauza WITH CHECK OPTION migrarea unui rnd n afara vederii, ceea ce asigur
o mai bun securitate a datelor incluse n vedere dect n tabelele BD.
7. TRANZACII
ISO definete un model de tranzacii bazat pe dou instruciuni SQL: COMMIT (executare)
i ROLLBACK (revenire).
Tranzacia este o unitate logic de lucru care conine una sau mai multe comenzi SQL.
Iniierea tranzaciei poate fi fcut de ctre o persoan sau un program printr-o comand de
iniiere de tip SELECT; INSERT; UPDATE.
Pn la completarea tranzaciei, efectele ei nu sunt vizibile.
ncheierea tranzaciei se poate realiza n unul din urmtoarele 4 moduri:
a. Prin instruciunea COMMIT, modificrile din BD sunt permanente.
b. Prin instruciunea ROLLBACK, se abandoneaz modificrile iniiate i BD rmne
nemodificat.
c. Finalizarea cu succes a programului ncheie tranzacia i modificrile au efect chiar dac
nu s-a executat instruciunea COMMIT.
d. Abandonarea tranzaciei fr rularea instruciunii ROLLBACK atunci cnd se termin
anormal programul respectiv.
8. CONTROLUL ACCESULUI
Limbajul SQL folosete dou instruciuni pentru controlul accesului la BD: GRANT i
REVOKE.
Mecanismul de securitate al BD se bazeaz pe conceptele de:
a. identificator de autorizaie
b. posesiune
11
Luminia SCRIPCARIU Limbajul SQL
c. privilegiu.
Fiecrui utilizator la BD i se aloc un identificator de autorizaie, asociat cu o parol, utilizat
pentru a determina drepturile de acces ale acestuia la obiectele din BD.
Fiecare obiect din BD este proprietatea celui care l-a creat (drept de posesiune).
n clauza AUTHORIZATION din schema creia i aparine obiectul apare identificatorul
proprietarului.
Prin privilegii se neleg aciunile care i sunt permise unui utilizator al BD:
SELECT
INSERT [(nume_coloan [, ...])]
UPDATE [(nume_coloan [, ...])]
DELETE
REFERENCES [(nume_coloan [, ...])]
USAGE
Opiunea GRANT OPTION FOR permite retragerea separat a drepturilor acordate altor
utilizatori prin clauza WITH GRANT OPTION.
12