SQL_2017 1_exibindo_dados_varias_tabelas_JOINS
27 pág.

SQL_2017 1_exibindo_dados_varias_tabelas_JOINS


DisciplinaBanco de Dados I5.943 materiais57.381 seguidores
Pré-visualização2 páginas
PÓS-GRADUAÇÃOPÓS-GRADUAÇÃO
Exibindo Dados de Várias Tabelas
JOINs
Criado em junho de 2017 Docente: Gil Jader \u2013 gil.jader@gmail.com
Linguagem SQL
PÓS-GRADUAÇÃO
Objetivos
\uf097Ao concluir esta lição, você será capaz de:
\uf097 Criar instruções SELECT para acessar dados de 
mais de uma tabela com equijoins e não-equijoins
\uf097 Juntar uma tabela a si própria com uma auto-join
\uf097 Exibir dados que normalmente não atendem a 
uma condição de join usando joins externas
\uf097 Gerar um produto cartesiano de todas as linhas de 
duas ou mais tabelas
Docente: Gil Jader \u2013 gil.jader@gmail.com
Linguagem SQL
PÓS-GRADUAÇÃO
Obtendo Dados de Várias Tabelas
EMPLOYEES DEPARTMENTS 
\u2026
\u2026
Docente: Gil Jader \u2013 gil.jader@gmail.com
Linguagem SQL
PÓS-GRADUAÇÃO
Tipos de Join
\uf097 Estas são as joins compatíveis com o padrão
SQL:1999:
\uf097 Cross Joins
\uf097 Joins naturais
\uf097 Cláusula USING
\uf097 Joins externas integrais (ou de dois lados)
\uf097 Condições arbitrárias de join para joins externas
Docente: Gil Jader \u2013 gil.jader@gmail.com
Linguagem SQL
PÓS-GRADUAÇÃO
Unindo Tabelas com a Sintaxe SQL:1999
\uf097 Use uma join para consultar dados de mais de
uma tabela:
SELECT table1.column, table2.column
FROM table1
[NATURAL JOIN table2] |
[JOIN table2 USING (column_name)] |
[JOIN table2
ON (table1.column_name = table2.column_name)]|
[LEFT|RIGHT|FULL OUTER JOIN table2
ON (table1.column_name = table2.column_name)]|
[CROSS JOIN table2];
Docente: Gil Jader \u2013 gil.jader@gmail.com
Linguagem SQL
PÓS-GRADUAÇÃO
Criando Joins Naturais
\u2013 A cláusula NATURAL JOIN baseia-se em 
todas as colunas das duas tabelas que têm o 
mesmo nome.
\u2013 Ela seleciona linhas das duas tabelas que têm 
valores iguais em todas as colunas 
correspondentes.
\u2013 Se as colunas com nomes idênticos tiverem 
tipos de dados distintos, será retornado um 
erro.
Docente: Gil Jader \u2013 gil.jader@gmail.com
Linguagem SQL
PÓS-GRADUAÇÃO
SELECT department_id, department_name,
location_id, city
FROM departments
NATURAL JOIN locations ;
Recuperando Registros com Joins Naturais
Docente: Gil Jader \u2013 gil.jader@gmail.com
Linguagem SQL
PÓS-GRADUAÇÃO
Criando Joins com a Cláusula USING
\uf097 Se diversas colunas tiverem os mesmos nomes, 
mas os tipos de dados não forem coincidentes, a 
cláusula NATURAL JOIN poderá ser modificada
com a cláusula USING para especificar as colunas
a serem usadas em uma equijoin.
\uf097 Não use um nome ou apelido de tabela nas
colunas referenciadas.
\uf097 As cláusulas NATURAL JOIN e USING são
mutuamente exclusivas.
Docente: Gil Jader \u2013 gil.jader@gmail.com
Linguagem SQL
PÓS-GRADUAÇÃO
Unindo Nomes de Colunas
Docente: Gil Jader \u2013 gil.jader@gmail.com
Linguagem SQL
SELECT l.city, d.department_name
FROM locations l JOIN departments d 
USING (location_id)
WHERE d.location_id = 1400;
Onde está o erro na consulta abaixo?
PÓS-GRADUAÇÃO
SELECT employees.employee_id, employees.last_name, 
departments.location_id, department_id
FROM employees JOIN departments
USING (department_id) ;
Recuperando Registros com a Cláusula
USING
\u2026
Docente: Gil Jader \u2013 gil.jader@gmail.com
Linguagem SQL
PÓS-GRADUAÇÃO
Qualificando Nomes de Colunas Ambíguos
\uf097 Use prefixos de tabela para qualificar nomes de 
colunas presentes em várias tabelas.
\uf097 Use prefixos de tabela para melhorar o desempenho.
\uf097 Use apelidos de coluna para distinguir as colunas com 
nomes idênticos, mas que residem em tabelas
diferentes.
\uf097 Não use apelidos em colunas identificadas na cláusula
USING e listadas em alguma parte da instrução SQL.
Docente: Gil Jader \u2013 gil.jader@gmail.com
Linguagem SQL
PÓS-GRADUAÇÃO
SELECT e.employee_id, e.last_name, 
d.location_id, department_id
FROM employees e JOIN departments d
USING (department_id) ;
Usando Apelidos de Tabelas
\uf097 Use apelidos de tabelas para simplificar consultas.
\uf097 Use apelidos de tabelas para melhorar o desempenho.
Docente: Gil Jader \u2013 gil.jader@gmail.com
Linguagem SQL
PÓS-GRADUAÇÃO
Criando Joins com a Cláusula ON
\uf097 A condição de join para a join natural é
basicamente uma equijoin de todas as colunas
com o mesmo nome.
\uf097 Use a cláusula ON para especificar condições 
arbitrárias ou colunas a serem utilizadas em 
operações de join.
\uf097 A condição de join é separada de outras condições 
de pesquisa.
\uf097 A cláusula ON facilita a compreensão do código.
Docente: Gil Jader \u2013 gil.jader@gmail.com
Linguagem SQL
PÓS-GRADUAÇÃO
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);
Recuperando Registros com a Cláusula ON
\u2026
Docente: Gil Jader \u2013 gil.jader@gmail.com
Linguagem SQL
PÓS-GRADUAÇÃO
Auto-Joins Usando a Cláusula ON
SELECT e.last_name emp, m.last_name mgr
FROM employees e JOIN employees m
ON (e.manager_id = m.employee_id);
\u2026
Docente: Gil Jader \u2013 gil.jader@gmail.com
OBS.: Também é possível usar a cláusula ON para unir colunas com nomes
distintos na mesma tabela ou em uma tabela diferente. 
Linguagem SQL
PÓS-GRADUAÇÃO
SELECT employee_id, city, department_name
FROM employees e 
JOIN departments d
ON d.department_id = e.department_id 
JOIN locations l
ON d.location_id = l.location_id;
Criando Joins Tridimensionais com a 
Cláusula ON
\u2026
Docente: Gil Jader \u2013 gil.jader@gmail.com
Linguagem SQL
PÓS-GRADUAÇÃO
Não-Equijoins
EMPLOYEES JOB_GRADES
O salário na tabela EMPLOYEES
deve estar compreendido entre
o menor e o maior salário na 
tabela JOB_GRADES.
\u2026
Docente: Gil Jader \u2013 gil.jader@gmail.com
Linguagem SQL
PÓS-GRADUAÇÃO
SELECT e.last_name, e.salary, j.grade_level
FROM employees e JOIN job_grades j
ON e.salary
BETWEEN j.lowest_sal AND j.highest_sal;
Recuperando Registros com Não-Equijoins
\u2026
Docente: Gil Jader \u2013 gil.jader@gmail.com
Linguagem SQL
PÓS-GRADUAÇÃO
Joins Externas
EMPLOYEESDEPARTMENTS
Não há funcionários no 
departamento 190.
\u2026
Docente: Gil Jader \u2013 gil.jader@gmail.com
Linguagem SQL
PÓS-GRADUAÇÃO
Joins Internas e Externas
\u2013 No padrão SQL:1999, a join de duas tabelas que 
retorna apenas as linhas correspondentes é uma join 
interna.
\u2013 Uma join entre duas tabelas que retorna os resultados
da join interna, bem como as linhas não
correspondentes da tabela esquerda (ou direita), é 
chamada de join externa esquerda (ou direita).
\u2013 Uma join entre duas tabelas que retorna os resultados
de uma join interna, bem como os resultados de uma
join esquerda e direita, é uma join externa integral.
Docente: Gil Jader \u2013 gil.jader@gmail.com
Linguagem SQL
PÓS-GRADUAÇÃO
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) ;
LEFT OUTER JOIN
\u2026
Docente: Gil Jader \u2013 gil.jader@gmail.com
Linguagem SQL
PÓS-GRADUAÇÃO
SELECT e.last_name, e.department_id, d.department_name
FROM employees e RIGHT OUTER JOIN departments d
ON (e.department_id = d.department_id) ;
RIGHT OUTER JOIN
\u2026
Docente: Gil Jader \u2013 gil.jader@gmail.com
Linguagem SQL
PÓS-GRADUAÇÃO
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) ;
FULL OUTER JOIN
\u2026
Docente: Gil Jader \u2013 gil.jader@gmail.com
Linguagem SQL
PÓS-GRADUAÇÃO
Produtos Cartesianos
\uf097Um produto cartesiano será formado quando:
\uf097 Uma condição de join for inválida
\uf097 Todas as linhas da primeira tabela se unirem a 
todas as linhas da segunda tabela
\uf097Para evitar um produto cartesiano, inclua
sempre uma condição de join válida.
Docente: Gil