Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Theta si echijonctiunea

sql



+ Font mai mare | - Font mai mic



Theta si echijonctiunea

Dintre tipurile de jonctiuni prezentate in capitolul 3, vom insista in aceast subcapitol asupra theta - jonctiunii si echijonctiunii. SQL nu prezinta clauze sau operatori speciali pentru jonctiune, insa dupa cum am vazut, jonctiunea se constituie ca o combinatie intre produs cartezian si selectie.



Exemplul 15 al algebrei relationale pentru theta - jonctionarea relatiilor R1 si R2 (figura3.19.), se scrie:

SELECT *

FROM R1, R2

WHERE R1.C1 > R2.C5

iar pentru echijonctiunea din exemplul 16 (figura 3.20.):

SELECT *

FROM R1, R2

WHERE R1.C1 = R2.C5

Jonctiunea naturala poate fi realizata numai prin specificarea numelor atributelor in clauza SELECT a frazei de interogare. In standardul SQL-92 si in implementarile SQL ale multor SGBD-uri se poate folosi o varianta mai eleganta, tinand seama si de faptul ca tot ce inseamna theta- si echijonctiune reprezinta pentru SQL, INNER JOIN (jonctiune interna).

Prin urmare, cele doua solutii de mai sus pot fi rescrise, dupa cum urmeaza:

SELECT *

FROM R1 INNER JOIN R2 ON R1.C1 > R2.C5

respectiv

SELECT *

FROM R1 INNER JOIN R2 ON R1.C1 = R2.C3

Reluam, pentru comparatie, exemplele din algebra relationala.

Exemplul 19. Sa se afle numele, facultatea si sectia studentilor care stau la caminul Miclas?.

- varianta 1 (generala):

SELECT NUME, facultate, sectia,

STUDCAMIN.nume_camin

FROM STUDENT, STUDCAMIN

WHERE STUDENT.nr_matricol =

STUDCAMIN.nr_matricol AND

STUDCAMIN.nume_camin = "Miclas"

- varianta 2 (Visual Fox Pro):

SELECT nume, facultate, sectia, ;

STUDCAMIN.nume_camin ;

FROM STUDENT INNER JOIN STUDCAMIN ON ;

STUDENT.nr_matricol = STUDCAMIN.nr_matricol ;

AND STUDCAMIN.nume_camin = "Miclas"

nume

facultate

sectia

nume_camin

Popescu Ion Octavian

Stiinte Economice

CIG

Miclas

Danciu Mihaela

Colegiul Economic

BIR

Miclas

Moraru Octavian

Colegiul Economic

BIR

Miclas

Simionescu Dorin

Stiinte Economice

FA

Miclas

Delca Simona

Colegiul Economic

MU

Miclas

Radu Denisa

Stiinte Economice

FA

Miclas

Figura 4.18. Studentii din caminul Miclas

Numai atributul nume_camin a fost prefixat cu numele tabelei din care provine (STUDCAMIN). Prefixarea este obligatorie atunci cand campul exista in doua sau mai multe dintre tabelele enumerate in clauza FROM

Exemplul 20. Care sunt cartile scrise de Victor Stanciu?

- varianta 1 (generala):

SELECT titlu, AUTOR.nume_autor

FROM AUTOR, AUTORCARTE, CARTE

WHERE AUTOR.cod_autor =

AUTORCARTE.cod_autor AND

AUTORCARTE.cota_carte = CARTE.cota_carte

AND nume_autor = "Victor Stanciu"

- varianta 2 (Visual Fox Pro):

SELECT titlu, AUTOR.nume_autor ;

FROM AUTOR INNER JOIN AUTORCARTE ON ;

AUTOR.cod_autor = AUTORCARTE.cod_autor ;

INNER JOIN CARTE ON AUTORCARTE.cota_carte = ;

CARTE.cota_carte ;

WHERE nume_autor = "Victor Stanciu"

titlu

nume_autor

Contabilitate generala

Victor Stanciu

Bazele contabilitatii

Victor Stanciu

Contabilitate generala

