Sie sind auf Seite 1von 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

2.

Limbajul SQL

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

nume

VARCHAR(20)

NOT NULL,
4

UNIQUE,

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.

Luminia SCRIPCARIU
3.

Limbajul SQL

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:

concatenarea de iruri:

identificarea utilizatorului curent:

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.

CAST(tip1 AS tip2)

||
USER

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.

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
c.

Limbajul SQL

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

Das könnte Ihnen auch gefallen