Scrigroup - Documente si articole

     

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


Operatorii algebrei relationale

sql



+ Font mai mare | - Font mai mic



Operatorii algebrei relationale



Algebra relationala este reprezentata de multimea operatiilor formale ce actioneaza asupra unor relatii (tabelele bazei de date) si au ca rezultat alte relatii.

Operatorii algebrei relationale sunt:

SELECT (operatorul selectie) extrage tupluri (linii) ce satisfac o conditie specificata, producand o submultime pe orizontala; este operator unar si are

sintaxa urmatoare:

SELECT c1 [, c2, .] | * FROM R WHERE p

unde: ci, i Є - reprezinta campurile/ atribute sau expresii cu atribute

- selecteaza toate coloanele tabelului;

R  - relatia (tabelul) din care se extrag informatii;

p - predicat ce trebuie sa aiba valoarea de adevar True; se aplica tuplurilor.

Observatii:

q       O interogare permite obtinerea de informatii dintr-o baza de date, pornind de la o schema relationala si se realizeaza cu ajutorul comenzii SELECT.

q       Echivalenta notiunilor tabel - relatie este relativa, astfel: intr-o relatie nu pot exista doua linii identice, iar in limbajul SQL, tabelul obtinut dintr-o interogare poate contine mai multe tupluri identice.

Exemple: Fie baza de date FIRMA (de la tema 8) cu tabelele: DEPART (departamente), ANG (angajati), SALGRD (grade salarii).

Sa se afiseze departamentele din Ploiesti:

SELECT * FROM depart WHERE loc='Ploiesti'

Sa se afiseze departamentele din Bucuresti si Arad (figura 1):

SELECT nrdepart, numedepart,loc FROM depart WHERE loc ='Arad';

OR loc='Bucuresti'

Acelasi rezultat se poate obtine si in urma interogarii:

SELECT nrdepart, numedepart FROM depart;

WHERE INLIST(loc,'Bucuresti','Arad')

Sa se afiseze angajatii nascuti in perioada 1 ianuarie 1968 - 31 decembrie 1972:

SELECT nume, functie, datan FROM ang;

WHERE datan>= AND datan<=

Sa se afiseze departamentele unde lucreaza angajatii cu functiile presedinte, manager:

SELECT DISTINCT nrdepart FROM ang;

WHERE functie='MANAGER' or functie='PRESEDINTE'

Observatie: Clauza DISTINCT a comenzii SELECT elimina tuplurile identice din rezultat.

PROJECT (operatorul proiectie) extrage atributele specificate, producand o submultime pe verticala; este operator unar si are sintaxa urmatoare:

SELECT c1 [, c2, .] | * FROM R

unde: ci, i Є - reprezinta campuri/ atribute sau expresii cu atribute;

- selecteaza toate coloanele tabelului;

R  - relatia (tabelul) din care se extrag informatii.

Exemple:

Sa se afiseze departamentele firmei:

SELECT nrdepart, numedepart, loc FROM depart

Sa se afiseze angajatii firmei:

SELECT nume, functie,nrdepart FROM ang

UNION (operatorul reuniune) reuneste doua relatii. Operatorul UNION elimina automat liniile identice din rezultat. Reuniunea a doua relatii R si S se poate realiza folosind urmatoarea sintaxa:

SELECT * FROM R

UNION

SELECT * FROM S

Observatie: Operatorul UNION ALL permite preluarea tuturor liniilor celor doua relatii.

Exemple:

Sa se afiseze numele si functia angajatilor care lucreaza in departamentele 10, respectiv 20:

select nume, functie,nrdepart from ang where nrdepart=10;

union;

select nume, functie,nrdepart from ang where nrdepart=20

Rezultatele reuniunii sunt prezentate in figura 2:

Sa se afiseze departamentele unde lucreaza angajatii cu functiile PROIECTANT sau VANZATOR:

Metoda 1 - folosind operatorul UNION:

select nrdepart from ang where functie='PROIECTANT' ;

union ;

select nrdepart from ang where functie='VANZATOR'

Rezultatele interogarii ce contine operatorul UNION sunt prezentate in figura 3:

Metoda 2 - folosind operatorul UNION ALL (figura 4):

select nrdepart from ang where functie='PROIECTANT' ;

union all;

select nrdepart from ang where functie='VANZATOR'

INTERSECT (operatorul intersectie) nu este implementat in limbajul SQL - Visual FoxPro.

DIFFERENCE (operatorul diferenta) nu este implementat in limbajul SQL - Visual FoxPro.

PRODUCT (operatorul produs cartezian) genereaza toate perechile posibile de tupluri, primul element al perechii fiind din prima relatie, al doilea element din a doua relatie, s.a.m.d. Produsul cartezian se obtine dintr-o interogare executata asupra mai multor tabele.

Exemplu: Sa se afiseze produsul cartezian al tabelelor ,depart.dbf' si ,ang.dbf':

SELECT nume, functie,numedepart FROM ang, depart

DIVISION (operatorul diviziune) extrage valorile atributelor dintr-o relatie, care apar in toate valorile atributelor din cealalta relatie, fiind operator binar;

Fie doua relatii R(n) si S(m). Atunci DIVISION(R, S) (sau DIVIDE(R, S)) permite selectarea acelor tupluri de dimensiune n-m la care, adaugand orice tuplu din S, se obtine un tuplu din R.

JOIN (operatorul de compunere, de jonctiune) permite extragerea informatiilor din mai multe relatii corelate. Jonctiunea este o combinatie de produs cartezian si selectie. Exista urmatoarele tipuri de jonctiuni:

Theta-jonctiunea si echi-jonctiunea

Fie R1 si R2 relatii cu schemele relationale: R1( A, A1, .), R2(B, B1, .).

Theta-jonctiunea:

Echi-jonctiunea:

SELECT *

FROM R1,R2

WHERE R1.A > R2.B

SELECT *

FROM R1,R2

WHERE R1.A = R2.B

In limbajul SQL - Visual FoxPro, theta-jonctiunea si echi-jonctiunea se mai pot reprezenta utilizand jonctiunea interna (operatorul INNER JOIN):

Theta-jonctiunea:

Echi-jonctiunea:

SELECT *

FROM R1 INNER JOIN R2 ON R1.A > R2.B

SELECT *

FROM R1 INNER JOIN R2 ON R1.A = R2.B

Exemple

Ø      Afisati numele angajatilor, departamentul si localitatea unde lucreaza :

Metoda 1 :

SELECT nume, numedepart,loc FROM depart, ang;

WHERE depart.nrdepart = ang.nrdepart

Metoda 2 - folosind operatorul INNER JOIN:

SELECT nume, numedepart,loc ;

FROM depart INNER JOIN ang ON depart. nrdepart = ang.nrdepart

Ø      Sa se afiseze angajatii din Ploiesti :

Metoda 1 :

SELECT nume, loc FROM ang, depart;

WHERE depart.nrdepart = ang.nrdepart and depart.loc='Ploiesti'

Metoda 2 - folosind operatorul INNER JOIN:

SELECT nume, loc FROM ang INNER JOIN depart;

ON depart.nrdepart = ang.nrdepart WHERE depart.loc='Ploiesti'

Jonctiunea unui tabel cu el insusi (jonctiunea a doua instante ale tabelului)

Exemplu Sa se afiseze persoanele cu aceeasi functie ca si Toma :

Metoda 1 :

SELECT b.nume, b.functie FROM ang A, ang B;

WHERE A.functie = B.functie AND a.nume='Toma'

Metoda 2 - folosind operatorul INNER JOIN:

SELECT b.nume, b.functie FROM ang A INNER JOIN ang B;

ON A.functie = B.functie WHERE a.nume='Toma'

Jonctiunea externa include in rezultat si tupluri dintr-o relatie sau din ambele relatii, care prezinta valori ale atributului de legatura ce nu au corespondent in cea de-a doua relatie.

Jonctiunea externa foloseste operatorii :

LEFT OUTER JOIN (jonctiune externa la stanga);

RIGHT OUTER JOIN(jonctiune externa la dreapta);