Victor Stanciu

Contabilitate de gestiune

Victor Stanciu

Figura 4.19. Cartile scrise de Victor Stanciu

Exemplul 21. Numele studentilor care au imprumutat carti din domeniul Informatica.

- varianta 1 (generala):

SELECT nume

FROM CARTE, STUDCARTE, STUDENT

WHERE CARTE.cota_carte = STUDCARTE.cota_carte AND STUDCARTE.nr_matricol = STUDENT.nr_matricol AND domeniu = "Informatica"

- varianta 2 (Visual Fox Pro):

SELECT nume ;

FROM CARTE INNER JOIN STUDCARTE ON ;

CARTE.cota_carte = STUDCARTE.cota_carte ;

INNER JOIN STUDENT ON STUDCARTE.nr_matricol = ;

STUDENT.nr_matricol ;

WHERE domeniu = "Informatica"

nume

Popescu Ion Octavian

Tudorache Octavian

Chivu Mihai

Petrescu Daniel

Goia Simona

Stanciu Maria

Figura 4.20. Studentii care au imprumutat carti din domeniul informatica

Exemplul 22. Numele si sectia studentilor Facultatii de Stiinte Economice care au imprumutat cartea Informatica de gestiune in februarie 2004?

- varianta 1 (generala):

SELECT nume, sectia

FROM CARTE, STUDCARTE, STUDENT

WHERE CARTE.cota_carte = STUDCARTE.cota_carte AND STUDCARTE.nr_matricol = STUDENT.nr_matricol AND titlu = "Informatica de gestiune" AND facultate = "Stiinte Economice" AND data_imprumut BETWEEN "01/02/2004" AND "29/02/2004"

- varianta 2 (Visual Fox Pro):

SELECT nume, sectia

FROM CARTE INNER JOIN STUDCARTE ON CARTE.cota_carte = STUDCARTE.cota_carte INNER JOIN STUDENT ON STUDCARTE.nr_matricol = STUDENT.nr_matricol

WHERE titlu = "Informatica de gestiune" AND facultate = "Stiinte Economice" AND data_imprumut BETWEEN AND

nume

sectia

Stanciu Maria

CIG

Figura 4.21. Studentii care au imprumutat cartea

Informatica de gestiune in februarie 2004

Exemplul 23. De la ce sectii sunt studentii care au imprumutat si cartea Informatica de gestiune si Contabilitate generala?

- solutia 1 - varianta 1 (nu functioneaza in Visual Fox Pro):

SELECT DISTINCT sectia

FROM STUDENT, STUDCARTE, CARTE

WHERE STUDENT.nr_matricol = STUDCARTE.nr_matricol AND STUDCARTE.cota_carte = CARTE.cota_carte AND titlu = "Informatica de gestiune"

INTERSECT

SELECT DISTINCT sectia

FROM STUDENT, STUDCARTE, CARTE

WHERE STUDENT.nr_matricol = STUDCARTE.nr_matricol AND STUDCARTE.cota_carte = CARTE.cota_carte AND titlu = "Contabilitate generala"

- solutia 1 - varianta 2 (SQL - 92):

SELECT DISTINCT sectia

FROM STUDENT INNER JOIN STUDCARTE ON STUDENT.nr_matricol = STUDCARTE.nr_matricol INNER JOIN CARTE ON STUDCARTE.cota_carte = CARTE.cota_carte

WHERE titlu = "Informatica de gestiune"

INTERSECT

SELECT DISTINCT sectia

FROM STUDENT INNER JOIN STUDCARTE ON STUDENT.nr_matricol = STUDCARTE.nr_matricol INNER JOIN CARTE ON STUDCARTE.cota_carte = CARTE.cota_carte

WHERE titlu = "Contabilitate generala"

De notat folosirea clauzei DISTINCT pentru eliminarea eventualelor dubluri. Pentru variantele solutiei 2 vom avea nevoie de ceea ce se numeste jonctiunea unei tabele cu ea insasi, care va fi prezentata in subcapitolul urmator.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1276
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved