Junções sql
Aula 02
JUNÇÕES (JOINS)
Aula passada
Fizeram o exercício de revisão?
Alguém sem acesso ao domínio LAB_IMED ?
Testar VM_Oracle no VirtualBox do Laboratório!!
Junção Implícita
Expressa dentro da cláusula WHERE
Usando palavra reservadas
INNER JOIN
ON
Exemplo 1
SELECT m.nome, COUNT(c.data) AS qtdConsultas
FROM medico m, consulta c
WHERE m.codigo = c.codigo
GROUP BY m.nome
Exemplo 2
SELECT m.nome, COUNT(c.data) AS qtdConsultas
FROM medico m INNER JOIN consulta c
ON m.codigo = c.codigo
GROUP BY m.nome
Podemos utilizar apenas JOIN ou INNER JOIN
Resultado
Essa consulta lista médicos e a quantidade de consultas efetuadas por cada um
Caso um médico não tenha consulta, este não aparece no resultado
Esse é o objetivo do JOIN padrão!
Problema!
E se quisermos mostrar também os médicos que não possuem consultas ??
Teremos que usar outro tipo de join:
OUTER JOIN
Resultado esperado
Nome
Quantidade de consultas
Ana
10
Paulo
22
José
40
Everton
32
André
NULL
Francisco
NULL
Outer Join
SELECT m.nome, COUNT(c.data) AS qtdConsultas
FROM medico m LEFT OUTER JOIN consulta c
ON m.codigo = c.codigo
GROUP BY m.nome
Tipo de Outer Join
LEFT
RIGHT
FULL
Tipo de Outer Join
LEFT
Todos os dados da tabela da esquerda
RIGHT
Todos os dados da tabela da direita
FULL
Dados de ambas as tabelas LEFT OUTER JOIN
SELECT m.nome, COUNT(c.data) AS qtdConsultas
FROM medico m LEFT OUTER JOIN consulta c
ON m.codigo = c.codigo
GROUP BY m.nome
LEFT OUTER JOIN
Nome
Quantidade de consultas
Ana
10
Paulo
22
José
40
Everton
32
André
NULL
Francisco
NULL
Todos os dados da tabela da esquerda
RIGHT OUTER JOIN
SELECT c.data, c.hora, r.descricao
FROM consulta c RIGHT OUTER JOIN receita r
ON c.codReceita = r.codigo
RIGHT OUTER JOIN
Data
Hora
Descricao