Sunteți pe pagina 1din 40

Universitatea Constantin Brncui din Trgu-Jiu

Facultatea de Inginerie
Departamentul de Automatic, Energie i Mediu

BAZE DE DATE
LECTOR DR. ADRIAN RUNCEANU

10.05.2013

Curs - BAZE DE DATE

Curs 6
Limbajul SQL
Cereri din mai multe tabele
(JOIN-uri)

10.05.2013

Curs - BAZE DE DATE

Limbajul SQL
7. Cereri din mai multe tabele (JOIN-uri)
7.1. JOIN-urile proprietatea ORACLE
7.1.1. Cartesian Product
7.1.2. Equijoin
7.1.3. Non-equijoin
7.1.4. Outer join
7.1.5. Self join

10.05.2013

Curs - BAZE DE DATE

7. Cereri din mai multe tabele (JOIN-uri)


Scopul acestui curs este de a studia
modalitatea prelurii de date din mai multe
tabele.
Pentru a putea realiza acest lucru,
fcnd legturi ntre tabelele unei baze de
date, putem folosi:
1. JOIN-urile proprietate ORACLE
2. JOIN-urile ANSI/ISO SQL99

10.05.2013

Curs - BAZE DE DATE

7. Cereri din mai multe tabele (JOIN-uri)


Tipuri de JOIN-uri:
Join-uri proprietate
ORACLE
Cartesian Product
Equijoin
Non-equijoin
Outer join
Self join

Join-uri
SQL 1999
Cross join
Natural join
Using clause
Full (two sided) outer
joins
Arbitrary join conditions
for outer joins

10.05.2013

Curs - BAZE DE DATE

Limbajul SQL
7. Cereri din mai multe tabele (JOIN-uri)
7.1. JOIN-urile proprietatea ORACLE
7.1.1. Cartesian Product
7.1.2. Equijoin
7.1.3. Non-equijoin
7.1.4. Outer join
7.1.5. Self join

10.05.2013

Curs - BAZE DE DATE

Cartesian Product and the Join


Operations
JOIN-uri proprietatea Oracle
Pentru a prelua date din mai multe tabele,
forma de baz a unei instruciuni SELECT
const n adugarea unei condiii de
legtur (join) n clauza WHERE
Numele coloanei trebuie prefixat de
numele tabelei n situaiile cnd acelai nume
de coloan apare n mai multe tabele.

10.05.2013

Curs - BAZE DE DATE

Cartesian Product and the Join


Operations

SELECT table1.column, table2.column


FROM table1, table2
WHERE table1.column1 = table2.column2;

10.05.2013

Curs - BAZE DE DATE

Cartesian Product and the Join


Operations
PRODUSUL CARTEZIAN (CARTESIAN PRODUCT)
Presupune c toate liniile din prima tabel s fie
unite (legate) cu toate liniile din tabela a doua.
Se produce atunci cnd:
1) condiia de join este omis
2) condiia de join nu este valid
Pentru a evita produsul cartezian trebuie
adugat o condiie de join valid.
Produsul cartezian genereaz foarte multe linii i
este folosit foarte rar.

10.05.2013

Curs - BAZE DE DATE

10

Limbajul SQL
7. Cereri din mai multe tabele (JOIN-uri)
7.1. JOIN-urile proprietatea ORACLE
7.1.1. Cartesian Product
7.1.2. Equijoin
7.1.3. Non-equijoin
7.1.4. Outer join
7.1.5. Self join

10.05.2013

Curs - BAZE DE DATE

11

Equijoin
EQUIJOIN
Uneori denumit simple join sau inner join, un
equijoin este o legtur ntre tabele care combin linii
ce au valori echivalente pentru coloanele specificate.
Exemplu:
SELECT angajati.angajati_id, angajati.nume,
angajati.nr_dept, departamente.nr_dept,
departamente.id_locatie
FROM angajati, departamente
WHERE angajati.nr_dept = departamente.nr_dept

