SQL: joins
Luiz Henrique Zambom Santana
22/09/2016
Agenda
● INNER JOIN
● OUTER (LEFT/RIGHT/FULL) JOIN
● NATURAL JOIN
● Operações sobre conjuntos
Relembrando...
Relembrando...
SQL Álgebra relacional
SELECT projeção
FROM produto
cartesiano
WHERE seleção
SELECT-FROM-WHERE
SELECT <projeção e funções>
FROM <lista de tabelas>
[ WHERE predicado ]
[ GROUP BY <atributos de agrupamento> ]
[ HAVING <condição para agrupamento> ]
[ ORDER BY <lista de atributos> ] ;
Joins
Produto cartesiano
● De forma geral, permite combinar informações de diversas tabelas.
● Exemplo:
SELECT nome, idade
FROM Medicos M, Consultas C
WHERE M.codm = C.codm
AND idade=40
FROM (Álgebra relacional)
Relação 1 x1
Relação 2 x2
… xn
Relação N
● O produto cartesiano, assim como na álgebra, faz uma união das colunas
e um produto das linhas.
● Relações ou resultados de alguma operação da álgebra relacional
separados por vírgula.
πnome, idade
(σidade> 40
(Medicos x Consultas))
Exercícios
1. Retornar Médicos e Funcionários que tenham o mesmo nome
2. Retornar uma lista de médicos que trabalham no ambulatório com
capacidade superior a 30
3. Retornar a quantidade de consultas realizadas por cada médico
4. Retornar o número máximo de consultas realizadas pelos pacientes
5. Retornar uma lista de consultas incluindo o nome do médico e do paciente
JOINS
● Comandos que combina o produto cartesiano com a operação de seleção da
álgebra relacional.
● A forma mais simples é o INNER JOIN, faz uma seleção baseada em uma
operação booleana sobre os atributos que aparecem nas relações.
SELECT *
FROM Medicos M
INNER JOIN Consultas C
ON M.codm=C.codm
WHERE M.idade=40
Junções (Álgebra relacional)
Relação 1 x1
Relação 2 x2
… xn
Relação N
● Relações ou resultados de alguma operação da álgebra relacional
separados por vírgula.
σnome=’Joao’
(Medicos xMedicos.codm=Consultas.codm
Consultas)
Exercícios
6. Retornar Médicos e Funcionários que tenham o mesmo nome
7. Retornar uma lista de Médicos que trabalham no ambulatório com
capacidade superior a 30
8. Retornar a quantidade de consultas realizadas por cada Médico
9. Retornar o número máximo de consultas realizadas pelos Pacientes
10. Retornar uma lista de consultas incluindo o nome do Médico e do Paciente
OUTER JOIN
● Uma variação que permite incluir também que não satisfazem as igualdades do ON
● Existem em três formas LEFT, RIGHT e FULL
● O LEFT OUTER JOIN permite retornar toda a tabela da esquerda do comando combinada aos
valores da tabela da direita ou valores nulos.
SELECT *
FROM Consultas C
LEFT OUTER
JOIN Medicos M
ON M.codm=C.codm
LEFT OUTER JOIN
LEFT OUTER (Álgebra relacional)
Relação L ⋊1
Relação R
● Mantém cada tupla de R na tabela de junção e preenche com valores nulos as tuplas de L que
não correspondem à coluna de junção em R.
σnome=’Joao’
(Medicos ⋊Medicos.codm=Consultas.codm
Consultas)
RIGHT OUTER JOIN
● Mesma operação do LEFT OUTER JOIN, com a diferença que a tabela
retornada de forma completa é a da direita do comando.
SELECT *
FROM Ambulatorios A
RIGHT OUTER
JOIN Medicos M
ON M.nroa=A.nroa
RIGHT OUTER (Álgebra relacional)
Relação L ⋉1
Relação R
● Mantém cada tupla de L na tabela de junção e preenche com valores nulos as tuplas de R que
não correspondem à coluna de junção em L
σnome=’Joao’
(Medicos ⋉Medicos.codm=Consultas.codm
Consultas)
FULL OUTER (Álgebra relacional)
Relação L ×1
Relação R
● Mantém cada tupla de R e de S na tabela de junção e preenche com valores nulos as tuplas
que não correspondem à coluna de junção
σnome=’Joao’
(Medicos ×Medicos.codm=Consultas.codm
Consultas)
NATURAL JOIN
● Realiza um JOIN nas colunas com o mesmo nome.
SELECT *
FROM Ambulatorios
NATURAL JOIN Medicos
NATURAL JOIN (Álgebra relacional)
Relação L ⋈ Relação R
● Realiza uma junção entre todos os atributos de mesmo
nome presentes em duas relações.
Ambulatorios ⋈ Medicos
Exercícios
11. Retornar a lista de Médicos e suas Consultas
12. Retornar uma lista de Pacientes e suas Consultas
13. Retornar os horários de consultas de cada Ambulatório
14. Retornar os horários de consultas de cada Médico
15. Retornar os horários de consultas de cada Paciente
Operações sobre conjuntos
SQL Álgebra relacional
UNION U
INTERSECT ⋂
EXCEPT -
UNION (Álgebra relacional)
Relação 1 U Relação 2
● Une os resultados de um conjunto de relações
σnome=’Joao’
(Medicos U Consulta)
União
● Permite combinar informações de diversas tabelas
● Exemplo:
SELECT nome,idade
FROM Medicos
UNION
SELECT nome,idade
FROM Funcionarios
INTERSECT (Álgebra relacional)
Relação 1 ∩ Relação 2
● Retorna apenas resultados que são iguais entre duas relações
πnome
(Medicos) ∩ πnome
(Funcionários)
Intersecção
● Retorna apenas resultados que são iguais entre duas relações
● Exemplo:
SELECT nome
FROM Medicos
INTERSECT
SELECT nome
FROM Funcionarios
EXCEPT(Álgebra relacional)
Relação 1 - Relação 2
● Retorna apenas resultados da Relação 1 que não estão na Relação 2
πnome
(Medicos) - πnome
(Funcionários)
Exceção
● Retorna apenas resultados que são iguais entre duas relações
● Exemplo:
SELECT nome
FROM Medicos
EXCEPT
SELECT nome
FROM Funcionarios
Exercícios
16. Usando UNION e INTERSECT, retornar Médicos e Pacientes que tenham o
mesmo nome
17. Retornar uma lista sem repetições de nomes de Pacientes, Funcionários e
Médicos
18. Retornar uma lista sem repetições de cidades de Pacientes, Funcionários e
Médicos
19. Retornar a média, máximo, mínimo de idade de Pacientes, Funcionários e
Médicos
20. Retornar todas cidades que possuem Médicos cadastrados, mas que não
possuem Pacientes
Resumo

