AULA 1
Prof. (a): Danilo Monteiro Ribeiro
UNINABUCO - PAULISTA – PE 2018.1
Aula Junções
Banco de Dados Avançado
Objetivos
2
• Fazer o download:
• http://monteiro.inf.br/
• ->Banco de Dados Avançado
• ->scriptaulajoin
O que veremos hoje...
nA gente usava subselect para realizar consultadas em mais de uma tabela
nJunções (Join)
pMais rápido
pMenos processamento pSubselect (transformados)
SQL – Junções
p Comando Select (contextualização)
n Junções em mais de uma tabela Regras básicas para fazer um junção:
p 1) As tabelas envolvidas devem estar listadas após a cláusula FROM;
p 2) As colunas utilizadas no SELECT sejam precedidas do nome ou do apelido da tabela; e, por fim:
p 3) As tabelas envolvidas na junção estejam ligadas pelo(s) campo(s) em comum na cláusula WHERE
p Sintaxe:
pSELECT t1.campo1, t1.campo2, t2.campo1 FROM tabela1 t1 TIPO DE JOIN tabela2 t2 ON t1.id = t2.id;
id nome idade
1 danilo 28
2 jose 24
3 felipe 19
4 henrique 14
5
id Id_client numero
1 1 9999999
2 2 8888888
3 3 7777777
4 3 555555
5 6666666
pcliente(id, nome,idade)
pfones_telefone(id, id_client, numero)
p cliente.id = fones_cliente.id_client
p Comando Select (exemplos)
SELECT c.nome, c.idade, fc.numero
FROM cliente c CROSS JOIN fones_cliente fc ;
6
O que esse código faz?
O que o cross join faz?
7
danilo jose
999999 888888 77777 felipe
Henrique
6666 5555
SQL – Junções
p Comando Select (exemplos)
SELECT c.nome, c.idade, fc.numero
FROM cliente c INNER JOIN fones_cliente fc ON c.id = fc.id_client ;
O que esse código faz?
O que o Inner join faz?
9
danilo jose
999999 888888 77777 Felipe
5555
10
p Comando Select (exemplos)
SELECT c.nome, c.idade, fc.numero
FROM cliente c LEFT JOIN fones_cliente fc ON c.id = fc.id_client ;
O que esse código faz?
O que o cross join faz?
11
danilo jose
999999 888888 77777
Henrique Felipe
5555
12
p Comando Select (exemplos)
SELECT c.nome, c.idade, fc.numero
FROM cliente c RIGHT JOIN fones_cliente fc ON c.id = fc.id_client ;
O que esse código faz?
O que o cross join faz?
13
danilo jose
999999 888888 77777 Felipe
66666 5555
• SELECT *FROM cliente c full JOIN
fones_cliente fc ON c.id = fc.id_client ;
• ???
14
• Full join
15
• Um uso comum para uma subconsulta pode ser calcular um valor para uso em uma
consulta. Por exemplo, podemos usar uma
subconsulta para nos ajudar a obter que todos os produtos que tenham um preço de produto maior que a média.
16
https://www.essentialsql.com/what-is-the-difference-between-a-join- and-subquery/
SELECT ProductID, Name, ListPrice, (SELECT AVG(ListPrice) FROM Production.Product) AS AvgListPrice FROM Production.Product
WHERE ListPrice > (SELECT AVG(ListPrice) FROM Production.Product) ;
• objetivo principal de uma junção é combinar linhas de uma ou mais tabelas com base em uma condição de correspondência. Por
exemplo, podemos usar nomes e modelos de produtos de exibição de associação.
• Select Product.Name, ProductModel.Name as ModelName FROM Production.product INNER JOIN
Production.ProductModel ON Product.ProductModelID = ProductModel.ProductModelID
https://www.essentialsql.com/what-is-the-difference-between-a-join-and- 17
subquery/
• Na maioria dos casos, as junções são uma solução melhor que as subconsultas - o Postgres até mesmo “reescreve”
internamente uma subconsulta, criando uma junção, sempre que possível, mas isso,
obviamente, aumenta o tempo necessário para criar o plano de consulta.
• https://robots.thoughtbot.com/postgresql-
performance-considerations
18• Preferir JUNÇÕES INNER
• Sempre prefira fazer uma junção interna em vez de uma junção externa esquerda. Um
monte de pesquisa e código foi usado para otimizar as junções externas no Postgres ao longo dos anos.
• https://robots.thoughtbot.com/postgresql- performance-considerations
19
• Faça um desenho representativo (como nos exemplos anteriores) das consultas a seguir?
•
select c.nome, c.idade, fc.numero from cliente c LEFT JOIN fones_cliente fc ON c.id = fc.id_client wherefc.id_client is null;
• select c.nome, c.idade, fc.numero from cliente c RIGHT JOIN fones_cliente fc ON c.id = fc.id_client where c.id is null;
20