Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Reuniuni si uniuni - union

Oracle


Reuniuni si uniuni - union

Ce sunt reuniunile si uniunile?

Reuniunea (join) si uniunea (union) sunt doua tehnici utilizate pentru a combina diverse grupuri de date. în momentul în care datele sunt grupate logic, acestea pot fi afisate sau pot fi procesate în continuare. Atât reuniunea cât si uniunea se realizeaza în instructiunea select.



De ce se folosesc reuniunile si uniunile?

Reuniunile si uniunile se folosesc pentru a grupa împreuna date stocate în tabele diferite. Aceste doua metode de grupare aduna la un loc date din tabele multiple care sunt înrudite între ele. Aceasta caracteristica simplifica procesul de interogare.

Cum se folosesc reuniunile si uniunile

În paragrafele urmatoare sunt tratate diversele tipuri de reuniuni si uniuni.

Reuniuni simple

O reuniune simpla (simple join) este o instructiune select care returneaza linii din doua sau mai multe tabele. Aceste tabele 323v216d se afla în relatie, sau sunt reunite, pe baza coloanelor pe care le au în comun. Tabelele care sunt reunite pe baza coloanelor comune apar în clauza f rom a instructiunii select în acest capitol, este tratata reuniunea a doua tabele, însa aceste informatii sunt aplicabile si reuniunii a trei sau mai multe tabele.

Oracle nu impune nici o limitare în legatura cu coloanele pe care le puteti selecta din fiecare tabel. Puteti sa nu selectati nici o coloana sau sa selectati coloane multiple din fiecare tabel. Coloanele pe'care le specificati în clauza where nu este necesar sa apara în lista select.

Reunirea a doua tabele fara clauza where creeaza un produs cartezian. Acest produs combina fiecare linie a primului tabel cu fiecare linie a celui de-al doilea tabel. De exemplu, produsul cartezian al unui tabel cu 10 linii cu un alt tabel cu 25 de linii reprezinta o reuniune cu 250 de linii. De obicei acest rezultat nu are nici un sens si nu este folosit aproape deloc.

Puteti substitui numele real al tabelului cu aliasul acestuia în clauza f rom a instructiunii select. In acest caz însa, mediul Oracle impune substituirea numelui tabelului cu aliasul pe tot parcursul instructiunii select, atât în lista select, cât si în clauza where.

Sintaxa unei reuniuni simple este urmatoarea:

select coloana(e)

from tabel1, tabel2

where tabel1.coloanal = tabel2.coloana1

unde:

coloana(e) reprezinta coloana sau coloanele din care se citesc datele

tabel1, tabel2 reprezinta tabelele din care se citesc datele

tabel1. coloana1 = tabel2 .coloana1 reprezinta conditia care reuneste cele doua tabele.

Figura prezinta cele doua tabele reunite în exemplul care urmeaza în acest exemplu, tabelele ANGAJAT si DEPARTAMENT sunt reunite pe baza coloanei nr_dept.

Figura 15.1
Selectarea datelor din

doua tabele reunite

(reuniune simpla).

Aceasta instructiune creeaza o reuniune pentru tabelele ANGAJAT si DEPARTAMENT:

select angajat.nume, angajat.nr_dept, departament.descriere

from angajat, departament

where angajat.nr_dept = departament.nr_dept;

Date de iesire:

NUME    NR DEPT DESCRIERE

Adams

23B

Financiar

Baker

Sisteme

Price

90C

Productie

White

90C

Productie

Pentru a returna anumite linii dintr-o reuniune, pur si simplu introduceti în clauza where, pe lânga conditia de reunire, o conditie de cautare:

select angajat.nume "Nume Ang.",

angajat.nr_dept "t Dept.",

departament.descriere "Nume Dept."

From angajat, departament

where angajat.nr_dept = departament.nr_dept

and angajat.nume like 'B%';

Date de iesire:

Nume Ang. # Dept.    Nume Dept.

Baker    Sisteme

Reuniuni externe

O reuniune externa (outer join) este asemanatoare cu o reuniune simpla. O reuniune externa returneaza toate liniile pe care le returneaza reuniunea simpla, precum si toate liniile ale caror valori din coloanele dupa care se face reuniunea apar într-un tabel si nu se regasesc în coloanele corespunzatoare ale nici unei linii din celalalt tabel.

