Sunteți pe pagina 1din 30

BAZE DE DATE

Curs 6
Lect.dr. Elena Butu
Facultatea de Matematic i Informatic
Universitatea Ovidius, Constana

DATA MANIPULATION LANGUAGE


16.04.2014

DML

Formularea de interogri Instruciunea SELECT

Instruciuni de inserare
Instruciuni de modificare
Instruciuni de tergere
a nregistrrilor dintr-o baz de date relaional

DML - INSTRUCIUNEA SQL SELECT


16.04.2014

O interogare SQL tipic este de forma


SELECT A1, A2, ..., An
FROM r1, r2, ..., rm
WHERE P
Ai reprezint atribute
ri reprezint relaii
P este un predicat (ce reprezint o condiie).

Rezultatul unei interogri este o relaie.


3

CLAUZA SELECT
16.04.2014

Listeaz atributele dorite n rezultatul interogrii

Este implementarea direct a operatorului de proiecie


din algebra relaional

Exemplu: aflai numele, prenumele i CNP-ul


tuturor persoanelor
SELECT nume, prenume, CNP
FROM PERSOANE;

Observaii

SQL este case INsensitive

CLAUZA SELECT

16.04.2014

SQL admite duplicate n rezultatele interogrii.


Pentru a fora eliminarea duplicatelor, se folosete
predicatul DISTINCT n clauza SELECT.

Exemplu: Aflai numele tuturor persoanelor, cu


eliminarea duplicatelor
SELECT DISTINCT nume
FROM PERSOANE;

Cuvntul cheie ALL precizeaz c nu se dorete


eliminarea duplicatelor (este implicit)
SELECT ALL nume
FROM PERSOANE;

CLAUZA SELECT
16.04.2014

Un asterisc (*) n clauza SELECT nseamn listarea


tuturor atributelor
SELECT * FROM PERSOANE;

Clauza SELECT poate conine i expresii aritmetice


ce implic operatorii artimetici uzuali i au ca
operanzi constante sau atribute ale relaiilor din
clauza FROM

SELECT Nume, Now() DataNasterii as Varsta


FROM PERSOANE;

CLAUZA FROM
16.04.2014

Permite specificarea relaiilor implicate n interogare


Operaii cu relaii, precum reuniune, intersecie,
diferen (Union, Intersect, Except)
Listarea relaiilor specificate cu virgula (,) ntre ele
corespunde operaiei de produs cartezian din algebra
relaional
Pot aprea alte instruciuni SELECT ca i operanzi n
FROM

CLAUZA FROM
16.04.2014

De exemplu: interogarea urmtoare listeaz toate


perechile posibile de persoana-localitate

SELECT PERSOANE.Nume,
LOCALITATI.DenLocalitate
FROM PERSOANE, LOCALITATI

Ar avea, poate, mai mult sens sa avem perechi de tipul


persoana-localitate in care s-a nascut

REAMINTIM
16.04.2014

EXEMPLU
Instruciunea urmtoare listeaz toate perechile de
localitate-judet ce se pot forma cu tuplele existente
n baza de date

16.04.2014

SELECT *
FROM LOCALITATI, JUDETE;
Putei observa c aceast interogare nu are, ca
efect, ceva care s aiba sens.
Ar avea mai mult sens sa afim o list a
localitilor i a judeului din care aceste localiti
fac parte.

10

JOIN INNER JOIN


16.04.2014

Afiai mulimea localitilor i judeul din care


acestea fac parte.
SELECT *
FROM LOCALITATI INNER JOIN JUDETE ON
LOCALITATI.Judet = JUDETE.IdJudet
Aflai mulimea trilor, pentru fiecare tar listai i
capitala ei.
SELECT *
FROM TRI INNER JOIN LOCALITATI ON
TARI.Capitala = LOCALITATI.IdLocalitate
Observaie. Mai sus, avem exemple de NATURAL
JOIN de fapt

11

EXEMPLU
16.04.2014

Aflai informaii despre localitile din judeul Vaslui.


Se cer denumirea localitii i codul potal al
acesteia.

SELECT DenLocalitate, CodPostal


FROM LOCALITATI INNER JOIN JUDETE
on Judet=IdJudet
WHERE DenJudet LIKE Vaslui

12

OPERATORUL DE REDENUMIRE
16.04.2014

SQL permite redenumirea de relaii, atribute folosind cuvntul


cheie AS (care, de altfel, este opional i poate fi omis)
SELECT *
FROM LOCALITATI as L INNER JOIN JUDETE as J ON L.Judet
= J.IdJudet;

SELECT L.DenLocalitate as Localitatea, j.DenJudet as Judetul


FROM LOCALITATI as L INNER JOIN JUDETE as J ON L.Judet
= J.IdJudet
Echivalent cu
SELECT L.DenLocalitate Localitatea, j.DenJudet Judetul
FROM LOCALITATI L INNER JOIN JUDETE J ON L.Judet =
J.IdJudet

13

JOIN EXTERN
16.04.2014

LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN


Afiai mulimea tuturor localitilor i judeul din
care acestea fac parte, indiferent dac se cunoate
sau nu judeul
SELECT *
FROM LOCALITATI LEFT JOIN JUDETE ON
LOCALITATI.Judet = JUDETE.IdJudet
Echivalent cu
SELECT *
FROM JUDETE RIGHT JOIN LOCALITATI ON
LOCALITATI.Judet = JUDETE.IdJudet

14

JOIN EXTERN
16.04.2014

Afiai mulimea tuturor localitilor i judeul din


care acestea fac parte, indiferent dac se cunoate
sau nu judeul. Listai i judeele pentru care nu
exist nregistrat nicio localitate.
SELECT *
FROM LOCALITATI FULL OUTER JOIN JOIN
JUDETE ON
LOCALITATI.Judet = JUDETE.IdJudet
Observatie. Multe SGBD nu implementeaza
operatorul de FULL OUTER JOIN. Acesta se
implementeaza ca un UNION intre rezultatul unui
LEFT JOIN i al unui RIGHT JOIN.

15

CLAUZA WHERE
Specific condiii care trebuie satisfcute de tuplii
ce vor fi selectai ca rezultat al interogrii

16.04.2014

Este implementarea direct a operatorului de selecie


din algebra relaional
n exprimarea condiiilor se foloses operatorii logici
AND, OR, NOT.
Pot fi folosii operatori de comparaii, expresii aritmetice

16

CLAUZA WHERE
Operatorul de comparaie pentru iruri de caractere
este LIKE

16.04.2014

Se folosete n conjuncie cu caracterele


* semnific orice ir de caractere
? semnific un singur caracter
Observaie. n alte implementri SQL (ca de ex Oracle),
caracterele sunt %, respectiv _ .

17

EXEMPLU
16.04.2014

Afiai mulimea localitilor al cror nume ncepe


cu S.
SELECT * FROM LOCALITATI
WHERE DenLocalitate LIKE S*;
Afiai mulimea localitilor al cror nume are a
doua litera a:
SELECT * FROM LOCALITATI
WHERE DenLocalitate LIKE ?a*;

18

ALTE OPERAII CU IRURI DE CARACTERE


16.04.2014

abloanele (cu care se fac comparatii n where)


sunt case sensitive.
Exemple

Intro* se potrivete cu orice ir care ncepe cu Intro.


*Comp* se potrivete cu orice ir care conine textul
Comp ca subir
irul ??? se potrivete cu orice ir de exact 3 caractere
irul ???* se potrivete cu orice ir de cel puin 3
caractere

Operatori pentru iruri de caractere


Concatenare: & (n Oracle este || )
Funcii de conversie lower/upper case, de calcul a
dimensiunii unui ir, de cutat un subir ntr-un ir

19

ALI OPERATORI N CLAUZA WHERE


