Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
MySQL
SELECT <nome_da_tabela.nome_da_coluna [nome_da_tabela.nome_da_coluna... . . ]> FROM <nome_da_tabela, nome_da_tabela> WHERE <nome_da_tabela.nome_da_coluna [operador de join] nome_da_tabela.nome_da_coluna
INNER JOIN
Com o INNER JOIN sero includas somente as linhas
que satisfazem a condio do join. Problema: Ver os pedidos de cada cliente. Diagrama grfico:
CLIENTE Cdigo_do_cliente Nome_do_cliente Endereo Cidade CEP UF CGC IE PEDIDO Nmero_do_pedido Prazo_de_entrega Cdigo_do_cliente Cdigo_do_vendedor
MySQL
SELECT Cliente.nome_cliente, pedido.cod_cliente, pedido.num_pedido FROM cliente, pedido WHERE cliente.codigo_do_cliente = pedido.codigo_do_cliente
Sistemas de Apoio a Deciso Faculdade Alfa
Resultado:
Nome_Cliente Ana Ana Ana Ana Flvio Jorge Maurcio Rodolfo Rodolfo Rodolfo Beth Lvio Susana Susana Susana Susana Pedido.Codigo_do_cliente 720 720 720 720 870 110 830 410 410 410 20 180 260 260 260 260
Sistemas de Apoio a Deciso Faculdade Alfa
Pedido.num_pedido 97 101 137 148 189 104 203 121 98 127 143 105 111 103 91 138
MySQL
SELECT nome_cliente, pedido.cod_cliente, num_pedido FROM cliente, pedido
Resultado:
Nome_Cliente Ana Ana Ana Ana Flvio Flvio Flvio Flvio Jorge Jorge Jorge Jorge Lcia Lcia Lcia Pedido.Codigo_do_cliente 720 260 870 390 720 260 870 390 720 260 870 390 720 260 870 Pedido.num_pedido 97 111 54 119 97 111 54 119 97 111 54 119 97 111 54
Observa-se que no existe muito proveito do resultado desse tipo de JOIN, excetuando-se quando queremos fazer referncia cruzada entre duas tabelas e todas as suas linhas. Sistemas de Apoio a Deciso Faculdade Alfa
OUTER JOIN
Seleo em que so restritas as linhas que interessam em
uma tabela, mas so consideradas todas as linhas de outra tabela. Exemplo: Verificar quais clientes tem pedidos e quais no tm nenhum pedido. Pode ser utilizado s entre duas tabelas. Possui trs tipos de qualificadores:
LEFT OUTER JOIN inclui todas as linhas da tabela do primeiro nome de tabela (tabela mais esquerda da expresso). RIGHT OUTER JOIN inclui todas as linhas da tabela do segundo nome de tabela da expresso. FULL OUTER JOIN inclui as linhas que no satisfazem a expresso tanto da primeira tabela quanto da segunda tabela.
OUTER JOIN
Problema: Quais so os clientes que tm pedido e os que
no tm pedido. Diagrama grfico:
CLIENTE Cdigo_do_cliente Nome_do_cliente Endereo Cidade CEP UF CGC IE PEDIDO
*=
ANSI SQL
SELECT nome_cliente, pedido.cod_cliente, num_pedido FROM cliente LEFT OUTER JOIN pedido ON cliente.codigo_do_cliente = Pedido.codigo_do_cliente
Resultado:
Nome_Cliente Ana Ana Ana Ana Flvio Jorge Maurcio Rodolfo Rodolfo Rodolfo Beth Lcia Edmar Paulo Jos Pedido.Codigo_do_cliente 720 720 720 720 870 110 830 410 410 410 20 NULL NULL NULL NULL Pedido.num_pedido 97 101 137 148 189 104 203 121 98 127 143 NULL NULL NULL NULL
OUTER JOIN
Podemos utilizar as clusulas LIKE, NOT LIKE, IN, NOT
IN, NULL, NOT NULL e mistur-las com os operadores AND, OR e NOT, dentro de uma clusula WHERE na juno entre tabelas. Problema: Quais clientes tm prazo de entrega superior a 15 dias e pertencem aos estados de So Paulo (SP) ou Rio de Janeiro (RJ)?
OUTER JOIN
Diagrama grfico:
CLIENTE Cdigo_do_cliente Nome_do_cliente Endereo Cidade CEP UF CGC IE PEDIDO
> 15
IN (SP, RJ)
Resultado:
NOME CLIENTE Ana Maurcio Rodolfo Beth Susana UF RJ SP RJ SP RJ PRAZO ENTREGA 20 30 20 30 20
OUTER JOIN
Problema: Mostrar os clientes e seus respectivos prazos
de entrega, ordenados do maior para o menor. Diagrama grfico:
CLIENTE Cdigo_do_cliente Nome_do_cliente Endereo Cidade CEP UF CGC IE PEDIDO Nmero_do_pedido Prazo_de_entrega Cdigo_do_cliente Cdigo_do_vendedor
ORDER BY prazo_entrega DESC
Resultado:
NOME CLIENTE Jorge Maurcio Beth Sebastio Rodolfo Ana Susana Ana Flvio Lvio Renato Rodolfo PRAZO ENTREGA 30 30 30 30 20 20 20 15 15 15 15 10
MySQL
SELECT nome_cliente FROM cliente, pedido, item_pedido, produto WHERE Cliente.cod_cliente = Pedido.cod_cliente AND Pedido_num_pedido = Item_de_pedido.num_pedido AND Item_de_pedido.cod_produto = Produto.cod_produto AND Pedido.prazo_entrega > 15 AND Produto.Descrio = queijo AND Cliente.UF = RJ ORDER BY Cliente.nome_cliente;
Sistemas de Apoio a Deciso Faculdade Alfa
Resultado:
NOME CLIENTE Ana Rodolfo Susana
Sintaxe
SELECT descrio FROM produto WHERE cod_produto IN (SELECT cod_produto FROM item_pedido WHERE quantidade = 10)
Resultado:
DESCRIO Queijo Vinho Linho
Sintaxe
INSERT into produto VALUES (108, Parafuso, Kg, 1.25);
MySQL
INSERT cliente (cod_cliente, nome_cliente) SELECT cod_vendedor, nome_vendedor, COUNT(*) FROM vendedor, pedido WHERE Vendedor.cod_vendedor = Pedido.cod_vendedor HAVYNG COUNT(*) > 50
Exerccios
1. Listar todos os produtos com codigo, descries, nome de categoria e 2. 3. 4. 5. 6. 7. 8. 9.
preo; Listar da tabela USURIOS o nome do cliente e seu endereo; Listar o CDIGO do pedido, o cdigo do produto e a quantidade dos itens do pedido, cuja quantidade seja maior que 25; Quais os usurios que moram em Umuarama; Mostrar os pedidos criados no ms de janeiro de 2011; Listar o cdigo e a descrio dos produtos que tenham o valor unitrio na faixa de R$ 5,00 at R$ 32,00; Listar todos os produtos que tenham o seu nome comeando por Q; Mostrar os usurios com emails com @uol.com.br; Mostrar em ordem alfabtica a lista de usurios;
Exerccios
1. Listar os nomes, cidades e estados de todos os usurios, ordenados 2. 3. 4. 5. 6.
por estado e cidade de forma descendente Mostrar a quantidade total pedida para o produto VINHO de cdigo 78 na tabela item_de_pedido Listar o nmero de produtos que cada pedido contm Listar os pedidos que tm mais do que trs produtos Alterar o valor unitrio do produto parafuso de R$ 1.25 para R$ 1.62 Acrescentar 2,5% ao preo unitrio dos produtos