Sunteți pe pagina 1din 12

Luminia SCRIPCARIU Limbajul SQL

LIMBAJUL SQL

1. GENERALITI

Limbajul structurat de interogare SQL (Structured Query Language) este limbajul


standard pentru bazele de date (BD) relaionale definit de ANSI n 1986 i adoptat ulterior ca
standard internaional de ctre ISO (1992). Peste o sut de sisteme de gestiune a bazelor de date
(SGBD) accept recunosc limbajul SQL.
Ca orice limbaj de baze de date, SQL permite:
Crearea bazei de date relaionale i structurarea relaiilor prin componenta sa de
definire a datelor (DDL)
Efectuarea operaiilor elementare asupra BD (inserare, tergere, modificare a datelor)
i a interogrilor asupra BD, prin componenta de manipulare a datelor (DML)
Limbajul SQL conine comenzi de definire i regsire a datelor (CREATE TABLE,
SELECT TABLE, DELETE, INSERT etc.) dar nu conine instruciuni pentru controlul fluxului
datelor (IF ... THEN ... ELSE, GO TO, DO etc.).
SQL este un limbaj neprocedural cu format liber deoarece precizeaz ce rezultate sunt
necesare i nu procedura prin care se obin acestea.
Prima implementare comercial a unui SGBD relaional bazat pe SQL a fost realizat de
corporaia ORACLE. Ulterior au aprut sute de produse de BD bazate pe SQL i dialecte ale
acestuia.
SQL ca standard pentru BD a fost inclus ca i component n arhitecturile de aplicaii de BD
dezvoltate de marile firme productoare de soft, cum este IBM, i adopta pentru prelucrarea
informaiilor n sistemul federal al SUA.
Grupul de acces SQL lucreaz pentru realizarea interoperabilitii dintre limbajul SQL i alte
SGBD disparate.
mbuntirea SQL se face prin definirea de noi componente precum standardul de acces la
BD de la distan (RDA Remote Data Access) i sistemul de dicionare de resurse informaionale
(IRDS Information Resource Dictionarz System). Alte mbuntiri includ suportul pentru BD
distribuite n reea, programarea orientat-obiect i acceptarea extensiilor definite de ctre utilizator.

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.

n instruciunile SQL apar diveri identificatori care respect urmtoarele constrngeri:


a. Lucreaz cu setul de caractere prestabilit de ISO: litere mari (A Z), litere mici (a
z), cifre (0 9) i liniua de subliniere (_ underscore).
b. S nu depeasc lungimea maxim impus (tipic, 128 de caractere)
2
Luminia SCRIPCARIU Limbajul SQL
c. S nceap cu o liter i nu cu alt caracter (cifr, alt semn etc.)
d. S nu conin spaii libere.

3. TIPURI DE DATE SQL

ISO definete cinci tipuri de date scalare:


I. caracter
CHAR, VARCHAR [lungime]
II. bit
BIT, BIT VARYING [lungime]
III. numeric:
exact:
NUMERIC [precizie [, scala]]
DECIMAL sau DEC [precizie [, scala]]
INTEGER sau INT
SMALL INTEGER sau SMALLINT
aproximativ:
FLOAT [precizia]
REAL
DOUBLE PRECISSION
IV. data i ora
DATE
TIME [precizie_or] [WITH TIME ZONE]
TIMESTAMP [precizie_or] [WITH TIME ZONE]
V. interval
INTERVAL{{cmp_de_start TO cmp_final} cmp_data_ora }

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.

4. INSTRUCIUNI SQL DE DEFINIRE A BAZEI DE DATE

Instruiunile de creare, modificare i distrugere a structurilor din BD sunt urmtoarele:


CREATE DATABASE DROP DATABASE
CREATE TABLE ALTER TABLE DROP TABLE
CREATE DOMAIN ALTER DOMAIN DROP DOMAIN
CREATE SCHEMA DROP SHEMA
CREATE VIEW DROP VIEW
CREATE INDEX DROP INDEX

Formatul de baz dat de ISO al instruciunii de creare a unui tabel n BD este urmtorul:

CREATE TABLE nume_tabel


{(nume_coloan tip_de_date [NOT NULL] [UNIQUE]
[DEFAULT opiune_prestabilit] [CHECK (condiie)] [, ...]
[PRIMARY KEY (list_de_coloane),]
{[UNIQUE (list_de_coloane),] [,...]}
{[FOREIGN KEY (list_de_coloane_chei_strine)
REFERENCES nume_tabel_printe [(list_de_coloane_chei_candidat)],
[MATCH { PARTIAL | FULL}
[ON UPDATE aciune_referenial]
[ON DELETE aciune_referenial]}
{[CHECK (condiie)] [,]})}

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));

CREATE TABLE proprietati(


cod_proprietate DEC(5,0) NOT NULL UNIQUE,
zona VARCHAR(20) NOT NULL,
tip VARCHAR(10) NOT NULL,
pret INT,
cod_agent DEC(3,0),
cod_proprietar DEC(6,0) NOT NULL,
PRIMARY KEY (cod_proprietate),
FOREIGN KEY (cod_agent) REFERENCES agenti ON DELETE SET NULL ON
UPDATE CASCADE,
FOREIGN KEY (cod_proprietar) REFERENCES proprietari);

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]