Operatorul BETWEEN AND

X BETWEEN a AND b

16.04.2014

Echivalent cu

A <= x <=b

20

ALI OPERATORI N CLAUZA WHERE


Operatorul IN implementeaz apartenena la o
mulime

16.04.2014

Atribut IN (mulime de valori)

Exemplu
SELECT * FROM LOCALITATI
WHERE DenLocalitate IN (Vaslui, Iasi);

21

ALI OPERATORI N CLAUZA WHERE - EXEMPLU


Aflai informaii despre toate localitaile din judeul
Vaslui.

16.04.2014

SELECT * FROM LOCALITATI


WHERE IdLocalitate IN (
SELECT IdLocalitate
FROM LOCALITATI INNER JOIN JUDETE
on Judet=IdJudet
WHERE DenJudet LIKE Vaslui
);
22

ALI OPERATORI N CLAUZA WHERE


Valori NULL

Valoare necunoscuta, temporar necunoscuta, sau


inaplicabila

16.04.2014

Orice operaie aritmetica ce implic un null rezult


n null
Pentru a testa egalitatea cu null se folosete
operatorul IS NULL
Orice comparaie cu NULL rezult n UNKNOWN.
Rezultatul unei clauze WHERE ce se evalueaza la
UNKNOWN este considerat FALSE

23

EXEMPLE
Aflai localitile pentru care nu se cunoate judeul
din care fac parte

16.04.2014

SELECT * FROM LOCALITATI


WHERE Judet IS NULL

24

CLAUZA ORDER BY
16.04.2014

Permite specificarea de criterii de ordonare a


tuplelor din rezultat
SELECT *
FROM LOCALITATI FULL OUTER JOIN JOIN
JUDETE ON
LOCALITATI.Judet = JUDETE.IdJudet
ORDER BY DenJudet

25

CLAUZA ORDER BY
16.04.2014

Implicit ordonarea este in ordine cresctoare


Dac se dorete ordine descresctoare se specific
prin cuvntul cheie DESC
SELECT *
FROM LOCALITATI FULL OUTER JOIN JOIN
JUDETE ON
LOCALITATI.Judet = JUDETE.IdJudet
ORDER BY DenJudet DESC

26

CLAUZA ORDER BY
16.04.2014

Se pot folosi mai multe atribute n aceast clauz


(implic sortarea dup mai multe criterii)
SELECT *
FROM PERSOANE
ORDER BY Nume, Prenume, DataNasterii DESC;

Observaie. Daca ar exista mai multe persoane cu acelai


nume, acestea ar fi ordonate alfabetic n ordine
lexicografic dupa prenume. Dac ar exista mai multe
persoane cu acelai nume i acelai prenume, atunci
acestea ar fi ordonate n ordine descresctoare a datei de
natere (cei nscui cel mai recent vor fi listai n rezultat
naintea celor nscui anterior lor).
27

OPERAII CU MULIMI
In SQL sunt definite urmtoarele operaii cu mulimi

n MsAccess este implementat doar UNION

UNION
INTERSECT
EXCEPT

16.04.2014

Trebuie folosit ntre relaii cu acelai numr de atribute, i cu


domenii compatibile ale atributelor

Exemplu
SELECT DenLocalitate
FROM LOCALITATI
WHERE (((LOCALITATI.[DenLocalitate]) Like '?a*'))
UNION
SELECT DenLocalitate
FROM LOCALITATI
WHERE (((LOCALITATI.[DenLocalitate]) Like '?t*'));

28

REZUMAT
Instruciunea SQL SELECT
Clauza SELECT
Clauza FROM

INNER JOIN, LEFT/RIGHT/FULL OUTER JOIN

Clauza WHERE

16.04.2014

Operaii i operatori noi folosii n WHERE

Clauza ORDER BY

29

N CURSUL URMTOR
16.04.2014

Clauza GROUP BY
Clauza HAVING
Subinterogri

30

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