10.05.2013

Curs - BAZE DE DATE

12

Equijoin
Cheie
strin
(Foreign
key)

Cheie
primar
(Primary
key)

10.05.2013

Curs - BAZE DE DATE

Equijoin
FOLOSIREA
OPERATORULUI AND

Ca i la interogrile
care folosesc o singur
tabel, se poate folosi
operatorul AND pentru a
restriciona liniile
selectate.

13

10.05.2013

Curs - BAZE DE DATE

14

Equijoin
ALIAS-URI
Atunci cnd denumirile coloanelor i tabelelor
sunt mari, devine incomod de lucrat cu acestea.
Pentru a scurta denumirile respective, se
folosesc alias-urile.
Se pot folosi alias-uri att pentru coloane ct i
pentru tabele.
Dac este precizat un alias pentru o tabel n
clauza FROM, atunci alias-ul respectiv trebuie s
nlocuiasc numele tabelei n clauza SELECT.

10.05.2013

Curs - BAZE DE DATE

Equijoin
Exemplu:
SELECT a.id_angajat, a.nume, a.id_dept,
d.id_dept, d.locatie
FROM angajati a, departamente d
WHERE a.id_dept = d.id_dept;

15

10.05.2013

Curs - BAZE DE DATE

16

Equijoin
1) Realizai un produs cartezian care afieaz
coloanele tabelelor d_play_list i d_track_listings
din baza de date DJ.
SELECT d.id_concert, d.id_cantec, d.comentarii,
t.numar_cd, t.track
FROM d_play_list d, d_track_listings t;
Lipseste clauza
WHERE

10.05.2013

Curs - BAZE DE DATE

17

Equijoin
2) Scriei o interogare pentru a extrage informaii
din trei tabele ale bazei de date DJ: d_clients,
d_evenimente si d_job.
SELECT c.nume, e.nume, j.job_date
FROM d_clients c , d_evenimente e , d_job j
WHERE c.client_number = e.client_number AND
e.id = j.event_id;
(Solutia nu este unica.)

10.05.2013

Curs - BAZE DE DATE

18

Limbajul SQL
7. Cereri din mai multe tabele (JOIN-uri)
7.1. JOIN-urile proprietatea ORACLE
7.1.1. Cartesian Product
7.1.2. Equijoin
7.1.3. Non-equijoin
7.1.4. Outer join
7.1.5. Self join

10.05.2013

Curs - BAZE DE DATE

19

NONEQUIJOINS
Este posibil s dorim s extragem date dintr-o
tabel ce nu are coloan corespondent n cealalt
tabel (exemplu cnd datele se nregistreaz ca
domenii de valori).
n aceast situaie se folosete nonequijoin-ul.
n acest tip de join, deoarece nu exist o
potrivire exact ntre 2 coloane din fiecare tabel,
nu se folosete operatorul de egalitate.
Se pot folosi operatorii:

<=, >=, BETWEENAND

10.05.2013

Curs - BAZE DE DATE

NONEQUIJOINS

20

10.05.2013

Curs - BAZE DE DATE

NONEQUIJOINS
Exemplu:
SELECT a.nume, a.salariu, g.nivel
FROM angajati a, grade_salarizare g
WHERE a.salariu BETWEEN
g.sal_min AND g.sal_max

21

10.05.2013

Curs - BAZE DE DATE

22

Limbajul SQL
7. Cereri din mai multe tabele (JOIN-uri)
7.1. JOIN-urile proprietatea ORACLE
7.1.1. Cartesian Product
7.1.2. Equijoin
7.1.3. Non-equijoin
7.1.4. Outer join
7.1.5. Self join

10.05.2013

Curs - BAZE DE DATE

23

Outer Joins
Join-urile studiate pn n acest moment
au avut ca rezultat linii care:
1. fie au avut o valoare care s corespund n

