Regăsirea datelor din mai multe tabele

download Regăsirea datelor din mai multe tabele

If you can't read please download the document

description

Regăsirea datelor din mai multe tabele. Obiective. În această lecție vom învăța : Cum se pot prelua informa ții din mai multe tabele simultan Care sunt tipurile de join existente Cum se realizează fiecare tip de join folosind sintaxa Oracle - PowerPoint PPT Presentation

Transcript of Regăsirea datelor din mai multe tabele

Regsirea datelor din mai multe tabele

Regsirea datelor din mai multe tabele Obiectiven aceast lecie vom nva:Cum se pot prelua informaii din mai multe tabele simultanCare sunt tipurile de join existenteCum se realizeaz fiecare tip de join folosind sintaxa OracleCum se realizeaz fiecare tip de join folosind sintaxa ANSI

Dobndirea cunotinelorn capitolele anterioare am aflat cum putem afia informaii din baza de date, folosind o singur tabel.Unul din rezultatele procesului de normalizare este acela c datele sunt memorate de cele mai multe ori n tabele diferite. De aceea atunci cnd dorim s afim diferite rapoarte e posibil s avem nevoie de date din mai multe tabele, folosind o singur comand SQL. Acest lucru este posibil folosind o operaie join sau interogare multipl.n Oracle exist dou modaliti de a scrie join-urile: folosind sintaxa specific Oracle i folosind sintaxa ANSI/OSI.

Dobndirea cunotinelorn tabelul de mai jos vom arta c exist mai multe moduri de legare a tabelelor folosind ambele sintaxe:

Dobndirea cunotinelorReguli de folosire a opiunii NATURAL JOIN:Tabelele sunt legate pe toate coloanele cu nume comunColoanele cu nume comun trebuie s aib acelai tipn clauza SELECT coloanele comune celor dou tabele NU vor fi prefaate de alias-ul tabelei

Dobndirea cunotinelorPentru a lega dou tabele folosind sintaxa ANSI, dar condiia de egalitate s fie pus doar pe anumite coloane, nu pe toate coloanele cu nume comun, se va folosi n loc de NATURAL JOIN clauza JOIN, iar coloanele pe care se face join-ul se precizeaz n opiunea USING, separate prin virgul.Coloanele din clauza USING trebuie s aib acelai nume, dar tipuri diferite n cele dou tabele.

Dobndirea cunotinelorDac n cele dou tabele nu exist coloane cu acelai nume, se va folosi clauza JOIN n conjuncie cu ON.Exemple:Creai un produs cartezian care afieaz numele clienilor, id_ul agenilor de nchirieri i numele acestora.SELECT c.nume, ai.id_ang, ai.numeFROM clienti c,agenti_inchirieri aiWHERE c.nume LIKE 'D%'sauSELECT c.nume, ai.id_ang, ai.numeFROM clienti c CROSS JOIN agenti_inchirieri aiWHERE c.nume LIKE 'D%'

Dobndirea cunotinelorPentru fiecare client afiai numele i adresa.SELECT nume, strada, nr, bloc,ap, judet, localitateaFROM clienti c, adrese adWHERE c.id_adresa=ad.id_adresasauSELECT nume, strada,nr, bloc,ap, judet,localitateaFROM clientiNATURAL JOIN adresesauSELECT nume, strada, nr, bloc,ap, judet, localitateaFROM clienti c JOIN adrese adUSING(id_adresa)sauSELECT nume, strada, nr, bloc,ap, judet, localitateaFROM clienti c JOIN adrese adON(c.id_adresa=ad.id_adresa)

Dobndirea cunotinelor

Dobndirea cunotinelor

Dobndirea cunotinelorFie tabela categorie_varsta:CREATE TABLE categorie_varsta(varsta_min NUMBER(2), varsta_max NUMBER(2),categorie NUMBER(2))INSERT INTO categorie_varsta VALUES(20,30,1)INSERT INTO categorie_varsta VALUES(31,40,2)INSERT INTO categorie_varsta VALUES(41,60,3)

Afiai numele, vrsta i categoria de vrst pentru toi agentii de nchirieri.SELECT nume,TRUNC((SYSDATE-data_nast)/366) varsta ,categorieFROM agenti_inchirieri ,categorie_varstaWHERE TRUNC((SYSDATE-data_nast)/366)BETWEEN varsta_min AND varsta_max

Dobndirea cunotinelorsauSELECT nume,TRUNC((SYSDATE-data_nast)/366) varsta ,categorieFROM agenti_inchirieri JOIN categorie_varstaON(TRUNC((SYSDATE-data_nast)/366)BETWEEN varsta_min AND varsta_max)

Pentru fiecare angajat din tabela altii afiai numele acestuia i al efului su.SELECT a.nume angajat, b.nume sefFROM altii a, altii bWHERE(a.id_sef=b.id_ang)

Dobndirea cunotinelorPentru fiecare client afiai numele, id-ul i numele agentului de nchirieri.Includei toi clienii chiar dac nu au asociat niciun agent.

SELECT c.nume client, ai.id_ang, ai.nume agentFROM clienti c, agenti_inchirieri aiWHERE c.id_ang=ai.id_ang(+)

sau

SELECT c.nume client, ai.id_ang, ai.nume agentFROM clienti c LEFT OUTER JOIN agenti_inchirieri aiON( c.id_ang=ai.id_ang)

Dobndirea cunotinelorPentru fiecare client afiai numele, id-ul i numele agentului de nchirieri. Includei toi agenii chiar dac nu au asociat niciun client.SELECT c.nume client, ai.id_ang, ai.nume agentFROM clienti c, agenti_inchirieri aiWHERE c.id_ang(+)=ai.id_ang

sau

SELECT c.nume client, a.id_ang, a.nume agentFROM clienti c RIGHT OUTER JOIN agenti_inchirieri aON( c.id_ang=a.id_ang)

Dobndirea cunotinelorAfiai toate nregistrrile din tabela clienti i din tabela agenti_inchirieri, indiferent dac au sau nu corespondent n cealalt tabel.SELECT c.nume client, a.id_ang, a.nume agentFROM clienti c FULL OUTER JOIN agenti_inchirieri aON( c.id_ang=a.id_ang)