FULL OUTER JOIN(jonctiune externa totala

Exemple

Ø      Fie tabelele R1 si R2 cu schemele relationale: R1(A, B, C) si R2(C, D, E). Sa se realizeze jonctiunea externa (la stanga, la dreapta si totala) :

R1 R2

A

B

C

xyz

xxz

yyz

C

D

E

xyz

yyx

xxz

Jonctiune externa la stanga: R = LEFT OUTER JOIN (R1, R2; R1.C R2.C

SELECT * FROM R1 LEFT OUTER JOIN R2 ON R1.C R2.C

R

A

B

R1.C

R2.C

D

E

xyz

xxz

xxz

NULL

NULL

NULL

yyz

xyz

Jonctiune externa la dreapta: R = RIGHT OUTER JOIN (R1,R2; R1.C R2.C

SELECT * FROM R1 RIGHT OUTER JOIN R2 ON R1.C R2.C

R

A

B

R1.C

R2.C

D

E

yyz

xyz

NULL

NULL

NULL

yyx

xyz

xxz

Jonctiune externa totala: R = FULL OUTER JOIN (R1, R2; R1.C R2.C

SELECT * FROM R1 FULL OUTER JOIN R2 ON R1.C R2.C

R

A

B

R1.C

R2.C

D

E

xyz

xxz

xxz

NULL

NULL

NULL

yyz

xyz

NULL

NULL

NULL

yyx

Observatie: Jonctiunea externa totala reprezinta reuniunea jonctiunii externe la dreapta cu jonctiunea externa la stanga.

Programul care creeaza tabelele R1 si R2, insereaza datele si realizeaza jonctiunile externe este urmatorul :

CREATE TABLE R1(A number(2), B char(3), C number(2))

INSERT INTO R1 VALUES(20,'xyz',30)

INSERT INTO R1 VALUES(30,'xxz',20)

INSERT INTO R1 VALUES(40,'yyz',25)

BROWSE

CREATE TABLE R2(C number(2), D char(3), E number(2))

INSERT INTO R2 VALUES(25,'xyz',30)

INSERT INTO R2 VALUES(40,'yyx',25)

INSERT INTO R2 VALUES(30,'xxz',40)

BROWSE

&& jonctiune externa la stanga

SELECT * FROM R1 LEFT OUTER JOIN R2 ON R1.C = R2.C

&& jonctiune externa la dreapta

SELECT * FROM R1 RIGHT OUTER JOIN R2 ON R1.C = R2.C

&& jonctiune externa totala

SELECT * FROM R1 FULL OUTER JOIN R2 ON R1.C = R2.C

CLOSE ALL

Ø      Fie baza de date FIRMA Sa se afiseze localitatile in care exista angajati:

SELECT DISTINCT loc as Localitate,numedepart as;

Nume_Departament, d.nrdepart as X, a.nrdepart as Y;

FROM depart d LEFT OUTER JOIN ang a;

ON d.nrdepart = a.nrdepart INTO CURSOR c1

SELECT * FROM c1 WHERE Y is not NULL

Observatii Exemplul de mai sus foloseste :

q       un cursor c1 (tabel temporar), pentru pastrarea rezultatelor jonctiunii externe la stanga dintre tabelele DEPART si ANG.

q       Operatorul IS NULL se foloseste sub formele: camp IS NULL sau camp IS not NULL. Atentie! Nu se foloseste sub forma : camp = NULL

Semijonctiunea presupune selectarea numai a liniilor din prima tabela care apar in jonctiune cu linii din tabela a doua.

Exemple

Ø      Fie tabelele R1 si R2 cu schemele relationale: R1(A, B, C) si R2(C, D, E) de la paragraful - Jonctiunea externa. Sa se realizeze semijonctiunea tabelelor R1 si R2:

R = SEMIJONCTIUNE(R1, R2; R1.C R2.C

SELECT A, B, C FROM R1, R2 WHERE R1.C R2.C

R

A

B

.C

xyz

yyz

Ø      Fie baza de date FIRMA. Sa se afiseze localitatile unde sunt angajati :

SELECT DISTINCT numedepart as Departament,loc as Localitate;

FROM depart d,ang a WHERE d.nrdepart=a.nrdepart



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1961
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