Documente noi - cercetari, esee, comentariu, compunere, document
Documente categorii

Subinterogari

Subinterogari

Subinterogarea este o comanda SELECT care apare intr-o clauza a altei comenzi select. La randul sau subinterogarea pote contine alte subinterogari. Fiecare subinterogare trebuie sa fie inchisa intre paranteze rotunde.

Subinterogarile pot fi plasate in clauzele WHERE, HAVING, FROM sau SELECT;

Subinterogarile pot fi : a) incuibarite (fara sincronizare);

b) corelate ( cu sincronizare);

Subinterogarea fara sincronizare este caracterizata de faptul ca intoarce un rezultat care este transmis subinterogarii de nivel superior. Valoarea returnata de o subinterogare incuibarita(fara sincronizare) nu depinde in niciun fel de valorile produse de instructiunile SELECT exterioare ei.



Exemplu :

Sa se obțina lista celor mai scumpe carți :


Select titlu from tCarti

where pret = (select max(pret) from tCarti)



Sa se obțina lista carților care au prețul mai mare decat prețul mediu al carților:


Select titlu , pret from tCarti

where pret > (select AVG(pret) from tCarti).


Sa se obțina colegii de facultate ai studentei Popa Andreea :


Select nume, prenume from tStudenti

where CodFacultate = (Select CodFacultate from tStudenti

where nume='Popa' and prenume = 'Andreea')



Subinterogarea corelata (cu sincronizare ) este caracterizata de faptul ca face referire la una sau mai multe coloane ale interogarii exterioare. Eavaluarea subinterogarii corelate se face pentru fiecare rand rezultat al interoigarii exterioare care o conține.


Exemple :


Sa se obțina lista carților al caror preț depașește media prețurilor carților ce aparțin aceluiași domeniu :

Select * from tCarti as A

where pret > (select avg(pret) from tCarti

where CodDomeniu = A.CodDomeniu)


Sa se determine nota maxima obtinuta la examene de catre fiecare student

select codStd, numeStd,

(select max(nota) from tNote where codStd=A.codStd) as NotaMaxima

from tStudenti as A


Rezultatul furnizat de o subinterogare poate fi prelucrat in interogarea de nivel superior prin utilizarea oricarui operator de comparare =, >, <, >=, <=, <>, !=, !<,!> sau, daca subinterogarea intoarce mai multe rezultate putem folosi opreatorii logici ALL, ANY, IN, EXISTS.


Operatorul ALL - condiția este adevarata daca este verificata pentru toate elementele listei returnate.

Sa se afiseze produsele al caror preț este diferit de prețurile produselor alimentare :


Select * from tProduse

where pret <> All(select pret from tProduse

Where Categoria ='Alimentare')



Operatorul ANY - condiția este adevarata daca este verificata pentru cel puțin una din valorile returnate de subinterogare.



>Any este echivalenta cu mai mare decat minimul din lista

<Any este echivalenta cu mai mic decat maximul din lista


Select * from tProduse

where pret > ANY(select pret from tProduse

where Categoria ='Alimentare')


Operatorul IN -

expresie in (set de valori)

returneaza adevarat daca expresie se gasește in setul de valori specificat intre paranteze.


Sa se obțina numele cititorilor care au imprumutat carți scrise de Eminescu:


Select nume, prenume

from tCititori as A inner join tImprumuturi as B

on A.CodCititor = B.CodCititor

where codCarte in (Select codCarte from tCarti

where autor like %Eminescu%')


Operatorul IN poate fi inlocuit cu =ANY.


EXISTS - presupune ca predicatul este adevarat daca subinterogarea intoarce cel puțin un rezultat.


Sa se obțina lista cititorilor care au carți nerestituite și acest termen este depașit:


Select * from tCititori as A

where EXISTS (select * from tImprumuturi

where CodCititor = A.CodCititor and

dataRestituire < GetDate()


Operatorii in si exists pot fi folosiți și in varianta negata not in și not exists


Sa se afișeze studenții care nu s-au prezentat la examen la disciplina cu codul c1'


Select codStd, nume, prenume from tStudenti

where codStd not in (select codStd from tRezEx where codCurs='c1')




Valori NULL

NULL indica o valoare necunoscuta. O valoare null este diferita de șirul vid sau 0.

Doua valori null nu sunt egale intre ele. Comparația dintre doua valori NULL sau dintre dintre NULL și o alta valoare returneaza o valoare necunoscuta (UNKNOWN).

Operatorii is null și is not null se folosesc pentru a testa in clauza where daca o valoare este sau nu null.


Select count(*) from tStudenti where telefon is null


Functia ISNULL

Functia ISNULL inlocuiește o valoare null cu o valoare de inlocuire specificata.


Sintaxa

ISNULL (expresie, valaore_de_inlocuire)

Exemplu fie tabelul tTest ce conține coloana Coloana1 cu valorile

Coloana1

5

7

NULL

3

NULL

atunci

Select AVG (Coloana1 ) from tTest

furnizeaza rezultatul 5(valorile null sunt ignorate), iar

Select AVG (ISNULL (Coloana1, 0) ) from tTest

furnizeaza rezultatul 3 (valorile null sunt inlocuite cu 0).


Funcția NULLIF

Sintaxa

NULLIF( expresie1, expresie2)

returneaza expresie1 daca expresie1<>expresie2 și NULL daca expresie1 = expresie2



Funcția CASE


Funcția CASE evalueaza o lista de expresii și returneaza una din mai multe expresii rezultat posibile.

V1. Sintaxa :



CASE expresie_intrare

WHEN expresie1 THEN rezultat1



WHEN expresie2 THEN rezultat2

.

WHEN expresien THEN rezultatn

ELSE rezultat]

END



Expresie_intrare se compara cu expresie1, expresie2, .. expresien. Daca expresie_intrare este egala cu expresiek atunci se returneaza rezultatk.

Daca expresie_intrare este diferita de expresie1, expresie2, .. expresien se returneaza rezultat. Clauza else este opționala, in acest caz funcția case returneaza valoarea null daca expresia de intrare este diferita de expresie 1,2,.n.


V2.Sintaxa :

CASE

WHEN expresieLogica1 THEN rezultat1

WHEN expresieLogica2 THEN rezultat2

.

WHEN expresieLogica n THEN rezultatn

ELSE rezultat

END


Funcția CASE returneaza rezultatk daca expresieLogicak este prima dintre expresiile adevarate.



SELECT

Sum (CASE UM WHEN 'Kg' THEN CANTITATE ELSE 0 END) AS [TOTAL Kg ] ),

Sum (CASE WHEN UM='L' THEN CANTITATE END) AS [TOTAL LITRI ]

FROM tDetaliiBon as A inner join tProduse as B On A.CodProd = B.CodProdus


SELECT

Sum (CASE WHEN um= 'Kg' THEN CANTITATE ELSE 0 END) AS [TOTAL Kg ] ),

Sum (CASE WHEN UM='L' THEN CANTITATE END) AS [TOTAL LITRI ]

FROM tDetaliiBon as A inner join tProduse as B On A.CodProd = B.CodProdus


biologie

botanica






Upload!

Trimite cercetarea ta!
Trimite si tu un document!
NU trimiteti referate, proiecte sau alte forme de lucrari stiintifice, lucrari pentru examenele de evaluare pe parcursul anilor de studiu, precum si lucrari de finalizare a studiilor universitare de licenta, masterat si/sau de doctorat. Aceste documente nu vor fi publicate.