Sintaxa reuniunii externe este

select coloana(e)

from tabell, tabe!2

where tabell.coloanal = tabe!2.coloana(+)

unde:

(+) este folosit pentru a indica o reuniune externa

coloana (e) reprezinta coloana sau coloanele din care se citesc datele

tabel1 tabel2 reprezinta tabelele din care se citesc datele

tabel1 coloana1 = tabel2 . coloana2 reprezinta conditia care reuneste cele doua tabele

Semnul plus (+) poate fi plasat în oricare parte a conditiei din clauza where, însa nu în ambele parti. Simbolul reuniunii externe trebuie plasat în dreapta numelui tabelului în care nu apar linii care se gasesc în celalalt tabel. Programul Oracle genereaza nuluri pentru coloanele acestui tabel ori de câte ori tabelul nu are nici o linie care sa poata fi reunita cu o linie din celalalt tabel.

Figura 15.2 prezinta cele doua tabele asupra carora am efectuat reuniunea externa. In acest exemplu, au fost afisate toate departamentele, indiferent daca la momentul curent au sau nu angajati.

Figura 15.2.

Selectarea datelor

din tabele fara o

corespondenta directa.

Instructiunea urmatoare creeaza o reuniune externa a tabelelor ANGAJAT si DEPARTAMENT. Remarcati faptul ca simbolul reuniunii externe este plasat în dreptul tabelului ANGAJAT deoarece acestuia îi lipsesc câteva linii care se gasesc în tabelul DEPARTAMENT. Remarcati de asemenea faptul ca sunt afisate toate liniile din tabelul DEPARTAMENT.

Select angajat.nume, angajat.nr_dept, departament.descriere

from angajat, departament

where angajat.nr_dept(+) = departament.nr_dept;

Date de iesire:

NUME

NR. DEPT

DESCRIERE

Adams

23B

Financiar

Baker

Sisteme

Price

90C

Productie

White

90C

Productie

Distributie

Personal

Marketing

Auto-reuniuni