SQL Joins

  • 1.
    SQL: joins Luiz HenriqueZambom Santana 22/09/2016
  • 2.
    Agenda ● INNER JOIN ●OUTER (LEFT/RIGHT/FULL) JOIN ● NATURAL JOIN ● Operações sobre conjuntos
  • 3.
  • 4.
    Relembrando... SQL Álgebra relacional SELECTprojeção FROM produto cartesiano WHERE seleção
  • 5.
    SELECT-FROM-WHERE SELECT <projeção efunções> FROM <lista de tabelas> [ WHERE predicado ] [ GROUP BY <atributos de agrupamento> ] [ HAVING <condição para agrupamento> ] [ ORDER BY <lista de atributos> ] ; Joins
  • 6.
    Produto cartesiano ● Deforma geral, permite combinar informações de diversas tabelas. ● Exemplo: SELECT nome, idade FROM Medicos M, Consultas C WHERE M.codm = C.codm AND idade=40
  • 7.
    FROM (Álgebra relacional) Relação1 x1 Relação 2 x2 … xn Relação N ● O produto cartesiano, assim como na álgebra, faz uma união das colunas e um produto das linhas. ● Relações ou resultados de alguma operação da álgebra relacional separados por vírgula. πnome, idade (σidade> 40 (Medicos x Consultas))
  • 8.
    Exercícios 1. Retornar Médicose Funcionários que tenham o mesmo nome 2. Retornar uma lista de médicos que trabalham no ambulatório com capacidade superior a 30 3. Retornar a quantidade de consultas realizadas por cada médico 4. Retornar o número máximo de consultas realizadas pelos pacientes 5. Retornar uma lista de consultas incluindo o nome do médico e do paciente
  • 9.
    JOINS ● Comandos quecombina o produto cartesiano com a operação de seleção da álgebra relacional. ● A forma mais simples é o INNER JOIN, faz uma seleção baseada em uma operação booleana sobre os atributos que aparecem nas relações. SELECT * FROM Medicos M INNER JOIN Consultas C ON M.codm=C.codm WHERE M.idade=40
  • 10.
    Junções (Álgebra relacional) Relação1 x1 Relação 2 x2 … xn Relação N ● Relações ou resultados de alguma operação da álgebra relacional separados por vírgula. σnome=’Joao’ (Medicos xMedicos.codm=Consultas.codm Consultas)
  • 11.
    Exercícios 6. Retornar Médicose Funcionários que tenham o mesmo nome 7. Retornar uma lista de Médicos que trabalham no ambulatório com capacidade superior a 30 8. Retornar a quantidade de consultas realizadas por cada Médico 9. Retornar o número máximo de consultas realizadas pelos Pacientes 10. Retornar uma lista de consultas incluindo o nome do Médico e do Paciente
  • 12.
    OUTER JOIN ● Umavariação que permite incluir também que não satisfazem as igualdades do ON ● Existem em três formas LEFT, RIGHT e FULL ● O LEFT OUTER JOIN permite retornar toda a tabela da esquerda do comando combinada aos valores da tabela da direita ou valores nulos. SELECT * FROM Consultas C LEFT OUTER JOIN Medicos M ON M.codm=C.codm
  • 13.
  • 14.
    LEFT OUTER (Álgebrarelacional) Relação L ⋊1 Relação R ● Mantém cada tupla de R na tabela de junção e preenche com valores nulos as tuplas de L que não correspondem à coluna de junção em R. σnome=’Joao’ (Medicos ⋊Medicos.codm=Consultas.codm Consultas)
  • 15.
    RIGHT OUTER JOIN ●Mesma operação do LEFT OUTER JOIN, com a diferença que a tabela retornada de forma completa é a da direita do comando. SELECT * FROM Ambulatorios A RIGHT OUTER JOIN Medicos M ON M.nroa=A.nroa
  • 16.
    RIGHT OUTER (Álgebrarelacional) Relação L ⋉1 Relação R ● Mantém cada tupla de L na tabela de junção e preenche com valores nulos as tuplas de R que não correspondem à coluna de junção em L σnome=’Joao’ (Medicos ⋉Medicos.codm=Consultas.codm Consultas)
  • 17.
    FULL OUTER (Álgebrarelacional) Relação L ×1 Relação R ● Mantém cada tupla de R e de S na tabela de junção e preenche com valores nulos as tuplas que não correspondem à coluna de junção σnome=’Joao’ (Medicos ×Medicos.codm=Consultas.codm Consultas)
  • 18.
    NATURAL JOIN ● Realizaum JOIN nas colunas com o mesmo nome. SELECT * FROM Ambulatorios NATURAL JOIN Medicos
  • 19.
    NATURAL JOIN (Álgebrarelacional) Relação L ⋈ Relação R ● Realiza uma junção entre todos os atributos de mesmo nome presentes em duas relações. Ambulatorios ⋈ Medicos
  • 20.
    Exercícios 11. Retornar alista de Médicos e suas Consultas 12. Retornar uma lista de Pacientes e suas Consultas 13. Retornar os horários de consultas de cada Ambulatório 14. Retornar os horários de consultas de cada Médico 15. Retornar os horários de consultas de cada Paciente
  • 21.
    Operações sobre conjuntos SQLÁlgebra relacional UNION U INTERSECT ⋂ EXCEPT -
  • 22.
    UNION (Álgebra relacional) Relação1 U Relação 2 ● Une os resultados de um conjunto de relações σnome=’Joao’ (Medicos U Consulta)
  • 23.
    União ● Permite combinarinformações de diversas tabelas ● Exemplo: SELECT nome,idade FROM Medicos UNION SELECT nome,idade FROM Funcionarios
  • 24.
    INTERSECT (Álgebra relacional) Relação1 ∩ Relação 2 ● Retorna apenas resultados que são iguais entre duas relações πnome (Medicos) ∩ πnome (Funcionários)
  • 25.
    Intersecção ● Retorna apenasresultados que são iguais entre duas relações ● Exemplo: SELECT nome FROM Medicos INTERSECT SELECT nome FROM Funcionarios
  • 26.
    EXCEPT(Álgebra relacional) Relação 1- Relação 2 ● Retorna apenas resultados da Relação 1 que não estão na Relação 2 πnome (Medicos) - πnome (Funcionários)
  • 27.
    Exceção ● Retorna apenasresultados que são iguais entre duas relações ● Exemplo: SELECT nome FROM Medicos EXCEPT SELECT nome FROM Funcionarios
  • 28.
    Exercícios 16. Usando UNIONe INTERSECT, retornar Médicos e Pacientes que tenham o mesmo nome 17. Retornar uma lista sem repetições de nomes de Pacientes, Funcionários e Médicos 18. Retornar uma lista sem repetições de cidades de Pacientes, Funcionários e Médicos 19. Retornar a média, máximo, mínimo de idade de Pacientes, Funcionários e Médicos 20. Retornar todas cidades que possuem Médicos cadastrados, mas que não possuem Pacientes
  • 29.