Creeaza.com - informatii profesionale despre


Evidentiem nevoile sociale din educatie - Referate profesionale unice
Acasa » referate » informatica » sql
Conditii de subinterogare

Conditii de subinterogare


Conditii de subinterogare

Subinterogarea reprezinta o interogare ale carei rezultate sunt transmise ca argumente unei alte interogari, prin imbricarea (includerea) a doua sau mai multe fraze SELECT. Simplificata, sintaxa generala a frazei SELECT pentru aceasta operatie este:

SELECT <lista_selectie1>|*

FROM <nume_tabela1>

WHERE <conditie1>

(SELECT <lista_selectie_2>|*

FROM <nume_tabela_2>



WHERE <conditie_2>)

Se observa ca a doua interogare se regaseste in interiorul primei interogari, putandu-se astfel formula interogari complexe.

Prin SELECT pot fi selectate toate campurile (cu clauza *) sau numai cele specificate in lista (cu <lista selectie>).

SELECT-ul interior denumit Inner genereaza valorile pentru conditia de cautare a instructiunii SELECT exterioare care o contine, denumita Outer. Instructiunea SELECT exterioara genereaza o relatie pe baza valorilor generate de catre interogarea interioara. Modul de construire a interogarii exterioare depinde de numarul valorilor returnate de catre interogarea interioara. In acest sens se pot distinge:subinterogari care returneaza o singura valoare,subinterogari care returneaza mai multe valori.

Din punctul de vedere al ordinei de evaluare a interogarilor, se pot distinge:

-subinterogari simple - interogarea interioara este evaluata prima, independent de interogarea exterioara, rezultatul ei fiind utilizat de catre interogarea exterioara;

-subinterogari corelate - valorile returnate de catre interogarea interioara depind de valorile returnate de catre interogarea exterioara, interogarea interioara fiind evaluata repetat pentru fiecare tuplu al interogarii exterioare.

Conditiile se construiesc cu ajutorul campurilor /atributelor, operatorilor si constantelor.

Exemplu: Sa se extraga din tabela student.dbf, pentru fiecare specializare, studentul /studentii cu media cea mai mare:

SELECT numest, prenume, b.media, b.specializ FROM student b ;

WHERE media = ;

(SELECT MAX(media) FROM student a ;

WHERE a.specializ=b.specializ)

Rezultatul acestei interogari este:

Evaluarea interogarii are loc astfel:

-se considera cate un tuplu a interogarii exterioare; interogarea exterioara transmite in mod repetat catre interogarea interioara denumire sectiei pentru fiecare tuplu din relatia STUDENT;

-interogarea interioara determina care este media maxima obtinuta in cadrul fiecarei sectii;

-aceasta valoare este retransmisa catre interogarea exterioara care compara media cu valoarea maxima; daca valoarea este aceiasi, tuplul este selectat in tabela rezultat.

Operatorii de subinterogare se pot grupa la randul lor in :operatori clasici(relationali)si operatori specifici

Operatorii clasici sunt =, >, <, < >

Exemplul: Din tabela student.dbf sa se selecteze numarul matricol, numele si prenumele studentului cu Nrmatr =AL 990030

SELECT Nrmatr, Numest, Prenume FROM student WHERE Nrmatr = AL990030

Rezultatul va fi o tabela cu trei coloane (Nrmatr, Numest, Prenume) si o singura linie ce contine datele studentului cu Nrmatr = AL990030.

Pentru subinterogarea a doua tabele, fraza SELECT va avea urmatorul format:

Exemplu: Sa se selecteze din tabela student2.dbf, articolul pentru care atributul Numest are aceiasi valoare cu cea rezultata prin interogarea tabelei student1.dbf pentru care specializarea este "Adm Publica", iar media este mai mare sau egala cu 9.50.

SELECT * FROM student2 ;

WHERE Numest = ;

(SELECT Numest FROM student1 ;

WHERE Specializ LIKE "Adm. Publica" AND Media > = 9.50)

Rezultatul acestei interogari este:

Operatorii specifici sunt desemnati printr-o serie de cuvinte rezervate care sugereaza functia acestora: IN, EXISTS, ANY, ALL, SOME.

Operatorul IN verifica apartenenta valorii unui camp la un interval de valori specificat, simplificand conditia de cautare.

Exemplul: Sa se selecteze studentii de la sectia "Adm. Publica" care au media mai mare sau egala cu 9.00.

SELECT * FROM student WHERE Media IN (SELECT Media FROM student;

WHERE Media >=9 AND Specializ = 'Adm. Publica')

Exemplu: Plecand de la relatia student.dbf sa se selecteze toti studentii care nu au media mai mare sau egala cu 9.00 si nu sunt la sectia "Adm. Publica" .

SELECT * FROM student WHERE Media NOT IN (SELECT Media:

FROM student WHERE Media >=9 OR Specializ = 'Adm. Publica')

Rezultatul executarii acestei fraze SELECT este prezentat in continuare.

In urma acestei interogari, din cele 19 inregistrari ale relatiei student.dbf, au fost selectate doar 7 care satisfac conditiile stabilite.

Operatorul EXISTS preia o subinterogare ca argument si returneaza valoarea de adevar TRUE daca operatia are ca rezultat o tabela cu cel putin o linie si respectiv FALSE daca rezultatul este nul. Practic operatorul EXIST verifica daca pentru fiecare tuplu a relatiei, exista tupluri care indeplinesc conditia interogarii anterioare, caz in care capata valoarea de adevar. In felul acesta, numai prin EXIST, este permisa specificarea mai multor atribute in interogarea interioara si aceasta deoarece nu se verifica valoarea unui anumit atribut, ci se genereaza o valoare de adevar TRUE sau neadevar FALSE , dupa cum intr-o relatie, exista sau nu o anumita valoare diferita de cea utilizata in interogarea exterioara.

Exemplu: Sunt date doua tabele CT_TREZOR si OP_TREZOR cu urmatoarele structuri:

CT_TREZOR OP_TREZOR

CONT, N, 10  CONT, N, 10

NUME_ENTIT, C, 20 DATA_OP, D

ALOCARE, N, 10

PLATA, N, 10

Continutul celor doua relatii este urmatorul:

 

Sa se selecteze entitatile care au solicitat plati din conturile personale. Fraza SELECT va avea urmatorul format:

SELECT * FROM CT_TREZOR cWHERE EXIST;

(SELECT * FROM OP_TREZOR o WHERE c.Cont = o.Cont AND Plati >0)

In urma acestei interogari se obtine:

Ca si IN, operatorul EXISTS poate fi precedat de NOT care are acelasi rol.

SELECT * FROM cont_trezot c WHERE NOT EXIST;

(SELECT * FROM op-trezor o WHERE c.Cont = o.Cont AND Plati >0)

Se observa ca in noua relatie sunt selectate toate tuplurile pentru care nu au fost inregistrate plati.

Alte optiuni de consultare.

Intra in aceasta categorie:

-optiuni de grupare si regrupare: GROUP BY si HAVING;

-optiuni de ordonare a rezultatelor: ORDER BY





Politica de confidentialitate


creeaza logo.com Copyright © 2024 - Toate drepturile rezervate.
Toate documentele au caracter informativ cu scop educational.