310 likes | 540 Views
Bancos de Dados. SQL 4 Ceça. Recuperando Dados de Várias Tabelas. Um banco de dados relacional é composto de várias tabelas Às vezes é necessário acessar simultaneamente tabelas relacionadas Conceito de Junção
E N D
Bancos de Dados SQL 4 Ceça
Recuperando Dados de Várias Tabelas • Um banco de dados relacional é composto de várias tabelas • Às vezes é necessário acessar simultaneamente tabelas relacionadas • Conceito de Junção • Em alguns casos, necessita-se realizar uma junção entre tabelas, e, extrair dessa junção as informações necessárias para responder à consulta originalmente formulada Ceça Moraes
Qualificadores de Nome • Um qualificador de nome é a composição formada pelo nome da tabela seguido de um ponto e o nome da coluna da tabela • PRODUTO.descrição • O qualificador da coluna descrição na tabela PRODUTO • Os qualificadores de nomes são usados em uma consulta de junção (join) entre tabelas • Relacionamentos entre tabelas podem ser feitos por chaves estrangeiras e isso implica na possibilidade de existência de colunas com o mesmo nome em tabelas diferentes Ceça Moraes
Sintaxe do JOIN • Sintaxe ANSI SQL • SELECT <tabela.coluna, tabela.coluna,...> • FROM tabela1 <tipo de join> tabela2 • ON <condição de junção> • WHERE <demais condições> • Sintaxe Microsoft • SELECT <tabela.coluna, tabela.coluna,...> • FROM tabela1, tabela2, .... • WHERE <condição de junção> • AND <demais condições>
Tipos de JOIN • INNER JOIN • Serão incluídas somente as linhas que satisfazem a condição do JOIN • CROSS JOIN • Incluímos cada uma das combinações de todas as linhas entre tabelas • OUTER JOIN • Incluímos as linhas que satisfazem à condição do JOIN e as linhas restantes de uma das tabelas do JOIN (que satisfazem ou não à condição) Ceça Moraes
INNER JOIN • Correspondências entre tabelas relacionadas Tabela Func Tabela Lotação Func.Matr = Lotacao.Matr
INNER JOIN • Sintaxe ANSI • Ver o nome e código do cliente, o código do pedido e prazo de entega para todos os clientes que fizeram pedidos SELECT Cliente.nomeCliente, Pedido.codigoCliente, Pedido.numPedido, prazoEntrega FROM Cliente INNER JOIN Pedido ON Cliente.codigoCliente = Pedido.codigoCliente
INNER JOIN • Sintaxe Microsoft • Ver o nome e código do cliente, o código do pedido e prazo de entega para todos os clientes que fizeram pedidos SELECT Cliente.nomeCliente, Pedido.codigoCliente, Pedido.numPedido, prazoEntrega FROM Cliente, Pedido WHERE Cliente.codigoCliente = Pedido.codigoCliente
INNER JOINResultado Ceça Moraes
INNER JOINOrdenando SELECT Cliente.nomeCliente, Pedido.codigoCliente, Pedido.numPedido, prazoEntrega FROM Cliente INNER JOIN Pedido ON Cliente.codigoCliente = Pedido.codigoCliente ORDER BY 1 OU SELECT Cliente.nomeCliente, Pedido.codigoCliente, Pedido.numPedido, prazoEntrega FROM Cliente, Pedido WHERE Cliente.codigoCliente = Pedido.codigoCliente ORDER BY 1
INNER JOINOrdenando Ceça Moraes
CROSS JOINProduto Cartesiano • Em um Cross Join entre duas tabelas, o resultado traz uma composição de cada linha das tabelas originais Tabela Func Tabela Lotação Ceça Moraes
CROSS JOINProduto Cartesiano • Juntar Clientes com Pedidos SELECT Cliente.codigoCliente, nomeCliente, Pedido.codigoCliente, numPedido FROM Cliente CROSS JOIN Pedido • Produto Cartesiano • A junção combina cada linha da tabela mais à esquerda com cada linha da tabela à direita da cláusula CROSS JOIN (Não tem condição de junção) • no MS Access SELECT Cliente.codigoCliente, nomeCliente, Pedido.codigoCliente, numPedido FROM Cliente, Pedido
Produto Cartesiano Ceça Moraes
Produto Cartesiano Ceça Moraes
OUTER JOIN • Queremos saber quais linhas estão relacionadas com a outra tabela e quais não estão • Localizar não-correspondências • É útil quando queremos verificar se existem membros órfãos em tabelas, ou seja, chave primária e chave estrangeira sem sincronia • Exemplo • Verificar quais clientes têm pedidos e quais não têm Ceça Moraes
Tipos de OUTER JOIN • Só pode ser realizado entre duas tabelas • LEFT OUTER JOIN • São incluídas todas as linhas da primeira tabela (esquerda) com ou sem correspondentes na segunda (direita) • RIGHT OUTER JOIN • São incluídas todas as linhas da segunda tabela (direita) com ou sem correspondentes na primeira (esquerda). Ceça Moraes
LEFT OUTER JOINExemplo • Quais são os clientes que têm pedidos e que não têm pedidos? SELECT Cliente.codigoCliente, nomeCliente, Pedido.codigoCliente, numPedido FROM Cliente LEFT OUTER JOIN Pedido ON Cliente.codigoCliente = Pedido.codigoCliente Ceça Moraes
LEFT OUTER JOINExemplo Ceça Moraes
LEFT OUTER JOINResultado Ceça Moraes
RIGHT OUTER JOINExemplo • Quais são os pedidos que têm clientes e os que não têm clientes? SELECT Cliente.codigoCliente, Cliente.nomeCliente, Pedido.codigoCliente, Pedido.numPedido FROM Cliente RIGHT OUTER JOIN Pedido ON Cliente.codigoCliente=Pedido.codigoCliente; Ceça Moraes
RIGHT OUTER JOINExemplo Ceça Moraes
RIGHT OUTER JOINExemplo Ceça Moraes
LEFT JOIN x RIGHT JOIN • Use uma operação LEFT JOIN para criar uma associação externa à esquerda. • Associações externas à esquerda incluem todos os registros da primeira (esquerda) de duas tabelas, mesmo quando não há valores coincidentes na segunda tabela (direita). • Use uma operação RIGHT JOIN para criar uma associação externa à direita. • Associações externas à direita incluem todos os registros da segunda (direita) de duas tabelas, mesmo quando não há valores coincidentes na primeira tabela (esquerda). Ceça Moraes
JOIN com WHERE • Listar nome, UF, código do cliente e número do pedido e prazo de entrega para os clientes que têm pedidos com prazo de entrega superior a 15 dias e pertencem aos estados SP ou RJ? SELECT Cliente.nomeCliente, Cliente.UF, Pedido.codigoCliente, Pedido.numPedido, Pedido.prazoEntrega FROM Cliente, Pedido WHERE Cliente.codigoCliente = Pedido.codigoCliente AND Cliente.UF IN("SP", "RJ") AND Pedido.prazoEntrega> 15;
JOIN com Operadores Resultado Ceça Moraes
Exercícios • Listar o nome, código do vendedor e o código do pedido para todos os vendedores que fizeram pedidos. • Quais são os vendedores que efetuaram pedidos e os que não efetuaram pedidos? • Que pedidos foram feitos por vendedores e quais os que não foram? Ordenar o resultado por nome do vendedor. • Quais vendedores pertencente às faixas salariais “B”e “C” têm pedidos com prazo de entrega superior a 20 dias?