5. INSTRUCIUNI SQL DE MANIPULARE A BAZEI DE DATE

Instruciunile de manipulare a datelor din BD sunt urmtoarele:


SELECT pentru interogarea BD;
INSERT pentru introducere de noi nregistrri n BD;
UPDATE pentru reactualizarea BD;
DELETE pentru tergerea de nregistrri din BD.
Fiecare dintre aceste instruciuni conine dup cuvntul-cheie de definiie diverse clauze cu
multiple opiuni. De aceea le vom studia pe fiecare n parte.

5.1 INSTRUCIUNEA SELECT

Instruciunea SELECT de interogare a BD are forma urmtoare:

SELECT [DISTINCT|ALL] {*|expresie_coloana [AS nume_nou]] [, ]}


FROM nume_tabel_sau_vedere [alias] [,]
6
Luminia SCRIPCARIU Limbajul SQL
[WHERE condiie]
[GROUP BY lista_de_coloane] [HAVING condiie]
[ORDER BY lista_de coloane];

Exemplu:
SELECT *
FROM agenti
WHERE filiala = centru;
Rezultatul acestei comenzi SQL va fi afiarea tuturor nregistrrilor din tabelul agenti
corespunztoare filialei centru.

Cuvntul-cheie DISTINCT elimin n cadrul interogrii eventualele dubluri din BD.


n expresiile incluse n comenzile SQL se folosesc operatori scalari i funcii specifice:
operatorii aritmetici: +,-,*,/
funcia de lungime: BIT_LENGTH, OCTET_LENGTH, CHAR_LENGTH
operatorul de transformare a tipului de date: CAST(tip1 AS tip2)
concatenarea de iruri: ||
identificarea utilizatorului curent: USER
identificarea sesiunii: SESSION_USER
identificarea sistemului: SYSTEM_USER
scrierea cu litere mici: LOWER
scrierea cu majuscule: UPPER
data sau timp curent: CURRENT_TIME,CURRENT_DATE, CURRENT_TIMESTAMP.
Limbajul SQL mai accept cinci funcii de grup care se aplic pe o coloan ntreag i
genereaz o singur valoare:
COUNT numrare
SUM sumare
AVG calculul valorii medii
MIN deducerea valorii minime
MAX deducerea valorii maxime.
Opiunea GROUP BY permite gruparea nregistrrilor cu aceleai valori pe coloanele
precizate n lista de coloane i aplicarea funciilor de grup pe aceste grupuri.
O instruciune SELECT integrat n alt interoare SELECT ntr-o clauz WHERE sau
HAVING se numete subinterogare.

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.

5.2 INSTRUCIUNEA INSERT

Instruciunea INSERT de introducere a uneia sau a mai multor nregistrri n BD folosete


urmtoarele dou formate:
I. INSERT INTO nume_tabel [(list_de_coloane)]
VALUES (list_de_valori);
II. INSERT INTO nume_tabel [(list_de_coloane)]
SELECT ;
Cel de al doilea format reprezint o instruciune combinat INSERT SELECT deci
poate folosi toate clauzele instruciunii SELECT pentru copierea mai multor nregistrri din tabele
ale BD printr-o singur comand SQL.

Exemple:
INSERT INTO agenti (nume, prenume, cnp, filiala)
VALUES (popescu, marius, 1900102111111, iasi);
8
Luminia SCRIPCARIU Limbajul SQL

INSERT INTO personal


VALUES (ionescu, max, 1900102111111, iasi, 0);

5.3 INSTRUCIUNEA UPDATE

Pentru actualizarea datelor din BD se folosete instruciunea UPDATE cu urmtorul format:

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;

5.4 INSTRUCIUNEA DELETE

Pentru tergerea unor nregistrri din BD se folosete instruciunea DELETE cu urmtorul


format:
DELETE FROM nume_tabel
[WHERE condiie];

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.

Formatul unei tranzacii este urmtorul:


SET TRANSACTION
[READ ONLY |READ WRITE] |
[ISOLATION LEVEL READ UNCOMMITTED | READ UNCOMMITTED |
REPEATABLE READ | SERIALIZABLE];

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

Formatul instruciunii GRANT este urmtorul:


GRANT {list_de_privilegii | ALL PRIVILEGES}
ON nume_obiect
TO {list_de_identificatori | PUBLIC}
[WITH GRANT OPTION]

Cuvntul cheie PUBLIC i desemneaz pe toi utilizatorii BD.


Clauza WITH GRANT OPTION permite transmiterea privilegiilor spre ali utilizatori.

Formatul instruciunii REVOKE este urmtorul:


REVOKE [GRANT OPTION FOR] {list_de_privilegii | ALL PRIVILEGES}
ON nume_obiect
FROM {list_de_identificatori | PUBLIC} [RESTRICT | CASCADE]

Opiunea GRANT OPTION FOR permite retragerea separat a drepturilor acordate altor
utilizatori prin clauza WITH GRANT OPTION.

12

S-ar putea să vă placă și