1) O documento discute os processos de combinar dados de várias tabelas em uma query através de relações (joins) entre elas, como por exemplo listar empréstimos indicando o nome do amigo.
2) São explicados diferentes tipos de joins (inner, outer) que permitem obter registros relacionados e não relacionados entre tabelas.
3) O conceito de especialização/generalização é explicado no contexto de catalogar publicações em uma biblioteca com características comuns armazenadas em uma tabela geral e características específicas em tabel
1. Bases de dados: SQL Joins, especialização/
generalização
Carlos Santos
LabMM 4 - NTC - DeCA - UA
Aula 07, 07-03-2013
2. E como obter dados resultantes de várias tabelas?
Os processos de combinar dados de várias tabelas numa query são
suportados pelas relações (JOINS) existentes entre elas.
• exemplo: “listar todos os empréstimos indicando o nome do amigo”
amigos empres&mos
id_amigo nome telefone id_empres&mo data_empres&mo data_devolucao id_amigo
1 José
Mourinho 916545955 1 2010-‐02-‐23 2010-‐02-‐25 1
2 Jorge
Jesus 234545955 2 2010-‐04-‐11 2010-‐04-‐18
3 Domingos
Paciência 234897897 3 2010-‐03-‐13 2010-‐03-‐19 1
4 Vítor
Pereira 923435566 4 2010-‐05-‐21 2010-‐05-‐23 4
5 André
Villas-‐Boas 934975766 5 2010-‐06-‐25 2010-‐06-‐29
3. Joins
amigos empres&mos
id_amigo nome telefone id_empres&mo data_empres&mo data_devolucao id_amigo
1 José
Mourinho 916545955 1 2010-‐02-‐23 2010-‐02-‐25 1
2 Jorge
Jesus 234545955 2 2010-‐04-‐11 2010-‐04-‐18
3 Domingos
Paciência 234897897 3 2010-‐03-‐13 2010-‐03-‐19 1
4 Vítor
Pereira 923435566 4 2010-‐05-‐21 2010-‐05-‐23 4
5 André
Villas-‐Boas 934975766 5 2010-‐06-‐25 2010-‐06-‐29
amigos
sem
amigos
com emprés&mos
emprés&mos emprés&mos sem
amigos
registos registos
não
relacionados registos não
relacionados
relacionados
4. INNER JOIN (standard/exclusivo/natural)
Num join natural, um INNER JOIN, os dados resultantes de uma query são
apenas aqueles que podem ser relacionados entre as duas tabelas.
• SELECT nome_coluna(s)
FROM nome_tabela1
INNER JOIN nome_tabela2
ON nome_tabela1.nome_coluna=nome_tabela2.nome_coluna
...;
A ter em atenção:
• os campos mencionados na condição do join são a PK e FK que
estabelecem a relação entre as duas tabelas
• os dados da tabela “nome_tabela1” que não estão relacionados com
dados da tabela “nome_tabela2” não são retornados na query
• o inverso da última afirmação também é verdade
5. INNER JOIN
Exemplo: Selecionar todos os Amigos com Empréstimos
• SELECT MeusCDs.amigos.nome, MeusCDs.emprestimos.id_emprestimo
FROM MeusCDs.amigos
INNER JOIN MeusCDs.emprestimos
ON MeusCDs.amigos.id_amigo = MeusCDs.emprestimos.ref_id_amigos;
• SELECT amigos.nome, emprestimos.id_emprestimo
FROM amigos
INNER JOIN emprestimos
ON amigos.id_amigo = emprestimos.ref_id_amigos;
6. INNER JOIN
Exemplo: Selecionar todos os Amigos com Empréstimos
ATENÇÃO: as chaves
têm nomes diferentes
do modelo do slide
anterior!
• SELECT amigos.nome, emprestimos.id_emprestimo
FROM amigos
INNER JOIN emprestimos
ON amigos.id_amigo = emprestimos.id_amigo;
7. OUTER JOIN (inclusivos)
Os OUTER JOINS permitem obter os registos relacionados e os não
relacionados. Podem ser do tipo LEFT ou RIGHT, de acordo com o sentido
do JOIN.
• LEFT JOIN Mostra todos os registos relacionados
(Amigos com Empréstimos)
+
Registos não relacionados da tabela esquerda (tabela de partida): amigos
(Amigos sem Empréstimos)
• RIGHT JOIN Mostra todos os registos relacionados
(Amigos com Empréstimos)
+
Registos não relacionados da tabela direita (tabela de chegada):
emprestimos (Empréstimos sem Amigos)
8. LEFT OUTER JOIN
Exemplo: Seleccionar todos os amigos com empréstimos e todos os
amigos sem empréstimos
• SELECT amigos.nome, emprestimos.id_emprestimo
FROM amigos
LEFT JOIN emprestimos
ON amigos.id_amigo = emprestimos.id_amigo;
9. JOINS: exemplo 2
Considere-se um stand automóvel onde cada vendedor é responsável pela
venda de vários automóveis. No entanto, num dado momento, poderão
existir: vendedores sem automóveis atribuídos e automóveis sem
vendedor atribuído.
10. JOINS: exemplo 2
Selecionar todos os vendedores com carros atribuídos
• SELECT vendedores.Nome, automoveis.Marca, automoveis.Modelo
FROM vendedores
INNER JOIN automoveis
ON vendedores.idVENDEDORES = automoveis.VENDEDORES_idVENDEDORES
11. JOINS: exemplo 2
Selecionar todos os vendedores com e sem carros atribuídos
• SELECT vendedores.Nome, automoveis.Marca, automoveis.Modelo
FROM vendedores
LEFT JOIN automoveis
ON vendedores.idVENDEDORES =
automoveis.VENDEDORES_idVENDEDORES
12. JOINS: exemplo 2
Na tabela automóveis foram adicionados 2 novos registos (2 novos
automóveis) aos quais ainda não foi atribuído um vendedor.
Selecionar todos os vendedores com carros atribuídos e os carros sem
vendedor atribuído
• SELECT vendedores.Nome, automoveis.Marca, automoveis.Modelo
FROM vendedores
RIGHT JOIN automoveis
ON vendedores.idVENDEDORES =
automoveis.VENDEDORES_idVENDEDORES
13. JOINS: FULL JOIN no MySQL
Selecionar todos os vendedores com carros atribuídos e sem carros
atribuídos e todos os carros atribuídos e carros sem vendedor atribuído
• SELECT vendedores.Nome, automoveis.Marca, automoveis.Modelo
FROM vendedores
LEFT JOIN automoveis
ON vendedores.idVENDEDORES = automoveis.VENDEDORES_idVENDEDORES
UNION
SELECT vendedores.Nome, automoveis.Marca, automoveis.Modelo
FROM vendedores
RIGHT JOIN automoveis
ON vendedores.idVENDEDORES = automoveis.VENDEDORES_idVENDEDORES
14. JOINS: FULL JOIN no MySQL
Selecionar todos os vendedores com carros atribuídos e sem carros
atribuídos e todos os carros atribuídos e carros sem vendedor atribuído
15. Especialização/Generalização
Numa biblioteca pretende-se catalogar os vários tipo de publicações
(livros/monografias) e (revistas/periódicos) com um sistema de
numeração único
Tabela de generalização
Tabelas de especialização
16. Especialização/Generalização
As publicações são uma generalização dos conceitos monografias e
periódicos
• A tabela PUBLICACOES armazena as características comuns a todas as
publicações
As monografias e os periódicos são especializações do conceito
publicações
• As tabelas MONOGRAFIAS e PERIODICOS armazenam as características
específicas (especiais) de cada tipo de publicação
As monografias e periódicos “herdam” todas as características comuns
definidas em publicações