Sistemul Oracle permite o reuniune a unui singur tabel ca si cum ar fi doua tabele distincte. Acest tip de reuniune este cunoscut sub numele de auto-reuniune (seif join

Figura 15.3 Ilustreaza tabelul ANGAJAT privit sub forma a doua tabele distincte: ANG si DEPT.

Instructiunea urmatoare efectueaza o auto-reuniune asupra tabelului ANGAJAT. Din punct de vedere logic, instructiunea stabileste ca tabelul ANGAJAT este privit ca reprezentând doua tabele, dintre care unul numit ANG si celalalt numit DEPT.

Figura

Selectarea datelor din linii

diferite ale aceluiasi

tabel (auto reuniune

select ang.nume, ang.nr_dept, dept.descriere from angajat ang, angajat dept where ang.nr_dept = dept.nr_dept;

Date de iesire:

NUME

NR. DEPT

DESCRIERE

Adams

23B

Financiar

Baker

Sisteme

Price

90C

Productie

White

90C

Productie

Reuniuni si vederi

Puteti folosi o reuniune pentru a simplifica crearea unei vederi. De exemplu, puteti folosi o reuniune pentru a defini o vedere care este o colectie de coloane sau linii (din tabele multiple) aflate în relatie. Vederea ascunde faptul cu aceste informatii provin din tabele multiple.

Reuniuni si grupuri

In serverul Oracle, este recomandabil sa grupati numai acele tabele care sunt reunite frecvent în instructiuni SQL pe baza coloanelor cheie ale grupului. Gruparea determina îmbunatatirea performantelor reuniunilor însa va duce cu siguranta la scaderea performantelor parcurgerii integrale a tabelelor, operatiunilor de inserare în tabele si a instructiunilor update care modifica valori ale cheii grupului înainte de a grupa coloanele reunite, cântariti avantajele si dezavantajele întrucât aceasta reuniune afecteaza performantele serverului.

union

union este un operator care combina rezultatele a doua interogari într-un singur rezultat. Acest operator returneaza numai valorile distincte rezultate din interogare. Fie urmatoarele doua liste de date:

Nume articol_1

Nume articol_2

bobina

bobina

Condensator

Motor

Motor

Rezervor

Comutator

Cablu

Valva

cablu

Instructiunea urmatoare efectueaza o uniune a celor doua liste:

select nume_articol from nume_articol_1

union

select nume_articol FROM nume_articol_2

Date de iesire:

nume_articol

bobina

condensator

motor

comutator

rezervor

valva

cablu

Dupa cum se poate vedea din exemplul precedent, toate valorile distincte din ambele tabele sunt incluse în rezultatele interogarii.

Atunci când operatorii union si union all sunt folositi în instructiuni care selecteaza date de tip caracter, tipul valorilor returnate este dupa cum urmeaza:

Daca ambele interogari selecteaza valori de tip char, valorile returnate vor fi de tip char.

Daca cel putin una dintre interogari selecteaza valori de tip varchar2, valorile returnate vor fi de tip varchar2.

union all

Operatorul union all combina rezultatele a doua interogari într-un singur rezultat. Acest operator returneaza toate valorile furnizate de interogari. Fie urmatoarele doua liste de date:

Nume articol_1

Nume articol_2

Bobina

bobina

Condensator

Motor

Motor

Rezervor

Comutator

Cablu

Valva

cablu

Instructiunea urmatoare efectueaza o uniune completa (union all) a celor doua liste:

select nume_articol from nume_articol_1

union all

select nume_articol from nume_articol_2

Date de iesire:

nume_articol

bobina

bobina

condensator

motor

motor

comutator

rezervor

valva

cablu

cablu

Dupa cum se poate vedea din exemplul precedent, toate valorile din ambele tabele sunt incluse în rezultatele interogarii, inclusiv liniile de date duplicate.

orderby

Puteti folosi clauza order by în instructiunea select a unei interogari union. Pentru a face acest lucru, trebuie sa specificati în instructiunea union numarul coloanei (nu numele acesteia) dupa care doriti sa fie ordonate datele.

Instructiunea urmatoare foloseste clauza order b y pentru a sorta rezultatele în ordinea ascendenta a coloanei nr dept (nr_dept este a treia coloana).

select nume_dept, fabrica_dept, nr_dept from departament

union

select nume_dept, localizare_dept, nr_dept from dept

order by 3;

Date de iesire:

nume dept

fabrica dept

nr dept

Ambalare

Michigan

Livrare

Michigan

Pre-asamblare

New Mexico

Desfacere

Ohio

intersect

Operatorul intersect combina doua instructiuni select si returneaza numai acele linii care sunt returnate de ambele interogari. Fie urmatoarele doua liste de date:

Nume articol 1

Nume articol

Bobina

Bobina

Condensator

Motor

Motor

Rezervor

Comutator

Cablu

Valva

Cablu

Instructiunea urmatoare efectueaza o intersectie a celor doua liste:

select nume_articol from nume_articol_1

intersect

select nume_articol FROM nume_articol_2

Date de iesire:

nume_articol

bobina

motor

cablu

Acest operator returneaza numai acele articole care exista în ambele liste.

minus

Operatorul minus combina rezultatele a doua interogari si returneaza numai acele valori care sunt selectate de prima interogare dar nu si de â doua. Folosind aceleasi liste din exemplul anterior, fie urmatoarea instructiune:

select nume_articol from nume_articol_1

minus

select nume_articol FROM nume_articol_2

Date de iesire:

nume_articol

condensator

comutator

valva

In acest exemplu, instructiunea returneaza numai acele linii care se gasesc în prima lista dar nu si în a doua.

Rezumat

în acest capitol, ati aflat ca reuniunea si uniunea sunt doua metode de grupare logica a datelor din tabele distincte. Odata grupate, puteti sa afisati grupul rezultant sau sa- prelucrati în continuare.

Reuniunea si uniunea se folosesc pentru a grupa date din tabele multiple în vederea afisarii lor pe ecran sau în vederea prelucrarii lor în continuare. Aceste tehnici va permit sa interogati tabele multiple care se afla îhtr-o relatie data de una sau mai multe coloane comune, pentru a crea un singur set de rezultate.

Reuniunea si uniunea folosesc instructiunea select pentru a interoga baze de date multiple. Prin utilizarea diverselor tipuri de reuniuni si uniuni, puteti controla domeniul de valori returnate de instructiunea select.


Document Info


Accesari: 2919
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )