You are on page 1of 28

Junções em SQL

Inner, left, right, full, cross join

Fundamentos de Banco de Dados


Profa. Roberta Macêdo M. Gouveia
robertammg@gmail.com
Junções SQL
• SQL é baseada na álgebra relacional, uma forma de cálculo
sobre conjuntos e relações.

• Em SQL algumas das operações de junções entre tabelas podem


ser facilmente demonstradas com a teoria dos conjuntos.
– Os diagramas de Venn simbolizam graficamente as propriedades
relativas aos conjuntos e sua teoria.
INNER JOIN LEFT JOIN LEFT JOIN
(exclusiva)

RIGHT JOIN RIGHT JOIN FULL OUTER JOIN


(exclusiva)

FULL OUTER JOIN (exclusiva)


Junções em SQL

• Exemplos de Junções
Criar as duas tabelas abaixo no BD: Marcas e Carros.

create table carros(


marca varchar(100),
modelo varchar(100),
ano int,
cor varchar(100))

create table marcas(


marca varchar(50),
nome varchar(50))
Junções em SQL
Inserir Dados nas Tabelas:

6 registros na tabela Marcas e 14 registros na tabela Carros.

insert into marcas values ('VW','Volkswagem'), ('Ford','Ford'), ('GM','General


Motors'), ('Fiat','Fiat'), ('Renault','Renault'), ('MB','Mercedes Bens')

insert into carros values ('VW','Fox',2005,'preto'), ('VW','Fox',2008,'preto'),


('Ford','Ecosport',2009,'verde'), ('Ford','KA',2008,'prata'),
('Fiat','Punto',2008,'branco'), ('Fiat','Uno',2007,'preto'),
('Fiat','Stilo',200,'4prata'), ('Fiat','Uno',2005,'prata'), ('Fiat','Stilo',2008,'verde'),
('Fiat','Uno',2009,'branco'), ('Peugeot','207',2010,'prata'),
('Peugeot','207',2010,'prata'), ('Peugeot','207',2007,'azul'), ('Chrysler','300
C',2008,'verde')
Junções em SQL

Tabela Marcas
6 marcas

Tabela Carros
14 carros
Junções em SQL – INNER JOIN
A junção inner join irá juntar os registros
da tabela MARCA que tiver um
correspondente na tabela CARROS.

Exemplo:

select m.nome, c.modelo


from marcas as m inner join carros as c
on m.marca=c.marca
Resultado INNER JOIN

Tabela Marcas
6 marcas

Tabela Carros
14 carros

INNER JOIN
10 tuplas

Podemos dizer que 10 carros estão associados a alguma marca,


enquanto que os demais não.
Junções em SQL – LEFT JOIN
O left join irá fazer a junção das duas
tabelas “dando preferência” aos registros
da tabela marcas.

Exemplo:

select m.nome, c.modelo


from marcas as m left join carros as c
on m.marca= c.marca
Resultado LEFT JOIN

Tabela Marcas
6 marcas

Tabela Carros
14 carros

LEFT JOIN
13 tuplas

As marcas General Motors, Renault e Mercedes Bens não tem nenhum carro
cadastrado, mesmo assim elas apareceram no resultado.
Junções em SQL – LEFT JOIN (EXCLUSIVA)
Esta consulta retorna todos os registros
da tabela da esquerda que não possuem
coincidentes na tabela da direita.

select m.nome, c.modelo


from marcas as m left join carros as c
on m.marca= c.marca
where c.modelo is null
*c.marca
Junções em SQL – LEFT JOIN (EXCLUSIVA)

Tabela Marcas
6 marcas

Tabela Carros
14 carros

LEFT JOIN (EXCLUSIVA)


3 tuplas

As marcas General Motors, Renault e Mercedes Bens não tem nenhum carro
cadastrado.
Junções em SQL – RIGHT JOIN
A junção right join funciona de forma
inversa ao left join.

Com o right join será mostrado todos


os carros, mesmo aqueles que não
estejam associados a nenhum registro
da tabela marcas. Exemplo:

select m.nome, c.modelo


from marcas as m right join carros as c
on m.marca=c.marca
Junções em SQL – RIGHT JOIN

Tabela Marcas
6 marcas

Tabela Carros
14 carros

RIGHT JOIN
14 tuplas

Os modelos “207” e “300 C” estão cadastrados em Carros, mas não estão


associados a nenhuma Marca.
Junções em SQL – RIGHT JOIN (EXCLUSIVA)
Esta consulta retorna todos os registros
da tabela da direita que não possuem
coincidentes na tabela da esquerda.

Exemplo:

select m.nome, c.modelo


from marcas as m right join carros as c
on m.marca=c.marca
where m.marca is null
Junções em SQL – RIGHT JOIN (EXCLUSIVA)

Tabela Marcas
6 marcas

Tabela Carros
14 carros
RIGHT JOIN
(EXCLUSIVA)
4 tuplas

Os modelos “207” e “300 C” estão cadastrados em Carros, mas não estão


associados a nenhuma Marca.
Junções em SQL – CROSS JOIN
A junção cross join irá unir todos os
registros da tabela MARCAS com Essa junção não pode
todos os registros da tabela CARROS, ser representada
graficamente pelo
formando um Produto Cartesiano. Diagrama de Venn!

Exemplo:

select m.nome, c.modelo


from marcas as m cross join carros as c
Junções em SQL – CROSS JOIN

Tabela Marcas
6 marcas

Tabela Carros
14 carros

...
CROSS JOIN
84 tuplas
Junções em SQL – FULL OUTER JOIN
A junção full outer join não é implementada no MySQL, mas pode-
se obter o mesmo resultado usando união de left join com right
join. Ou seja, ela irá mostrar todas as marcas e todos os carros,
independente de existir valores correspondente na tabela oposta.

select m.nome, c.modelo


from marcas as m left join carros as c on m.marca= c.marca
UNION
select m.nome, c.modelo
from marcas as m right join carros as c on m.marca= c.marca
left join UNIÃO right join
Junções em SQL – FULL OUTER JOIN

Tabela Marcas
6 marcas

Tabela Carros
14 carros

FULL OUTER JOIN


11 tuplas
Junções em SQL – FULL OUTER JOIN (EXCLUSIVA)

A junção full outer join (exclusiva) é a


união de left join (exclusiva) com
right join (exclusiva). Ou seja, ela irá
mostrar as marcas que não tem
correspondência na tabela Carros, além de
mostrar os carros que não tem correspondência na tabela Marcas.

select m.nome, c.modelo


from marcas as m left join carros as c on m.marca= c.marca
where c.marca is null
UNION
select m.nome, c.modelo
from marcas as m right join carros as c on m.marca= c.marca
where m.marca is null
LEFT JOIN (EXCLUSIVA)
3 tuplas UNIÃO RIGHT JOIN
(EXCLUSIVA)
4 tuplas
Junções em SQL – FULL OUTER JOIN (EXCLUSIVA)

Tabela Marcas
6 marcas

FULL OUTER JOIN


Tabela Carros (EXCLUSIVA)
14 carros 5 tuplas
Observações:
NATURAL JOIN: não precisa identificar quais colunas serão
comparadas, pois ele fará a comparação entre campos com mesmo
nome.

Pode substituir ON por USING quando o nome nas duas tabelas for
idêntico.

SELECT * FROM Marcas INNER JOIN Carros USING (marca);

O uso do INNER é opcional.

SELECT * FROM marcas INNER JOIN Carros USING (marca);


Exercício Fixação
Realizar as seguintes consultas utilizando a sintaxe SQL.
(apresentar também a tabela resultante)

• Listar os nomes de todos os programadores e os nomes de suas respectivas


empresas. Apresentar a consulta de três formas: junção na cláusula where,
conexão interna (inner join) e junção natural.

• Listar os nomes dos programadores que programam em pelo menos uma


linguagem cadastrada no banco, e saber quais são os nomes dessas
linguagens.

• Listar os nomes de todos os programadores e os nomes das linguagens que


eles programam. Observação: se o programador não estiver associado a
nenhuma linguagem de programação, no resultado da consulta deve constar
null no nome da linguagem de programação.

• Listar os nomes de todas as empresas e seus programadores, independente


se a empresa tem ou não programadores.

You might also like