CATEGORII DOCUMENTE |
Sinonime locale si jonctiunea unei tabele cu ea insasi
Lucrul cu nume lungi de tabele (STUDCARTE) si atribute (cod_localitate) prezinta marele avantaj al lejeritatii la citire si intelegeri rapide a logicii de derulare a interogarii. In schimb, destul de multi informaticieni nu agreaza risipa de caractere (si, implicit de timp) implicata de redactarile presupuse de folosirea numelor lungi.
Pentru aceasta in frazele SELECT, tabelelor li pot asocia sinonime sau aliasuri mai scurte. Pentru exemplificare, ultima interogare se poate rescrie astfel:
SELECT DISTINCT nume_camin
FROM STUDENT S, STUDCARTE SC, CARTE C
WHERE
S.nr_matricol = SC.nr_matricol AND
SC.cota_carte = C.cota_carte AND
titlu = "Informatica de gestiune"
INTERSECT
Tabelei STUDENT i s-a asociat sinonimul S, STUDCARTE SC, iar pentru CARTE C. Sinonimele prefixeaza (atunci cand este cazul) numele atributelor din clauzele SELECT si WHERE (eventual ORDER BY si GROUP BY
O operatie in care obligatoriu trebuie folosite sinonimele este jonctionarea unei tabele cu ea insasi.
Revenim la exemplul 25 din algebra relationala.
Ce studenti studiaza la aceeasi sectie cu Dinescu Monica?
SELECT S2.nume
FROM STUDENT S1, STUDENT S2
WHERE S1.sectia = S2.sectia AND S1.nume = "Dinescu
Monica"
Jonctiunea unei tabele cu ea insasi presupune, de fapt, jonctiunea a doua instante ale tabelei respective. Rezultatul jonctiunii S1 cu S2 este o tabela intermediara, asupra careia se aplica predicatul de selectie suplimentar S1.nume = "Dinescu Monica", rezultatul final fiind prezentat in figura 4.22.
nume |
Popescu Ion Octavian |
Popescu Marilena |
Danciu Monica |
Dinescu Monica |
Cristea Roxana |
Goia Simona |
Stanciu Maria |
Figura 4.22. Numele celor de la aceeasi sectie cu Dinescu Monica
O alta varianta se prezinta astfel:
SELECT S2.nume
FROM STUDENT S1 INNER JOIN STUDENT S2 ON S1.sectia = S2.sectia
WHERE S1.nume = "Dinescu Monica"
Am ramas datori cu formularea solutiei 2 din algebra relationala de la exemplul 22:
De la ce sectii sunt studentii care au imprumutat si cartea "Informatica de gestiune" si "Contabilitate generala"?
Jonctionam o instanta obtinuta prin jonctiunea STUDENT-STUDCARTE-CARTE (in care titlu = "Informatica de gestiune" cu o alta instanta a aceleiasi combinatii (in care titlu = "Contabilitate generala"
- solutia 2 - varianta 1 (generala):
SELECT DISTINCT S1.sectia
FROM STUDENT S1, STUDCARTE SC1, CARTE C1, STUDENT S2, STUDCARTE SC2, CARTE C2
WHERE
S1.nr_matricol = SC1.nr_matricol AND
SC1.cota_carte = C1.cota_carte AND
C1.titlu = "Informatica de gestiune" AND
S2.nr_matricol = SC2.nr_matricol AND
SC2.cota_carte = C2.cota_carte AND
C2.titlu = "Contabilitate generala" AND
S1.sectia = S2.sectia
- solutia 2 - varianta 2 (Visual Fox Pro):
SELECT DISTINCT S1.sectia
FROM CARTE C1
INNER JOIN STUDCARTE SC1 ON C1.cota_carte = SC1.cota_carte
INNER JOIN STUDENT S1 ON SC1.nr_matricol = S1.nr_matricol
INNER JOIN STUDENT S2 ON S1.sectia = S2. sectia
INNER JOIN STUDCARTE SC2 ON SC2.nr_matricol = S2.nr_matricol
INNER JOIN CARTE C2 ON SC2.cota_carte = C2.cota_carte
WHERE
C1.titlu = "Informatica de gestiune" AND C2. titlu = "Contabilitate generala"
sectia |
CIG |
Figura 4.23. Sectia studentilor care au imprumutat si cartea
Informatica de gestiune si Contabilitate de gestiune
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1124
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved