Upload
fmiovidius
View
213
Download
0
Embed Size (px)
DESCRIPTION
bd 6
Citation preview
BAZE DE DATE Curs 6
Lect.dr. Elena Butu
Facultatea de Matematic i Informatic
Universitatea Ovidius, Constana
DATA MANIPULATION LANGUAGE
DML
Formularea de interogri Instruciunea SELECT
Instruciuni de inserare
Instruciuni de modificare
Instruciuni de tergere
a nregistrrilor dintr-o baz de date relaional
16.0
4.2
014
2
DML - INSTRUCIUNEA SQL SELECT
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.
16.0
4.2
014
3
CLAUZA SELECT
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
16.0
4.2
014
4
CLAUZA SELECT
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;
16.0
4.2
014
5
CLAUZA SELECT
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;
16.0
4.2
014
6
CLAUZA FROM
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
16.0
4.2
014
7
CLAUZA FROM
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
16.0
4.2
014
8
REAMINTIM
16.0
4.2
014
9
EXEMPLU
Instruciunea urmtoare listeaz toate perechile de localitate-judet ce se pot forma cu tuplele existente n baza de date
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.
16.0
4.2
014
10
JOIN INNER JOIN
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
16.0
4.2
014
11
EXEMPLU
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
16.0
4.2
014
12
OPERATORUL DE REDENUMIRE
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
16.0
4.2
014
13
JOIN EXTERN
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
16.0
4.2
014
14
JOIN EXTERN
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.
16.0
4.2
014
15
CLAUZA WHERE
Specific condiii care trebuie satisfcute de tuplii ce vor fi selectai ca rezultat al interogrii
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.0
4.2
014
16
CLAUZA WHERE
Operatorul de comparaie pentru iruri de caractere este LIKE
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 _ .
16.0
4.2
014
17
EXEMPLU
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*;
16.0
4.2
014
18
ALTE OPERAII CU IRURI DE CARACTERE
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
16.0
4.2
014
19
ALI OPERATORI N CLAUZA WHERE
Operatorul BETWEEN AND
X BETWEEN a AND b
Echivalent cu
A
ALI OPERATORI N CLAUZA WHERE
Operatorul IN implementeaz apartenena la o mulime
Atribut IN (mulime de valori)
Exemplu
SELECT * FROM LOCALITATI
WHERE DenLocalitate IN (Vaslui, Iasi);
16.0
4.2
014
21
ALI OPERATORI N CLAUZA WHERE - EXEMPLU
Aflai informaii despre toate localitaile din judeul Vaslui.
SELECT * FROM LOCALITATI
WHERE IdLocalitate IN (
SELECT IdLocalitate
FROM LOCALITATI INNER JOIN JUDETE
on Judet=IdJudet
WHERE DenJudet LIKE Vaslui
);
16.0
4.2
014
22
ALI OPERATORI N CLAUZA WHERE
Valori NULL
Valoare necunoscuta, temporar necunoscuta, sau inaplicabila
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
16.0
4.2
014
23
EXEMPLE
Aflai localitile pentru care nu se cunoate judeul din care fac parte
SELECT * FROM LOCALITATI
WHERE Judet IS NULL
16.0
4.2
014
24
CLAUZA ORDER BY
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
16.0
4.2
014
25
CLAUZA ORDER BY
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
16.0
4.2
014
26
CLAUZA ORDER BY
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).
16.0
4.2
014
27
OPERAII CU MULIMI
In SQL sunt definite urmtoarele operaii cu mulimi UNION INTERSECT EXCEPT
n MsAccess este implementat doar UNION 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*'));
16.0
4.2
014
28
REZUMAT
Instruciunea SQL SELECT
Clauza SELECT
Clauza FROM
INNER JOIN, LEFT/RIGHT/FULL OUTER JOIN
Clauza WHERE
Operaii i operatori noi folosii n WHERE
Clauza ORDER BY
16.0
4.2
014
29
N CURSUL URMTOR
Clauza GROUP BY
Clauza HAVING
Subinterogri
16.0
4.2
014
30