Your SlideShare is downloading. ×
Junções e subconsultas
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Junções e subconsultas

6,042
views

Published on

Published in: Education

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,042
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
93
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Junções eSubconsultas Juliana Alvares
  • 2. JunçõesAs junções (joins) são ferramentas presentes na maioria dos bancosde dados que suportam SQL e são usadas quando precisamosrecuperar dados de uma ou mais tabelas com base em suas relaçõeslógicas. Desta forma, é possível combinar os registros de tais tabelasde forma a construir um “super registro”, que nos permitirá exibirrelatórios mais elaborados.
  • 3. JunçõesPara o bom entendimento de junções, vamos considerar duastabelas: filmes e generos. Aqui nós temos uma cardinalidade de 1 xN. Um filme possui um gênero, enquanto um gênero pode abrangervários filmes. Vamos começar criando estas duas tabelas (comececom a tabela generos, já que esta não depende da tabela de filmes):
  • 4. Junções Comando DLL CREATE TABLE para a tabela generos:CREATE TABLE generos( id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, nome VARCHAR(45) NOT NULL, PRIMARY KEY(id))ENGINE = InnoDB;
  • 5. JunçõesComando DLL CREATE TABLE para a tabela filmes:CREATE TABLE filmes( id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, titulo VARCHAR(45) NOT NULL, genero INTEGER UNSIGNED NOT NULL, PRIMARY KEY(id), CONSTRAINT fk_filmes_generos FOREIGN KEYfk_filmes_generos(id) REFERENCES generos(id) ON DELETE RESTRICT ONUPDATE RESTRICT)ENGINE = InnoDB;
  • 6. JunçõesVeja que a tabela filmes contém uma chave estrangeirareferenciando a chave primária da tabela generos. Isso nos permite“atrelar” um filme ao seu gênero. Após inserir dados na tabelageneros e na tabela filme, observe o resultado de um comando DMLSELECT na tabela filmes:
  • 7. JunçõesSELECT * FROM filmes;id titulo genero1 EFEITO BORBOLETA 62 O PENTELHO 13 VIAGEM MALDITA 3Nesta query o gênero é retornado como um valor inteiro, ou seja, ovalor do campo id da tabela generos. Em muitos casos este não é ocomportamento que queremos. Em vez do id do gênero nósgostaríamos de exibir seu nome. Isso pode ser conseguido daseguinte forma:
  • 8. JunçõesSELECT filmes.id, filmes.titulo, generos.nome FROM filmes,generos WHERE filmes.genero = generos.id;id titulo genero1 EFEITO BORBOLETA FICÇÃO2 O PENTELHO COMÉDIA3 VIAGEM MALDITA TERRORNesta query eu usei o nome completo da tabela antes do nome doscampos a serem retornados. Na prática, é comum darmos apelidosàs tabelas. Veja:SELECT f.id, f.titulo, g.nome FROM filmes f, generos g WHEREf.genero = g.id;
  • 9. SubconsultasUma subconsulta é uma instrução SELECT adicionada dentro deuma instrução SELECT, SELECT...INTO, INSERT...INTO,DELETE, ou UPDATE ou dentro de outra subconsulta. Podeutilizar três formas de sintaxe para criar uma subconsulta:
  • 10. Subconsultascomparação [ANY | ALL | SOME] (instrução sql) expressão[NOT] IN (instrução sql) [NOT] EXISTS (instrução sql)Onde:Comparação: É uma expressão e um operador de comparação quecompara a expressão com o resultado da subconsulta.Expressão: É uma expressão pela qual se busca o conjuntoresultante da subconsulta.Instrução SQL: É uma instrução SELECT, que segue o mesmoformato e regras que qualquer outra SELECT. Deve ir entreparênteses.
  • 11. SubconsultasPode-se utilizar uma subconsulta no lugar de uma expressão na listade campos de uma instrução SELECT ou em uma cláusula WHERE ou HAVING. Em uma subconsulta, se utiliza uma instrução SELECT para proporcionar um conjunto de um ou mais valores especificados para avaliar na expressão da cláusula WHERE ou HAVING.
  • 12. Subconsultas Pode-se utilizar o predicado ANY ou SOME, os quais são sinônimos, para recuperar registros da consulta principal, quesatisfaçam a comparação com qualquer outro registro recuperado na subconsulta. O exemplo seguinte devolve todos os produtos cujopreço unitário for maior que o de qualquer produto vendido com um desconto igual ou maior ao 25 por cento:
  • 13. SubconsultasSELECT *FROM ProdutosWHERE PrecoUnidade >= ANY ( SELECT PrecoUnidade FROM DetalhePedido WHERE Desconto = 0 .25)
  • 14. SubconsultasO predicado ALL se utiliza para recuperar unicamente aquelesregistros da consulta principal que satisfazem a comparação comtodos os registros recuperados na subconsulta. Se se muda ANY porALL no exemplo anterior, a consulta devolverá unicamente aquelesprodutos cujo preço unitário for maior que o de todos os produtosvendidos com um desconto igual ou maior ao 25 por cento. Isto émuito mais restritivo.
  • 15. Subconsultas O predicado IN se emprega para recuperar unicamente aqueles registros da consulta principal para os que alguns registros da subconsulta contém um valor igual. O exemplo seguinte devolvetodos os produtos vendidos com um desconto igual a 25 por cento:
  • 16. SubconsultasSELECT *FROM ProdutosWHERE IDProduto IN ( SELECT IDProduto FROM DetalhePedido WHERE Desconto = 0.25)
  • 17. SubconsultasInversamente, pode-se utilizar NOT IN para recuperar unicamenteaqueles registros da consulta principal para os que não têm nenhumregistro da subconsulta que contenha um valor igual.O predicado EXISTS (com palavra reservada NOT opcional) seutiliza em comparações de verdade/falso para determinar se asubconsulta devolve algum registro. Suponhamos que desejamosrecuperar todos aqueles clientes que tiverem realizado pelo menosum pedido:
  • 18. SubconsultasSELECT Clientes.Companhia, Clientes.TelefoneFROM ClientesWHERE EXISTS ( SELECT FROM Pedidos WHERE Pedidos.IdPedido = Clientes.IdCliente)

×