ambele tabele
2. fie o valoare ntr-o tabel se regsea n
intervalul dintre 2 valori ale celeilalte tabele
Liniile care nu ndeplineau condiiile nu
erau selectate.

10.05.2013

Curs - BAZE DE DATE

24

Outer Joins
Uneori, dorim s extragem toate datele
dintr-o tabel, chiar dac nu au valori care s
se potriveasc n cealalt tabel ( missing
data ).
Acest lucru se realizeaz folosind outer
join-ul.
Operatorul pentru outer join este semnul
plus pus ntre paranteze rotunde (+)

10.05.2013

Curs - BAZE DE DATE

25

Outer Joins
Un outer join este folosit pentru a
vizualiza toate liniile care au valoare
corespondent n cealalt tabel i liniile
dintr-o tabel care nu au valoare
corespondent n cealalt tabel.
Pentru a indica tabela deficitar (care
poate avea date lips missing data),
se pune operatorul (+) dup numele
coloanei din tabel, n clauza WHERE.

10.05.2013

Curs - BAZE DE DATE

26

Outer Joins
OBSERVAIE:
Un outer join nu poate folosi operatorul IN i nu
poate fi legat la alt condiie prin operatorul OR.

SELECT table1.column, table2.column


FROM table1, table2
WHERE table1.column(+) = table2.column
SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column = table2.column(+)

10.05.2013

Curs - BAZE DE DATE

Outer Joins
Nu exist angajai in
departamentele 3,4 i 5

27

10.05.2013

Curs - BAZE DE DATE

Outer Joins
SELECT a.id_angajat, a.nume, d.id_dept
FROM angajati a, departamente d
WHERE a.id_dept(+) = d.id_dept;

28

10.05.2013

Curs - BAZE DE DATE

29

Outer Joins
APLICAII:
1) Creai o interogare care are ca rezultat afiarea
numelui
(nume)
i
id-ul
i
numele
departamentului pentru angajai. Includei toi
angajaii, chiar dac nu sunt asignai unui
departament.
2) Modificai interogarea din problema anterioar
pentru a afia toate id-urile departamentelor,
chiar dac nu au angajai asociai lor.

10.05.2013

Curs - BAZE DE DATE

30

Outer Joins
1) Creai o interogare care are ca rezultat afiarea numelui
(nume) i id-ul i numele departamentului pentru angajai.
Includei toi angajaii, chiar dac nu sunt asignai unui
departament.

SELECT a.nume, a.id_dept, d.denumire


FROM angajati a, departamente d
WHERE a.id_dept = d.id_dept(+);

10.05.2013

Curs - BAZE DE DATE

31

Outer Joins
2) Modificai interogarea din problema anterioar pentru a afia
toate id-urile departamentelor, chiar dac nu au angajai
asociai lor.

SELECT a.nume, a.id_dept, d.denumire


FROM angajati a, departamente d
WHERE a.id_dept(+) = d.id_dept;

10.05.2013

Curs - BAZE DE DATE

32

Limbajul SQL
7. Cereri din mai multe tabele (JOIN-uri)
7.1. JOIN-urile proprietatea ORACLE
7.1.1. Cartesian Product
7.1.2. Equijoin
7.1.3. Non-equijoin
7.1.4. Outer join
7.1.5. Self join

10.05.2013

Curs - BAZE DE DATE

33

Self Joins
n modelarea de date, uneori este necesar s

punem n eviden o entitate n relaie cu ea


nsi.
Un exemplu este entitatea angajat.
Un angajat poate fi i manager.
Odat ce avem tabela Angajati, devine
necesar o relaie special numit self join
(un join de la tabela Angajati la ea nsi),
pentru a afla numele managerului pentru
fiecare angajat.

10.05.2013

Curs - BAZE DE DATE

34

Self Joins
Pentru a face join de la o tabel la ea

nsi, tabelei i sunt asociate 2 alias-uri.


Astfel, pentru baza de date, exist n

