Documente Academic
Documente Profesional
Documente Cultură
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
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
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
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
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
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
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.
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