Professional Documents
Culture Documents
LPBD / Ebd: Obtendo Dados de Várias Tabelas
LPBD / Ebd: Obtendo Dados de Várias Tabelas
LPBD / Ebd: Obtendo Dados de Várias Tabelas
EMPLOYEES DEPARTMENTS
1
Análise de uma Junção
Exemplo: Tabelas Regions e Countries
FROM 2
3
Americas
Asia
AU
AU
Australia
Australia
3
3
4 Middle East and Africa AU Australia 3
regions, 1 Europe BR Brazil 2
2 Americas BR Brazil 2
3 Asia BR Brazil 2
countries ; 4 Middle East and Africa BR Brazil 2
1 Europe CN China 3
2 Americas CN China 3
3 Asia CN China 3
4 Middle East and Africa CN China 3
PRODUTO 1 Europe DE Germany 1
2 Americas DE Germany 1
CARTESIANO !
3 Asia DE Germany 1
4 Middle East and Africa DE Germany 1
1 Europe DK Denmark 1
2 Americas DK Denmark 1
3 Asia DK Denmark 1
4 Middle East and Africa DK Denmark 1
1 Europe EG Egypt 4
2 Americas EG Egypt 4
3 Asia EG Egypt 4
4 Middle East and Africa EG Egypt 4
2
Análise de uma Junção
PK R PK C FK
Region_id Region_name Country_id Country_name Region_id
1 Europe AR Argentina 2 Quando:
2 Americas AR Argentina 2
3 Asia AR Argentina 2 Region_id(Regions) =
4 Middle East and Africa AR Argentina 2
1 Europe AU Australia 3 Region_id(Countries)
2 Americas AU Australia 3
3 Asia AU Australia 3 → CORRETO !
4 Middle East and Africa AU Australia 3
1 Europe BR Brazil 2
2 Americas BR Brazil 2
3 Asia BR Brazil 2
4 Middle East and Africa BR Brazil 2
1 Europe CN China 3
2 Americas CN China 3
3 Asia CN China 3
4 Middle East and Africa CN China 3
1 Europe DE Germany 1
2 Americas DE Germany 1
3 Asia DE Germany 1
4 Middle East and Africa DE Germany 1
1 Europe DK Denmark 1
2 Americas DK Denmark 1
3 Asia DK Denmark 1
4 Middle East and Africa DK Denmark 1
1 Europe EG Egypt 4
2 Americas EG Egypt 4
3 Asia EG Egypt 4
4 Middle East and Africa EG Egypt 4
3
Recuperando Registros com Joins
“Clássicos”
4
Aplicando Outras Condições a uma INNER
JOIN
SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM employees e JOIN departments d
ON (e.department_id = d.department_id)
AND e.manager_id = 149 ;
5
Employee_id last_name department_id department_id location_id department_name
100 King 90 90 1700 Executive
101 Kochhar 90 90 1700 Executive
102 De Haan 90 90 1700 Executive
103 Hunold 60 60 1400 IT
104 Ernst 60 60 1400 IT
105 Austin 60 60 1400 IT
106 Pataballa 60 60 1400 IT
107 Lorentz 60 60 1400 IT
108 Greenberg 100 100 1700 Finance
109 Faviet 100 100 1700 Finance
110 Chen 100 100 1700 Finance
111 Sciarra 100 100 1700 Finance
112 Urman 100 100 1700 Finance
113 Popp 100 100 1700 Finance
114 Raphaely 30 30 1700 Purchasing
115 Khoo 30 30 1700 Purchasing
116 Baida 30 30 1700 Purchasing
117 Tobias 30 30 1700 Purchasing
118 Himuro 30 30 1700 Purchasing
119 Colmenares 30 30 1700 Purchasing
200 Whalen 10 10 1700 Administration
201 Hartstein 20 20 1800 Marketing
202 Fay 20 20 1800 Marketing
203 Mavris 40 40 2400 Human Resources
204 Baer 70 70 2700 Public Relations
205 Higgins 110 110 1700 Accounting
206 Gietz 110 110 1700 Accounting
6
Exemplo 1: O RH precisa de um relatório com os seguintes dados de
cada funcionário: Nome e sobrenome, Salário, Cargo, Data de admissão,
Nome do Depto, (Cidade, Estado, País e Continente do Depto ).
Ordenação por nome do funcionário.
SELECT
concat(e.first_name,' ',e.last_name),
e.salary, e.job_id, e.hire_date,
d.department_name,
l.city, l.state_province,
c.country_name,
r.region_name
FROM
employees e
INNER JOIN departments d ON d.department_id=e.department_id
INNER JOIN locations l ON l.location_id=d.location_id
INNER JOIN countries c ON c.country_id=l.country_id
INNER JOIN regions r ON r.region_id=c.region_id
order by e.first_name;
7
Exemplo 2: O RH precisa de um relatório com os seguintes dados dos
funcionários com nome iniciado pela letra K: Sobrenome, Salário, Cargo,
Data de admissão, Nome do Depto, (Cidade, Estado, País e Continente
do Depto ). Ordenação por nome do funcionário.
SELECT
e.last_name, e.salary, e.job_id, e.hire_date,
d.department_name,
l.city, l.state_province,
c.country_name,
r.region_name
FROM
employees e
INNER JOIN departments d ON d.department_id=e.department_id
INNER JOIN locations l ON l.location_id=d.location_id
INNER JOIN countries c ON c.country_id=l.country_id
INNER JOIN regions r ON r.region_id=c.region_id
WHERE e.last_name like ‘K%’
order by e.first_name;
Não-Equijoins
EMPLOYEES JOB_GRADES
8
Recuperando Registros com Não-Equijoins
Joins Externas
DEPARTMENTS EMPLOYEES
Não há funcionários no
departamento 190 na Tabela
EMPLOYEES (Não aparece no JOIN)
9
LEFT OUTER JOIN
Esta consulta recupera todas as linhas da tabela EMPLOYEES, mesmo quando
não há correspondência na tabela DEPARTMENTS.
SELECT e.last_name, e.department_id, d.department_name
FROM employees e LEFT OUTER JOIN departments d
ON (e.department_id = d.department_id) ;
10
FULL OUTER JOIN (MySQL não possui)
Esta consulta recupera todas as linhas da tabela EMPLOYEES, mesmo quando não
há correspondência na tabela DEPARTMENTS. Ela também recupera todas as
linhas da tabela DEPARTMENTS, mesmo quando não há correspondência na tabela
EMPLOYEES.
SELECT e.last_name, d.department_id, d.department_name
FROM employees e FULL OUTER JOIN departments d
ON (e.department_id = d.department_id) ;
Produto cartesiano:
20 x 8 = 160 linhas
11
Criando Joins Cruzadas
• A cláusula CROSS JOIN gera o produto cruzado de
duas tabelas.
• Ele também é chamado de produto cartesiano entre
as duas tabelas.
SELECT last_name, department_name
FROM employees
CROSS JOIN departments ;
DESCRIBE dept80
12