Sunteți pe pagina 1din 32

Limbajul SQL

Curs (partea a doua)

Subinterogare
SELECT [domeniu] list cmpuri selectate FROM nume tabel [WHERE cmp <,>,=,<=,>=,<> (SELECT cmp FROM nume tabel [WHERE criteriu de selecie]); Rezultatele unei interogri constituie argumentele pentru o nou interogare (n interogare).
5/21/2010 Luminita SCRIPCARIU 2

Observaii
Subinterogrile se pot face pe unul sau mai multe tabele. Rezultatele unei subinterogri pot fi restricionate printr-un cuvnt-cheie: ALL, ANY sau EXISTS, ALL EXISTS simplu sau negat (NOT ALL, NOT ANY, NOT EXISTS). Exemplu:
SELECT denumire, cod_produs FROM produse WHERE EXISTS (SELECT * FROM produse WHERE pret > 100);
5/21/2010 Luminita SCRIPCARIU 3

COMPUNEREA (UNION)
Vizualizarea simultan, grupat i ordonat, a rezultatelor mai multor selecii realizate pe mai multe tabele similare (aceleai cmpuri fiind selectate):
SELECT lista_cmpuri FROM tabela1 UNION SELECT list_cmpuri FROM tabela2 [GROUP BY cmp_de_grupare] [HAVING criteriul_de_agregare] [UNION SELECT list_cmpuri FROM tabela3 [GROUP BY cmp_de_grupare ] [HAVING criteriul_de_grupare]] ... [ORDER BY cmp_criteriu_de_sortare];
5/21/2010 Luminita SCRIPCARIU 4

Exemplu
Exist n baza de date, listele de clieni de la mai multe magazine ale unui lan de magazine i se dorete reunirea lor ntr-o tabel unic:
SELECT nume, prenume, cnp FROM clienti01 UNION SELECT nume, prenume, cnp FROM clienti02 UNION SELECT nume, prenume, cnp FROM clienti03 ORDER BY nume,prenume,cnp;

5/21/2010

Luminita SCRIPCARIU

CROSSTAB
Afiarea n dou dimensiuni (ncruciat) a rezultatelor unei selecii, ntr-un tabel cu un antet pentru linii i un antet pentru coloane:
TRANSFORM funcie agregat AS alias sau valoare SELECT cmp ca antet linie FROM tabel ... PIVOT cmp ca antet coloan ;

5/21/2010

Luminita SCRIPCARIU

Exemplu
TRANSFORM Last(pret.pret) AS LastOfpret SELECT produs.denumire FROM produs INNER JOIN pret ON produs.id_produs = pret.id_produs GROUP BY produs.id_produs, produs.denumire PIVOT Month([start_date]);

5/21/2010

Luminita SCRIPCARIU

Interogare cu parametri
Se poate lsa libertate operatorului s introduc o valoare a unui cmp de selecie (parametrul de selecie) de la tastatur prin includerea acestei cerine n oricare clauz a comenzii de selecie.
SELECT funcie AS alias 1, [Tastati parametrul 1]*[Valoare] AS alias 2 FROM nume tabela WHERE (((tabela.cmp)=[Tastati parametrul 2]) AND ((Carti.[Cod ISBN])=[Tastati parametrul 3]));
5/21/2010 Luminita SCRIPCARIU 8

Exemplu
SELECT comenzi_clienti.id, comenzi_clienti.nume, comenzi_clienti.prenume, Sum(comenzi_clienti.de_plata) AS [Total de plata] FROM comenzi_clienti GROUP BY comenzi_clienti.id, comenzi_clienti.nume, comenzi_clienti.prenume HAVING (((comenzi_clienti.id)=[tastati cod client]));

5/21/2010

Luminita SCRIPCARIU

Interogare pentru crearea unei tabele noi


SELECT [domeniu] (cmp1, [cmp2,....]) INTO [nume tabel nou] FROM [nume tabel surs] [WHERE criteriu de selecie]; Exemplu:

SELECT proprietate_proprietar_agent.localitate, proprietate_proprietar_agent.tip, proprietate_proprietar_agent.suprafata, proprietate_proprietar_agent.agent.nume, proprietate_proprietar_agent.agent.prenume


INTO [Proprietati Iasi] FROM proprietate_proprietar_agent WHERE (((proprietate_proprietar_agent.localitate)="iasi"));
5/21/2010 Luminita SCRIPCARIU 10

Interogare cu adugare de tupluri


INSERT INTO nume_tabel_destinaie (cmp1, [cmp2,...]) SELECT [domeniu] (cmp1, [cmp2,...]) FROM nume_tabel_surs [WHERE criteriu de adugare a nregistrrilor n tabela destinaie]; Exemplu: INSERT INTO proprietate ( localitate, tip, suprafata, id, id_a ) SELECT localitate, tip, suprafata, [tastati id proprietar], [tastati id agent] FROM [Proprietati Iasi];

5/21/2010

Luminita SCRIPCARIU

11

VEDERI
TABEL VIRTUAL PERSONALIZAT PENTRU UN ANUMIT TIP DE UTILIZATOR CREATE VIEW nume_vedere [(coloan [, ])] AS SELECT [(coloan [, ])] FROM [tabel.coloana] [WITH [CASCADED|LOCAL] CHECK OPTION];

5/21/2010

Luminita SCRIPCARIU

12

EXEMPLU
TABELE: Agenti (cnp, nume, prenume, filiala, salariu, vechime); Proprietati (nr_proprietate, zona, tip, suprafata, pret, adresa, cod_proprietar, cnp) CREATE VIEW agenti_proprietati AS SELECT nume_agent, prenume_agent, filiala, nr_proprietate, FROM agenti.nume, agenti.prenume, agenti.filiala, proprietati.nr_proprietate WHERE agenti.cnp = proprietati.cnp GROUP BY agenti.filiala;
5/21/2010 Luminita SCRIPCARIU 13

OBSERVAII
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. Vederile pot fi folosite pentru a crea noi vederi!

5/21/2010

Luminita SCRIPCARIU

14

TIPURI DE VEDERI
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.

5/21/2010

Luminita SCRIPCARIU

15

Tipuri de 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.

5/21/2010

Luminita SCRIPCARIU

16

DISTRUGEREA UNEI VEDERI


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 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.
5/21/2010 Luminita SCRIPCARIU 17

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.
BD coerent BD coerent Begin Transaction
5/21/2010

Executia tranzactiei
Luminita SCRIPCARIU

End Transaction
18

OPERAII I STRI
Tranzactia include operatii de acces la BD i manipulare a datelor: Begin transaction, Read, Write, End transaction, Commit transaction, Abort transaction, Undo, Redo
Read/Write End

Partially committed

Commit

Committed

Begin

Active
Abort

Abort

Failed

Undo

Aborted

5/21/2010

Active: tranzactia se executa Partially Committed: executata partial (comisa) Committed: dupa verificarea executiei cu succes Failed: executia fireasca nu poate continua Aborted: abandonata ( dupa roll back) Luminita SCRIPCARIU

19

INSTRUCIUNI SPECIFICE ALE TRANZACIILOR


BEGIN: aceast operaie marcheaz nceputul execuiei unei tranzacii. READ / WRITE: sunt operaii de citire sau scriere a articolelor n baza de date COMMIT - modificrile din BD sunt permanente; semnaleaz terminarea cu succes a tranzaciei, validarea tuturor modificrilor efectuate n baza de date i vizibilitatea modificrilor efectuate pentru alte tranzacii; din acest moment, modificrile efectuate nu mai pot fi anulate, nici pierdute printr-o defectare ulterioar a sistemului.
5/21/2010 Luminita SCRIPCARIU 20

END: marcheaz terminarea operaiilor de scriere sau citire din BD, ceea ce nseamn c tranzacia se poate termina; este posibil s fie necesare unele operaii de verificare nainte de validarea (commit) tranzaciei. ROLLBACK sau ABORT: semnaleaz faptul c tranzacia a fost abandonat i c orice efect al tranzaciei trebuie anulat prin rularea napoi a operaiilor efectuate. BD revine n starea anterioar coerent. UNDO: similar instruciunii de rollback, dar se aplic unei singure operaii, nu ntregii tranzacii. REDO: reluarea unor operaii ale unei tranzacii pentru a se putea valida ntreaga tranzacie.
Luminita SCRIPCARIU 21

5/21/2010

PROPRIETILE TRANZACIILOR - ACID


Atomicitate (all or nothing) - aciunile tranzaciei se execut toate n bloc sau nu se execut de loc. Consistena (nu sunt violate constrngerile de integritate) tranzactia menine consistena BD dup execuie. Izolare (modificrile concurente sunt invizibile serializabile) - tranzactia este protejat de efectele executrii concurente a altor tranzacii. Durabilitate (actualizrile comise sunt persistente) efectul tranzaciei comise trebuie s persiste i n situaia unei cderi a SGBD (Database recovery).
5/21/2010 Luminita SCRIPCARIU 22

OBSERVAII
SGBD este responsabil cu ntreeserea aciunilor (operaii Read/Write asupra obiectelor din BD) ale diverselor tranzacii. SGBD menine ntr-o list (log) toate aciunile efectuate asupra datelor, astfel nct poate relua (undo) aciunile tranzaciilor anulate. Asigurarea atomicitii tranzaciei n prezena cderilor sistemului se numete recuperare la cderi crash recovery . Procesul de recovery va scana pn la cel mai recent checkpoint care conine lista tranzaciilor active i apoi pn la punctul de ncepere a acestora.
5/21/2010 Luminita SCRIPCARIU 23

CONFLICTE
Dou tranzacii de citire a acelorai date nu sunt conflictuale, ordinea acestora nu este important. Dac dou tranzacii citesc sau scriu dou obiecte de date distincte, acestea nu sunt conflictuale i ordinea de execuie nu conteaz. Dac o tranzacie scrie un obiect de date i o alta citete sau scrie acelai obiect, cele dou tranzacii sunt n conflict iar ordinea executiei lor este foarte important Tipuri de conflicte: WR conflict: T2 citete un obiect scris anterior de T1 RW conflict: T2 scrie un obiect de date citit anterior de ctre T1 WW conflict: T2 scrie un obiect de date scris anterior de T1.
5/21/2010 Luminita SCRIPCARIU 24

CONTROLUL CONCURENEI BAZAT PE LACTE


Lactele asigur acces exclusiv la anumite obiecte din BD pentru o tranzacie. Blocarea: procedur utilizat pentru controlul concurenei accesului la date. Atunci cnd o tranzacie acceseaz la BD, un lact va interzice accesul altor tranzacii, prevenind rezultatele incorecte. Shared Lock (read lock): dac tranzacia posed un lact de tip shared asupra unui obiect de date, va putea citi obiectul dar nu l va putea actualiza. Exclusive Lock (write lock): dac o tranzacie deine un lact de tip exclusiv asupra unui obiect din BD, va putea att citi, ct i scrie acel obiect. Tranzactiile pot solicita alocarea de lacte de la planificatorul de tranzacii (managerul de lacate)
5/21/2010 Luminita SCRIPCARIU 25

Exemplu
T1 begin-transaction Write-lock(A) Read(A) A=A*1.20 Write(A) Write-lock(B) Wait B=B+A Unlock(A)
5/21/2010

T2 begin-transaction Write-lock(B) Read(B) B=B+100 Write(B) Unlock(B) Write-lock(A) Wait


Luminita SCRIPCARIU 26

DEFINIREA TRANZACIEI
SET TRANSACTION [READ ONLY |READ WRITE] | [ISOLATION LEVEL READ UNCOMMITTED | READ UNCOMMITTED | REPEATABLE READ | SERIALIZABLE] SET CONSTRAINTS; COMMIT [WORK] ROLLBACK [WORK] ;

5/21/2010

Luminita SCRIPCARIU

27

Opiuni
Modul de acces la articole - valori posibile: READ ONLY, READ WRITE. Nivelul de izolare a tranzaciilor (ISOLATION LEVEL) - gradul pn la care o tranzacie trebuie s fie izolat de celelalte tranzacii - valori posibile:
READ UNCOMMITTED READ COMMITTED REPETABLE READS SERIALIZABLE.

Modul de refacere a datelor (SET CONSTRAINTS) - valori posibile:


DEFERRED (refacere amnat) IMMEDIATE (refacere imediat).
5/21/2010 Luminita SCRIPCARIU 28

CONTROLUL ACCESULUI
Identificator de autorizaie, asociat cu o parol Posesiunea asupra obiectelor din BD Privilegii: SELECT INSERT [(nume_coloan [, ...])] UPDATE [(nume_coloan [, ...])] DELETE REFERENCES [(nume_coloan [, ...])] USAGE
5/21/2010 Luminita SCRIPCARIU 29

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

5/21/2010

Luminita SCRIPCARIU

30

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

5/21/2010

Luminita SCRIPCARIU

31

Web References and Tutorials


http://sqlcourse.com/ http://sqlcourse2.com/ http://www.oracle.com Free: Oracle Database 10g Express
5/21/2010 Luminita SCRIPCARIU 32

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