Elaboração de Consultas 3 de abril de 2006 Recuperação de Informação C1 : Listar os clientes que tem contatos cadastrados Cd_cliente CLIENTE Cd_cliente CONTATO C1 1. Select nm_cliente, nm_contato FROM cliente, contato Recuperação de Informação C1 : Listar os clientes que tem contatos cadastrados Cd_cliente Cd_cliente CLIENTE CONTATO 5 registros 15 registros 1-1 registro Junção na Igualdade 2. Select nm_cliente, nm_contato FROM cliente, contato WHERE cliente.cd_cliente = contato.cd_cliente Junções • • • • Junção Natural Junção na Igualdade Auto - Junção Junção Externa Junções segundo padrão SQL • • • • INNER LEFT [OUTER] RIGHT [OUTER] FULL [OUTER] Obs. cross join equivale ao Produto cartesiano ! Sintaxe geral de select SELECT [ALL | DISTINCT ] lista_campos FROM tabela1 tipo_JOIN tabela 2 ON tabela1.cd = tabela2.cd [ tipo_JOIN tabela3 ON tabela3.cd = tabela2.cd] Cross Join ( Produto cartesiano) SELECT nome_func, nome_depto, FROM funcionario, depto; SELECT nome_func, nome_depto, FROM funcionario CROSS JOIN depto; Produto Cartesiano C1 : Listar os clientes que tem contatos cadastrados CLIENTE CONTATO Maria, Aldeny Cd-cliente, nm_cliente 1 , Maria Cd-cliente, cd-contato, nm_contato 1 , 1, Aldeny Maria, Jose Maria, Antonio Maria, Ildefonso 2 , Joelma 1, 2, Jose Joelma, Aldeny 3 , Carlos 3, 1, Antonio Joelma, Jose Joelma, Antonio 4 , Andre 3, 2, Ildefonso Joelma, Ildefonso, ... 16 registros SELECT nm_cliente, nm_contato FROM cliente CROSS JOIN contato Natural Join ( Junção Natural) SELECT nome_func, nome_depto, FROM funcionario f, depto d WHERE d.cd_depto = f.cd_depto SELECT nome_func, nome_depto, FROM funcionario NATURAL JOIN depto; Campos de nome igual entre as tabelas serão condição de junção NATURAL JOIN C1 : Listar os clientes que tem contatos cadastrados CLIENTE Cd-cliente, nm_cliente CONTATO Cd-cliente, cd-contato, nm_contato 1 , Maria 1 , 1, Aldeny Maria, Aldeny 2 , Joelma 1, 2, Jose Maria, Jose 3 , Carlos 3, 1, Antonio Carlos, Antonio Carlos, Ildefonso 4 , Andre 3, 2, Ildefonso SELECT nm_cliente, nm_contato FROM cliente NATURAL JOIN contato INNER JOIN ( Junção na Igualdade) SELECT nome_func, nome_depto, FROM funcionario f, depto d WHERE d.cd_depto = f.cd_depto SELECT nome_func, nome_depto, FROM funcionario f INNER JOIN depto d ON d.cd_depto = f.cd_depto INNER JOIN ... ON... C1 : Listar os clientes que tem contatos cadastrados CLIENTE Cd-cliente, nm_cliente CONTATO Cd-cliente, cd-contato, nm_contato 1 , Maria 1 , 1, Aldeny Maria, Aldeny 2 , Joelma 1, 2, Jose Maria, Jose 3 , Carlos 3, 1, Antonio Carlos, Antonio Carlos, Ildefonso 4 , Andre 3, 2, Ildefonso SELECT nm_cliente, nm_contato FROM cliente INNER JOIN contato ON ( cliente.cd_cliente = contato.cd_cliente) INNER JOIN 2( Junção na Igualdade) SELECT nome_func, nome_depto, FROM funcionario f, depto d WHERE d.cd_depto = f.cd_depto SELECT nome_func, nome_depto, FROM funcionario f INNER JOIN depto d USING (cd_depto) Campos de nome igual permitem o USING INNER JOIN ... USING... C1 : Listar os clientes que tem contatos cadastrados CLIENTE Cd-cliente, nm_cliente CONTATO Cd-cliente, cd-contato, nm_contato 1 , Maria 1 , 1, Aldeny Maria, Aldeny 2 , Joelma 1, 2, Jose Maria, Jose 3 , Carlos 3, 1, Antonio Carlos, Antonio Carlos, Ildefonso 4 , Andre 3, 2, Ildefonso SELECT nm_cliente, nm_contato FROM cliente INNER JOIN contato USING(cd_cliente) Modelo Tratamento de N tabelas com JOIN • Listar nome do cliente e nome dos produtos por ele comprados ? • Atributos : nm_cliente, de_item • Tabelas: Cliente, Pedido, Item_pedido CLIENTE Cd-cliente, nm_cliente INNER JOIN ... PEDIDO ITEM_PEDIDO Cd-cliente, nr_pedido nr_pedido,nr_item,de_item 1, 1, ‘caneta’ 1 , Maria 1,1 2 , Joelma 1, 2 2,1, ‘camiseta’ 3 , Carlos 3, 3 2, 2, ‘sapato’ 4 , Andre 1,2,’lapis’ 3,1,’tinta’ 3, 4 3,2,’areia’ 4,1,’pincel’ (1) (2) SELECT nm_cliente, de_item FROM cliente INNER JOIN pedido USING (cd_cliente) INNER JOIN item_pedido USING (nr_pedido)