aparen 2 tabele.

10.05.2013

Curs - BAZE DE DATE

Self Joins

35

10.05.2013

Curs - BAZE DE DATE

36

Self Joins
Exemplu:
SELECT lucrator.nume || lucreaza pentru ||
manager.nume
FROM angajati lucrator, angajati manager
WHERE lucrator.id_manager=manager.id_angajat;

10.05.2013

Curs - BAZE DE DATE

37

Self Joins
APLICAII

1) Afiai numele i numrul pentru fiecare angajat


mpreun cu numele i numrul managerului.
Denumii coloanele: Angajat, Ang#, Manager i
Mgr#.
2) Modificai interogarea 1 pentru a afia toi
angajaii i managerii lor chiar dac un angajat nu
are un manager. Ordonai lista obinut alfabetic,
dup numele angajailor.

10.05.2013

Curs - BAZE DE DATE

38

Self Joins
1) Afiai numele i numrul pentru fiecare angajat
mpreun cu numele i numrul managerului.
Denumii coloanele: Angajat, Ang#, Manager i Mgr#.

SELECT

a.nume
AS "Angajat",
a.id_angajat
AS "Ang#",
m.nume
AS "Manager",
m.id_angajat
AS "Mgr#"
FROM angajati a, angajati m
WHERE a.id_angajat = m.id_angajat;

10.05.2013

Curs - BAZE DE DATE

39

Self Joins
2) Modificai interogarea 1 pentru a afia toi angajaii i
managerii lor chiar dac un angajat nu are un manager.
Ordonai lista obinut alfabetic, dup numele
angajailor.

SELECT a.nume
AS "Angajat",
a.id_angajat AS "Ang#",
m.nume
AS "Manager",
m.id_angajat AS "Mgr#"
FROM angajati a, angajati m
WHERE a.id_angajat = m.id_angajat(+)
ORDER BY a.nume;

10.05.2013

Curs - BAZE DE DATE

ntrebri?

40

S-ar putea să vă placă și

  • Conversii Si Operatii in Baze de Numeratie
    Conversii Si Operatii in Baze de Numeratie
    Document6 pagini
    Conversii Si Operatii in Baze de Numeratie
    Tudor Trenchea
    Încă nu există evaluări
  • C11 BD PDF
    C11 BD PDF
    Document42 pagini
    C11 BD PDF
    Tudor Trenchea
    Încă nu există evaluări
  • Baze de Date: Lector Dr. Adrian Runceanu
    Baze de Date: Lector Dr. Adrian Runceanu
    Document50 pagini
    Baze de Date: Lector Dr. Adrian Runceanu
    Iancu Adina Floricica
    Încă nu există evaluări
  • C10 BD PDF
    C10 BD PDF
    Document53 pagini
    C10 BD PDF
    Tudor Trenchea
    Încă nu există evaluări
  • C7 BD PDF
    C7 BD PDF
    Document50 pagini
    C7 BD PDF
    Tudor Trenchea
    Încă nu există evaluări
  • C8 BD PDF
    C8 BD PDF
    Document57 pagini
    C8 BD PDF
    Tudor Trenchea
    Încă nu există evaluări
  • C5 BD PDF
    C5 BD PDF
    Document51 pagini
    C5 BD PDF
    Tudor Trenchea
    Încă nu există evaluări
  • C4 BD PDF
    C4 BD PDF
    Document56 pagini
    C4 BD PDF
    Tudor Trenchea
    Încă nu există evaluări
  • C3 BD PDF
    C3 BD PDF
    Document62 pagini
    C3 BD PDF
    Tudor Trenchea
    Încă nu există evaluări
  • C1 BD
    C1 BD
    Document43 pagini
    C1 BD
    Nicoleta Bordeianu
    Încă nu există evaluări
  • Baze de Date
    Baze de Date
    Document62 pagini
    Baze de Date
    erikarobert
    Încă nu există evaluări