Sunteți pe pagina 1din 37

t

h
gri

yop

Interogarea bazelor de date


utiliznd limbajul SQL

Lect. Univ. Dr. Ctlin Tudor

t
h
gri

Vocabularul SQL:

Instruciuni permit execuia anumitor aciuni


(CREATE, ALTER, SELECT, UPDATE, DELETE, etc.)

yop

Clauze specific argumentele unei instruciuni


(FROM, WHERE, ORDER BY, etc.)

Funcii efectueaz prelucrri asupra datelor (care


devin argumente sau parametrii) n scopul afirii unor
rezultate specifice (SUM, ROUND, UCASE, LEFT, DATE,
IIF, etc.).
Operatori acioneaz asupra datelor (care devin
operanzi), permind definirea unor expresii, calcule,
etc. (aritmetici, de comparare, logici, de concatenare,
etc.).

t
h
gri

instruciuni de definire a datelor (permit descrierea

structurii bazei de date):


CREATE, ALTER, DROP
instruciuni de selecie a datelor (permit consultarea
bazei de date):
SELECT
instruciuni de manipulare a datelor (permit
adugarea, modificarea i tergerea nregistrrilor):
INSERT, UPDATE, DELETE
instruciuni privind controlul accesului la date
(permit acordarea sau revocarea drepturilor de
acces pe utilizatori):
GRANT, REVOKE

yop

t
h
gri

Formatul general al frazei SQL de selecie:

SELECT [ALL / DISTINCT / DISTINCTROW / TOP N] <list_selecie>


FROM <list tabele>
[WHERE <criteriu de filtrare>]
[GROUP BY <list cmpuri de grupare>]
[HAVING <criteriu de grupare>]
[ORDER BY <list cmpuri de ordonare> [ASC|DESC]];

yop

unde:
Lista de selecie precizeaz atributele sau expresiile ale cror valori

vor fi returnate;

list-tabele specific tabelele din care se vor extrage datele nlnuite


prin condiii de compunere;

WHERE permite exprimarea criteriului de selecie naintea efecturii


oricrei grupri n vederea sintetizrii informaiei;

GROUP BY folosit pentru a partiiona o tabel n grupuri dup cmpul


specificat;

HAVING specific criterii de selecie pentru date agregate;

ORDER BY precizeaz atributul/atributele dup care se va face


ordonarea.

t
h
gri

Precizarea domeniului de selecie


Predicatele ALL, DISTINCT i TOP:

ALL permite selectarea tuturor nregistrrilor, afind


valorile cmpurilor specificate din tabelul selectat;

yop

DISTINCT permite excluderea valorilor dublur pentru


fiecare cmp selectat (doar nregistrri unice la nivelul
atributelor vizibile);

TOP n permite afiarea primelor n nregistrri din


lista rezultatului interogrii, ordonat dup valorile unor
cmpuri.

t
h
gri

Instruciuni de selecie - Exemple

Exemple de utilizare a predicatelor din clauza SELECT:


Marca angajat

Nume

Prenume

Salariu

M120

Ionescu

Paul

1230

M432

Popescu

Ion

M431

Ionescu

Marcel

yop

1760

3300

1. S se afieze toi angajaii cu numele Ionescu:


SELECT ALL * FROM Angajati WHERE Nume=Ionescu
sau
SELECT * FROM Angajati WHERE Nume=Ionescu
Rezultat:

Marca angajat

Nume

M120

Ionescu

M431

Ionescu

Prenume

Salariu

Paul

1230

Marcel

3300

t
h
gri

Instruciuni de selecie rezultate unice


Marca angajat

Nume

Prenume

Salariu

M120

Ionescu

Paul

1230

M432

Popescu

Ion

M431

Ionescu

Marcel

yop

1760

3300

S se afieze, n mod unic, doar numele angajailor:


Utilizare DISTINCT:
SELECT DISTINCT Nume FROM Angajai

Nume

Ionescu

Popescu

Valori unice ale cmpului

t
h
gri

Instruciuni de selecie
Utilitatea predicatului TOP n/procent:
Marca angajat

Nume

Prenume

M120

Ionescu

Paul

M432

Popescu

Ion

M431

Ionescu

Marcel

yop

Salariu

1230

1760

3300

Afiai numele i prenumele primilor 2 angajai cu salariile cele


mai mari:

SELECT TOP 2 Nume, Prenume


FROM Angajati
ORDER BY Salariu DESC
Nume
Ionescu
Popescu

Penume
Marcel
Ion

t
h
gri

Asocierea tabelelor n limbajul SQL (I) condiii de


compunere

yop

S se afieze toate denumirile de produse facturate dup data de 12.05.2008.

Soluia 1: Compunerea condiionat prin clauza WHERE:

SELECT DenumireProdus
FROM Produs, ProduseFacturate, Facturi
WHERE Facturi.IDFactura=ProduseFacturate.IDFactura
and ProduseFacturate.CodProdus=Produs.CodProdus
and DataFactura>#12.05.2008#

Enumerare
tabele

Condiii de compunere

t
h
gri

Asocierea tabelelor n limbajul SQL (II) - Compunerea intern

yop

S se afieze toate denumirile de produse facturate dup data de 12.05.2008.


Asociere tabele
Soluia 2: Combinarea tabelelor n clauza FROM:
Select DenumireProdus
FROM (Facturi INNER JOIN ProduseFacturate
Compunere intern
ON Facturi.IdFactura=ProduseFacturate.IdFactura)
INNER JOIN Produs ON Produs.CodProdus=ProduseFacturate.CodProdus
WHERE DataFactura>#12.05.2008#

t
h
gri

Asocierea tabelelor n limbajul SQL (III) - Compunerea extern

yop

S se afieze toate denumirile denumirile furnizorilor care nu au emis nici o factur.

Soluia 2: Combinarea tabelelor n clauza FROM:


Select DenumireFz
FROM (Furnizori LEFT JOIN Facturi
ON Furnizori.CodFiscal=Facturi.CodFiscal)
Where Facturi.IdFactura is NULL

Asociere tabele

Condiie de jonciune

Eliminare nregistrri cu valori nule

t
h
gri

Cmpuri calculate n limbajul SQL


Marca angajat

Nume

Prenume

M120

Ionescu

Paul

M432

Popescu

Ion

M431

Ionescu

Marcel

yop

Salariu

1230

1760

3300

S se afieze ct reprezint prima de 10% din salariu pentru


fiecare salariat

SELECT Nume, (Salariu * 10/100) AS Prima FROM Angajati


Nume

Prima

Ionescu

123

Popescu

176

Ionescu

330

t
h
gri

Grupri de date i funcii de grup

1. Funcii de agregare aplicate tuturor nregistrrilor, fr a fi


necesar gruparea:

yop

S se afieze cte facturi au fost emise n luna februarie, anul 2008.

SELECT Count(*) AS [Numar de facturi]


FROM Facturi
WHERE Month([DataFactura])=2 AND Year([DataFactura])=2008

2. Funcii de agregare aplicate pe grupuri de nregistrri:

S se afieze pentru fiecare denumire de furnizor cte facturi au fost emise de


acesta.

SELECT DenumireFz, Count(*) AS [Numar de facturi]


FROM Facturi INNER JOIN Furnizori
ON Furnizori.CodFiscal=Facturi.CodFiscal
GROUP BY DenumireFz

t
h
gri

Grupri de date i funcii de grup

3. Funcii de agregare aplicate grupurilor, cu criterii de filtrare:

S se afieze cte facturi au fost emise n luna februarie, anul 2008,


de fiecare furnizor.

yop

SELECT Count(*) AS [Numar de facturi]


FROM Facturi INNER JOIN Furnizori
ON Furnizori.CodFiscal=Facturi.CodFiscal
WHERE Month([DataFactura])=2 AND Year([DataFactura])=2008
GROUP BY DenumireFz
4. Funcii de agregare aplicate pe grupurilor, cu filtrare pe expresii:

S se afieze care sunt furnizorii care au emis mai mult de 3 facturi n luna
februarie a anului 2008.

SELECT DenumireFz
FROM Facturi INNER JOIN Furnizori
ON Furnizori.CodFiscal=Facturi.CodFiscal
WHERE Month([DataFactura])=2 AND Year([DataFactura])=2008
GROUP BY DenumireFz
HAVING Count(*)>3

t
h
gri

Utilizarea sub-interogrilor n limbajul SQL

Sub-interogare=structur SQL al crei rezultat ajut n


rezolvarea unei alte interogri (interogri imbricate)
Predicate utilizate pentru sub-interogri:

yop

ANY compar partea stng a sa cu oricare dintre rezultatele


unei sub-interogri situate n partea dreapt
ALL Compar partea stng a sa cu toate rezultatele subinterogrii
EXISTS se comport ca un operator dup clauza WHERE care
evalueaz dac sub-interogarea returneaz cel puin o
nregistrare
IN poate fi utilizat cnd se compar rezultatele a dou
mulimi, dintre care cea din dreapta este returnat de subinterogare

t
h
gri

Exemple de interogri cu sub-interogri


1. Lista furnizorilor care nu au emis facturi n anul 2007

yop

SELECT DenumireFurnizor FROM Furnizori


WHERE Furnizori.CodFiscal NOT IN
(Select Facturi.CodFiscal FROM Facturi
WHERE Year(DataFactura)=2007)

2. Lista produselor cu categoria de calitate I care au preul mai mic


dect oricare dintre preurile produselor de calitate II:
SELECT DenumireProdus FROM Produse
WHERE CategorieCalitate=1 AND Pret >
ANY (Select [Pret] From Produse
Where CategorieCalitate=2)

t
h
gri

Exemple de interogri cu sub-interogri


3. Furnizorul care a emis cele mai multe facturi.

yop

SELECT DenumireFurnizor
FROM Furnizori, Facturi
WHERE Furnizori.CodFiscal = Facturi.CodFiscal
Group By DenumireFurnizor
Having Count(NrFactur)>=
ALL (Select Count(NrFactur)
FROM Furnizori, Facturi
WHERE Furnizori.CodFiscal = Facturi.CodFiscal
Group By DenumireFurnizor)

t
h
gri

Exemple de interogri cu sub-interogri


4. Furnizorii care au emis cel puin o factur dup data de 20
septembrie 2008.

yop

SELECT Furnizori.DenumireFZ FROM Furnizori


WHERE EXISTS
(Select DataFactura FROM Facturi WHERE DataFactura>#09/20/2008#
AND Facturi.CodFiscal=Furnizori.CodFiscal)

SELECT Furnizori.DenumireFz
FROM Furnizori
WHERE Furnizori.CodFiscal IN
(Select Facturi.CodFiscal FROM Facturi
WHERE DataFactura>#09/20/2008#)

t
h
gri

Algebra relaional

Reprezint un set de operaii cu relaii (tabele) ale unei


baze de date fcnd apel la operatori relaionali utilizai
pentru a compune, modifica i combina tupluri din cadrul
acestora.

yop

Rezultatul utilizrii operatorilor relaionali pe un set de


relaii este tot o relaie.
Operatorii algebrei relaionale:

operatori unari
proiecia
selecia
operatori binari
reuniunea
Operatori de asamblare
intersecia
diferena
produsul cartezian
operatori de extensie
compunerea
diviziunea

t
h
gri

Operatorii unari ai algebrei relaionale


Selecia

Permite decuparea pe orizontal a unei relaii

yop

Produce un tabel coninnd un subset de


nregistrri din cadrul relaiei surs, care satisfac o
anumit condiie.

Schema de cmpuri a relaiei rezultat este identic


cu cea a relaiei de intrare.
Numrul de tupluri sau cardinalitatea relaiei
rezultat este mai mic dect cel al relaiei de intrare.
Notaie: condiie(Relaie)

t
h
gri

Operatorii unari ai algebrei relaionale

Exemplu de utilizare a operatorului de selecie


Cod salariat

Nume

Prenume

M100

Jinga

Paul

M200

Nicsulescu

Ion

M300

Popescu

George

M400

Lovinescu

Remus

yop

Salariu
2000

1800

2700

2800

Afiarea tuturor salariailor cu salariul peste 2500


Notaie: Salariu>2500(Salariati)
Cod salariat

Nume

Prenume

Salariu

M300

Popescu

George

2700

M400

Lovinescu

Remus

2800

Implementarea n SQL:

SELECT * FROM Salariati WHERE Salariu>2500

t
h
gri

Operatorii unari ai algebrei relaionale


Proiecia

Permite decuparea pe vertical a unei relaii (R).

yop

Produce o relaie (R1) care afieaz nregistrrile


doar pentru anumite cmpuri prezente n lista de
proiecie.

Gradul relaiei rezultat (R1) este mai mic dect


gradul relaiei de intrare (R).
Numrul de tupluri al relaiei rezultat poate diferi de
cel al relaiei de intrare, dac are loc eliminarea
duplicatelor .
Notaie: A1,,An (Relaie), {A1, A2, , An}=Atribute

t
h
gri

Operatorii unari ai algebrei relaionale

Exemplu de utilizare a operatorului de proiecie


Cod salariat

Nume

Prenume

M100

Jinga

Paul

M200

Nicsulescu

Ion

M300

Popescu

George

M400

Lovinescu

Remus

yop

Salariu
2000

1800

2700

2800

Afiarea numelor i prenumelor salariailor


Notaie: Nume, Prenume (Salariati) Nume

Implementarea n SQL:

Prenume

Jinga

Paul

Nicsulescu

Ion

Popescu

George

Lovinescu

Remus

SELECT Nume, Prenume FROM Salariati

t
h
gri

Operatorii binari ai algebrei relaionale


Produsul cartezian

Pentru dou relaii R(cu gradul g1 i cardinalitatea c1)


i S (cu gradul g2 i cardinalitatea c2), produsul
cartezian are ca rezultat o relaie T (cu gradul g1+g2 i
cardinalitatea c1xc2) , n care fiecare tuplu al relaiei R
este concatenat cu fiecare tuplu al relaiei S.
A

X1

Y1

Z1

X2

Y2

Z2

X3

Y3

C
D

T1
T2

Relaia S

Relaia R

Implementare n SQL:

SELECT * FROM R,S

yop
A

X1

Y1

Z1

T1

X1

Y1

Z2

T2

X2

Y2

Z1

T1

X2

Y2

Z2

T2

X3

Y3

Z1

T1

X3

Y3

Z2

T2

Relaia T=RxS

t
h
gri

Operatorii binari ai algebrei relaionale


Operatorii de asamblare:

Reuniunea, intersecia i diferena

yop

sunt operaii care acioneaz asupra a dou relaii


de intrare, compatibile din punctul de vedere al
unificrii (s prezinte cel puin un cmp corespondent
care s aib acelai tip pentru ambele relaii)

Rezultatul este o singur relaie care nu trebuie s


conin duplicate, privind n ansamblul cmpurilor.

t
h
gri

Operatorii binari ai algebrei relaionale


Reuniunea

Construiete o relaie rezultat constnd din toate tuplurile care apar n


ambele relaii surs, sau doar n una dintre acestea, fr a afia rezultate
duplicat.
Numrul de cmpuri, numele i tipul lor trebuie s fie identice pentru
ambele relaii.
Parteneri
Furnizori

Cod fiscal

Denumire

R101102

SC X SA

R102103

SC Y SA

R104105

SC Z SA

yop

Clienti

Implementarea n SQL:

Cod fiscal
R101102
R105106
R107108

Denumire
SC X SA

SC A SA
SC B SA

SELECT CodFiscal, Denumire FROM Furnizori


UNION
SELECT CodFiscal, Denumire FROM Clienti

Cod fiscal

Denumire

R101102

SC X SA

R102103

SC Y SA

R104105

SC Z SA

R105106

SC A SA

R107108

SC B SA

t
h
gri

Operatorii binari ai algebrei relaionale


Intersecia

Construiete o relaie rezultat constnd din toate tuplurile care apar n


ambele relaii surs.

yop

Operaia de intersecie poate fi stabilit i pentru un singur cmp


comun al relaiilor de intrare.
Furnizori

Cod fiscal

Denumire

R101102

SC X SA

R102103

SC Y SA

R104105

SC Z SA

Clienti

C
Cod fiscal

Implementarea n SQL:

R101102
R105106
R107108

Denumire
SC X SA

SC A SA
SC B SA

SELECT CodFiscal, Denumire FROM Furnizori


Where Furnizori.CodFiscal IN
(SELECT CodFiscal FROM Clienti)

Parteneri cu dublu rol

Cod fiscal

Denumire

R101102

SC X SA

t
h
gri

Operatorii binari ai algebrei relaionale


Diferena

Construiete o relaie rezultat constnd din toate tuplurile care apar


ntr-una din relaiile surs, dar nu i n cealalt.

yop

Operatorul de diferen poate aciona i pentru un singur cmp


comun al relaiilor de intrare.
Furnizori

Cod fiscal

Denumire

R101102

SC X SA

R102103

SC Y SA

R104105

SC Z SA

Clienti

C
Cod fiscal

Implementarea n SQL:

R101102
R105106
R107108

Denumire
SC X SA

SC A SA
SC B SA

SELECT CodFiscal, Denumire FROM Furnizori


Where Furnizori.CodFiscal NOT IN
(SELECT CodFiscal FROM Clienti)

Parteneri doar furnizori


Cod fiscal
Denumire

R102103

SC Y SA

R104105

SC Z SA

t
h
gri

Operatorii de extensie ai algebrei relaionale


Compunerea (JOIN)

Construiete o relaie rezultat constnd din toate combinaiile posibile


de perechi de nregistrri concatenate din dou tabele (sau proiecii ale
acestora) realizate n urma unei condiii.

yop

Compunerea presupune existena unei condiii de compunere (=, >, <,


<=,>=,<>) care poate fi impus cmpurilor din cele dou relaii.
1. Echicompunere: condiia conine una sau mai multe egaliti;
2. Compunere natural: exist cel puin un cmp comun;
3. Compunere extern: afieaz i tupluri fr corespondent.

Const n efectuarea unui produs cartezian urmat de operaiunea de


selecie.
Ex: R1 JOIN R2 = A1=A2(R1 R2), unde A1 este cmp identic cu A2,
dar A1 i A2 nu fac parte din aceeai relaie.

t
h
gri

Operatorii de extensie ai algebrei relaionale


Exemplu de utilizare a compunerii (INNER JOIN)

yop

CodFiscal

Denumire

NrFactura

DataFactura

CodFiscal

R101102

SC X SA

132112

12.05.2008

R101102

R102103

SC Y SA

144231

13.06.2008

R102103

R104105

SC Z SA

132112

14.08.2008

R102103

NrFactura

DataFactura Facturi.CodFiscal

Furnizori.CodFiscal

Denumire

132112

12.05.2008

R101102

R101102

SC X SA

144231

13.06.2008

R102103

132112

14.08.2008

R102103

R102103

R102103

SC Y SA

SC Y SA

Implementarea n SQL:
SELECT CodFiscal, Denumire FROM Furnizori, Facturi WHERE
Furnizori.CodFiscal=Facturi.CodFiscal
sau
SELECT CodFiscal, Denumire FROM Furnizori INNER JOIN Facturi
ON Furnizori.CodFiscal=Facturi.CodFiscal

t
h
gri

Operatorii de extensie ai algebrei relaionale


Exemplu de utilizare a compunerii (OUTER JOIN)

yop

CodFiscal

Denumire

NrFactura

DataFactura

CodFiscal

R101102

SC X SA

132112

12.05.2008

R101102

R102103

SC Y SA

144231

13.06.2008

R102103

R104105

SC Z SA

132112

14.08.2008

R102103

NrFactura

DataFactura Facturi.CodFiscal

Furnizori.CodFiscal

Denumire

132112

12.05.2008

R101102

R101102

SC X SA

144231

13.06.2008

R102103

132112

14.08.2008

R102103

Implementarea n SQL:

R102103

SC Y SA

R102103

SC Y SA

R104105

SC Z SA

SELECT CodFiscal, Denumire FROM Furnizori LEFT JOIN Facturi


ON Furnizori.CodFiscal=Facturi.CodFiscal

t
h
gri

Operatorii de extensie ai algebrei relaionale


Diviziunea

Presupune mprirea unei relaii R3 de grad m+n, la o


relaie R1 de grad n, ctul mpririi fiind o relaie R2 de grad
m.
A

R3
B

X1

Y1

X1

Y2

X1

Y3

X1

Y4

X2

Y1

X2

Y2

X3

Y2

X4

Y2

X4

Y4

1R2

2R2

Y2
R3/1R2
1R1
A
X1
X2
X3
X4

yop

C
Y2
Y4

R3/2R2
2R1

3R2
B

Y1
Y2
Y4

R3/1R2
3R1

X1

X4

X1

t
h
gri

Interogri SQL pentru adugarea de noi nregistrri


Varianta 1: Adugarea pe baza unor valori noi

INSERT INTO nume-tabela (nume-atribut1, nume-atribut2,)


VALUES (valoare1, valoare2,)

yop

Exemplu: S se adauge un nou client n baza de date cu codul fiscal R101221 i


denumirea SC GAMA SA
INSERT INTO Clienti (CodFiscal, Denumire) VALUES (R101221, SC GAMA SA)

Varianta 2: Adugarea pe baza valorilor preluate dintr-un tabel

INSERT INTO nume-tabela SELECT nume-atribut1, nume-atribut2,


FROM nume-tabela-sursa [WHERE Conditii ]
Exemplu: S se adauge n tabela Parteneri toi Furnizorii din localitatea
Bucureti
INSERT INTO Parteneri SELECT * FROM Furnizori WHERE Localitate=Bucureti

t
h
gri

Interogri SQL pentru modificarea valorilor cmpurilor


UPDATE nume-tabel
SET nume-atribut1=valoare1, nume-atribut2=valoare2,
WHERE Condiii

yop

Exemplul 1: S se transforme n KG toate unitile de msur ale produselor


cu codul mai mare dect 3.

UPDATE Produse SET UnitateMasura=KG WHERE CodProdus:3

Exemplul 2: S se majoreze cu 5% toate preurile din facturile emise dup


data de 12.09.2008.
UPDATE ProduseFacturate
SET PretFacturat=[PretFacturat]+[PretFacturat]*5/100
WHERE IDFactura IN
(Select IDFactura FROM Facturi WHERE DataFactura>#12.09.2008#)

t
h
gri

Interogri SQL pentru tergerea nregistrrilor


DELETE *
FROM nume-tabel
WHERE Condiie

yop

Exemplu: S se tearg toi clienii din localitatea Brila


DELETE *
FROM Clienti
WHERE Localitate=Braila

t
h
gri

Interogri SQL pentru crearea de tabele rezultat


SELECT nume-atribut1, nume-atribut2,
INTO nume-tabel-rezultat
FROM list-tabele-surs
[WHERE Condiii ]

yop

Exemplu: S se creeze un nou tabel denumit ProduseFacturateOctombrie care


s afieze denumirile de produse facturate n luna curent

SELECT DenumireProdus
INTO ProduseFacturateOctombrie
FROM Produse, ProduseFacturate, Facturi
WHERE Produse.CodProdus=ProduseFacturate.CodProdus AND
ProduseFacturate.IDFactura=Facturi.IDFactura AND
Month(DataFactura)=Month(Date())

t
h
gri

Exemple de rezolvat

1. S se afieze lista produselor facturate de furnizorul SC BETA


SA n anul 2008.
2. S se precizeze denumirile tuturor produselor care au fost
achiziionate n anul 2011 ntr-o valoare total mai mare de
500 lei.
3. S se afieze toate denumirile produselor care nu provin din
achiziii de la furnizori.
4. Ce produse au fost cel mai des achiziionate n luna martie a
anului curent?
5. Care sunt furnizorii care n anul 2012 au emis facturi cu
valoarea total mai mare dect cea a tuturor facturilor emise
n trimestrul 4 al anului 2011.

yop

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