SlideShare uma empresa Scribd logo
Junções e
Subconsultas


       Juliana Alvares
Junções

As junções (joins) são ferramentas presentes na maioria dos bancos
de dados que suportam SQL e são usadas quando precisamos
recuperar dados de uma ou mais tabelas com base em suas relações
lógicas. Desta forma, é possível combinar os registros de tais tabelas
de forma a construir um “super registro”, que nos permitirá exibir
relatórios mais elaborados.
Junções


Para o bom entendimento de junções, vamos considerar duas
tabelas: filmes e generos. Aqui nós temos uma cardinalidade de 1 x
N. Um filme possui um gênero, enquanto um gênero pode abranger
vários filmes. Vamos começar criando estas duas tabelas (comece
com a tabela generos, já que esta não depende da tabela de filmes):
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;
Junções
Comando 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 KEY
fk_filmes_generos(id)
   REFERENCES generos(id) ON DELETE RESTRICT ON
UPDATE RESTRICT
)
ENGINE = InnoDB;
Junções


Veja que a tabela filmes contém uma chave estrangeira
referenciando a chave primária da tabela generos. Isso nos permite
“atrelar” um filme ao seu gênero. Após inserir dados na tabela
generos e na tabela filme, observe o resultado de um comando DML
SELECT na tabela filmes:
Junções
SELECT * FROM filmes;

id   titulo                      genero
1    EFEITO BORBOLETA           6
2    O PENTELHO                 1
3    VIAGEM MALDITA             3

Nesta query o gênero é retornado como um valor inteiro, ou seja, o
valor do campo id da tabela generos. Em muitos casos este não é o
comportamento que queremos. Em vez do id do gênero nós
gostaríamos de exibir seu nome. Isso pode ser conseguido da
seguinte forma:
Junções
SELECT filmes.id, filmes.titulo, generos.nome FROM filmes,
generos WHERE filmes.genero = generos.id;

id   titulo                       genero
1    EFEITO BORBOLETA             FICÇÃO
2    O PENTELHO                   COMÉDIA
3    VIAGEM MALDITA               TERROR

Nesta query eu usei o nome completo da tabela antes do nome dos
campos a serem retornados. Na prática, é comum darmos apelidos
às tabelas. Veja:

SELECT f.id, f.titulo, g.nome FROM filmes f, generos g WHERE
f.genero = g.id;
Subconsultas

Uma subconsulta é uma instrução SELECT adicionada dentro de
uma    instrução   SELECT,      SELECT...INTO,      INSERT...INTO,
DELETE, ou UPDATE ou dentro de outra subconsulta. Pode
utilizar três formas de sintaxe para criar uma subconsulta:
Subconsultas
comparaçã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 que
compara a expressão com o resultado da subconsulta.
Expressão: É uma expressão pela qual se busca o conjunto
resultante da subconsulta.
Instrução SQL: É uma instrução SELECT, que segue o mesmo
formato e regras que qualquer outra SELECT. Deve ir entre
parênteses.
Subconsultas
Pode-se utilizar uma subconsulta no lugar de uma expressão na lista
de 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.
Subconsultas

    Pode-se utilizar o predicado ANY ou SOME, os quais são
   sinônimos, para recuperar registros da consulta principal, que
satisfaçam a comparação com qualquer outro registro recuperado na
 subconsulta. O exemplo seguinte devolve todos os produtos cujo
preço unitário for maior que o de qualquer produto vendido com um
             desconto igual ou maior ao 25 por cento:
Subconsultas
SELECT *
FROM
  Produtos
WHERE
  PrecoUnidade >=
  ANY
  (
  SELECT
    PrecoUnidade
  FROM
    DetalhePedido
  WHERE
    Desconto = 0 .25
)
Subconsultas

O predicado ALL se utiliza para recuperar unicamente aqueles
registros da consulta principal que satisfazem a comparação com
todos os registros recuperados na subconsulta. Se se muda ANY por
ALL no exemplo anterior, a consulta devolverá unicamente aqueles
produtos cujo preço unitário for maior que o de todos os produtos
vendidos com um desconto igual ou maior ao 25 por cento. Isto é
muito mais restritivo.
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 devolve
todos os produtos vendidos com um desconto igual a 25 por cento:
Subconsultas
SELECT *
FROM
   Produtos
WHERE
  IDProduto
   IN
  (
   SELECT
  IDProduto
  FROM
   DetalhePedido
  WHERE
  Desconto = 0.25
)
Subconsultas
Inversamente, pode-se utilizar NOT IN para recuperar unicamente
aqueles registros da consulta principal para os que não têm nenhum
registro da subconsulta que contenha um valor igual.
O predicado EXISTS (com palavra reservada NOT opcional) se
utiliza em comparações de verdade/falso para determinar se a
subconsulta devolve algum registro. Suponhamos que desejamos
recuperar todos aqueles clientes que tiverem realizado pelo menos
um pedido:
Subconsultas
SELECT
   Clientes.Companhia, Clientes.Telefone
FROM
  Clientes
WHERE EXISTS (
  SELECT
  FROM
   Pedidos
  WHERE
   Pedidos.IdPedido = Clientes.IdCliente
)

Mais conteúdo relacionado

Mais procurados

Curso java 05 - herança, classes e métodos abstratos
Curso java   05 - herança, classes e métodos abstratosCurso java   05 - herança, classes e métodos abstratos
Curso java 05 - herança, classes e métodos abstratos
Maurício Linhares
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
Adriano Teixeira de Souza
 
Implementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel PimentelImplementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel Pimentel
Manoel Pimentel Medeiros
 

Mais procurados (20)

Introdução ao Spring Framework MVC
Introdução ao Spring Framework MVCIntrodução ao Spring Framework MVC
Introdução ao Spring Framework MVC
 
Estrutura de dados - Filas
Estrutura de dados - FilasEstrutura de dados - Filas
Estrutura de dados - Filas
 
Javascript aula 01 - visão geral
Javascript   aula 01 - visão geralJavascript   aula 01 - visão geral
Javascript aula 01 - visão geral
 
Optional in Java 8
Optional in Java 8Optional in Java 8
Optional in Java 8
 
Aula 11 banco de dados
Aula 11   banco de dadosAula 11   banco de dados
Aula 11 banco de dados
 
Curso java 05 - herança, classes e métodos abstratos
Curso java   05 - herança, classes e métodos abstratosCurso java   05 - herança, classes e métodos abstratos
Curso java 05 - herança, classes e métodos abstratos
 
Java script - funções
Java script - funçõesJava script - funções
Java script - funções
 
Pesquisa e Ordenação - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
Pesquisa e Ordenação - Aula 12 - Pesquisa de Dados (Sequencial e Binária)Pesquisa e Ordenação - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
Pesquisa e Ordenação - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
 
Aula 07 - lista linear
Aula 07 - lista linearAula 07 - lista linear
Aula 07 - lista linear
 
POO - Aula 10 - Polimorfismo
POO - Aula 10 - PolimorfismoPOO - Aula 10 - Polimorfismo
POO - Aula 10 - Polimorfismo
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Aula5 normalização
Aula5   normalizaçãoAula5   normalização
Aula5 normalização
 
Interfaces e polimorfismo
Interfaces e polimorfismoInterfaces e polimorfismo
Interfaces e polimorfismo
 
Comandos DDL para o MySQL
Comandos DDL para o MySQLComandos DDL para o MySQL
Comandos DDL para o MySQL
 
Java - Primeiros passos
Java - Primeiros passosJava - Primeiros passos
Java - Primeiros passos
 
Java: Manipulação de Arquivos
Java:  Manipulação  de ArquivosJava:  Manipulação  de Arquivos
Java: Manipulação de Arquivos
 
Implementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel PimentelImplementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel Pimentel
 
Aula15 - Array PHP
Aula15 - Array PHPAula15 - Array PHP
Aula15 - Array PHP
 
POO - 19 - Elementos Estáticos
POO - 19 - Elementos EstáticosPOO - 19 - Elementos Estáticos
POO - 19 - Elementos Estáticos
 

Destaque

Replicacao Object Sistemas
Replicacao Object SistemasReplicacao Object Sistemas
Replicacao Object Sistemas
taniamaciel
 
Canvi climàtic: Efectes i percepció social
Canvi climàtic: Efectes i percepció socialCanvi climàtic: Efectes i percepció social
Canvi climàtic: Efectes i percepció social
Josep Lluís Ruiz
 
Tema 3 Dissolucions 1er batxillerat
Tema 3 Dissolucions 1er batxilleratTema 3 Dissolucions 1er batxillerat
Tema 3 Dissolucions 1er batxillerat
mmarti61
 
La Variació Lingüística
La Variació LingüísticaLa Variació Lingüística
La Variació Lingüística
Epsa Llengues
 
Unitat 2 la revolució industrial 2017-18
Unitat 2   la revolució industrial 2017-18Unitat 2   la revolució industrial 2017-18
Unitat 2 la revolució industrial 2017-18
jordimanero
 

Destaque (20)

Manual de Usuário - TCC André Luiz Jamarino Abekawa
Manual de Usuário - TCC André Luiz Jamarino AbekawaManual de Usuário - TCC André Luiz Jamarino Abekawa
Manual de Usuário - TCC André Luiz Jamarino Abekawa
 
ADO.NET
ADO.NETADO.NET
ADO.NET
 
Java - Introdução a banco de dados
Java - Introdução a banco de dadosJava - Introdução a banco de dados
Java - Introdução a banco de dados
 
Replicacao Object Sistemas
Replicacao Object SistemasReplicacao Object Sistemas
Replicacao Object Sistemas
 
Minicurso de Cakephp
Minicurso de CakephpMinicurso de Cakephp
Minicurso de Cakephp
 
Apostila PhP com Wamp, 2a. parte
Apostila PhP com Wamp, 2a. parteApostila PhP com Wamp, 2a. parte
Apostila PhP com Wamp, 2a. parte
 
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
 
Agile Management
Agile ManagementAgile Management
Agile Management
 
area econòmica i patrimonial
area econòmica i patrimonialarea econòmica i patrimonial
area econòmica i patrimonial
 
Lliço5 Cinèticaquímica
Lliço5 CinèticaquímicaLliço5 Cinèticaquímica
Lliço5 Cinèticaquímica
 
Canvi climàtic: Efectes i percepció social
Canvi climàtic: Efectes i percepció socialCanvi climàtic: Efectes i percepció social
Canvi climàtic: Efectes i percepció social
 
Arquitectura de Computadores (II Bimestre)
Arquitectura de Computadores (II Bimestre)Arquitectura de Computadores (II Bimestre)
Arquitectura de Computadores (II Bimestre)
 
Tema 3 Dissolucions 1er batxillerat
Tema 3 Dissolucions 1er batxilleratTema 3 Dissolucions 1er batxillerat
Tema 3 Dissolucions 1er batxillerat
 
Les propietats dels materials i els assaigs d'estudi
Les propietats dels materials i els assaigs d'estudiLes propietats dels materials i els assaigs d'estudi
Les propietats dels materials i els assaigs d'estudi
 
Tema15
Tema15Tema15
Tema15
 
1c-EL SEXENNI DEMOCRÀTIC
1c-EL SEXENNI DEMOCRÀTIC1c-EL SEXENNI DEMOCRÀTIC
1c-EL SEXENNI DEMOCRÀTIC
 
La Variació Lingüística
La Variació LingüísticaLa Variació Lingüística
La Variació Lingüística
 
La població espanyola. (2) Els contrasts territorials
La població espanyola. (2) Els contrasts territorialsLa població espanyola. (2) Els contrasts territorials
La població espanyola. (2) Els contrasts territorials
 
Unitat 2 la revolució industrial 2017-18
Unitat 2   la revolució industrial 2017-18Unitat 2   la revolució industrial 2017-18
Unitat 2 la revolució industrial 2017-18
 
Increment strategy ppt 2013 14
Increment strategy ppt 2013 14Increment strategy ppt 2013 14
Increment strategy ppt 2013 14
 

Semelhante a Junções e subconsultas

Principais instruções em sql
Principais instruções em sqlPrincipais instruções em sql
Principais instruções em sql
Charleston Anjos
 
Modelagem relacional e normalização de dados
Modelagem relacional e normalização de dadosModelagem relacional e normalização de dados
Modelagem relacional e normalização de dados
julianaveregue
 
Techideias excel avançado v2012
Techideias excel avançado v2012Techideias excel avançado v2012
Techideias excel avançado v2012
Tech Ideias
 

Semelhante a Junções e subconsultas (20)

Consultas SQL
Consultas SQLConsultas SQL
Consultas SQL
 
Aula 10 banco de dados
Aula 10   banco de dadosAula 10   banco de dados
Aula 10 banco de dados
 
12 SQL - Junções / Join
12 SQL - Junções / Join12 SQL - Junções / Join
12 SQL - Junções / Join
 
Aula 11 banco de dados
Aula 11   banco de dadosAula 11   banco de dados
Aula 11 banco de dados
 
UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6
UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6
UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6
 
Principais instruções em sql
Principais instruções em sqlPrincipais instruções em sql
Principais instruções em sql
 
TOTVS LINHA RM TREINAMENTO SQL
TOTVS LINHA RM TREINAMENTO SQLTOTVS LINHA RM TREINAMENTO SQL
TOTVS LINHA RM TREINAMENTO SQL
 
Excel Intermediário
Excel IntermediárioExcel Intermediário
Excel Intermediário
 
Sql linguagem
Sql linguagemSql linguagem
Sql linguagem
 
Modelagem relacional e normalização de dados
Modelagem relacional e normalização de dadosModelagem relacional e normalização de dados
Modelagem relacional e normalização de dados
 
Fundamentos de SQL - Parte 6 de 8
Fundamentos de SQL - Parte 6 de 8Fundamentos de SQL - Parte 6 de 8
Fundamentos de SQL - Parte 6 de 8
 
Aprofundamento de DDL e DML
Aprofundamento de DDL e DMLAprofundamento de DDL e DML
Aprofundamento de DDL e DML
 
BD I - Aula 14 A - Limitando Conj Dados e Sub Selects
BD I - Aula 14 A - Limitando Conj Dados e Sub SelectsBD I - Aula 14 A - Limitando Conj Dados e Sub Selects
BD I - Aula 14 A - Limitando Conj Dados e Sub Selects
 
Fundamentos de SQL - Parte 1 de 8
Fundamentos de SQL - Parte 1 de 8Fundamentos de SQL - Parte 1 de 8
Fundamentos de SQL - Parte 1 de 8
 
Fundamentos de SQL - Parte 3 de 8
Fundamentos de SQL - Parte 3 de 8Fundamentos de SQL - Parte 3 de 8
Fundamentos de SQL - Parte 3 de 8
 
MYSQL - TLBDII
MYSQL - TLBDIIMYSQL - TLBDII
MYSQL - TLBDII
 
Sql junções
Sql junçõesSql junções
Sql junções
 
Inner Join
Inner JoinInner Join
Inner Join
 
Techideias excel avançado v2012
Techideias excel avançado v2012Techideias excel avançado v2012
Techideias excel avançado v2012
 
Aula1
Aula1Aula1
Aula1
 

Último

INTRODUÇÃO A ARQUEOLOGIA BÍBLICA [BIBLIOLOGIA]]
INTRODUÇÃO A ARQUEOLOGIA BÍBLICA [BIBLIOLOGIA]]INTRODUÇÃO A ARQUEOLOGIA BÍBLICA [BIBLIOLOGIA]]
INTRODUÇÃO A ARQUEOLOGIA BÍBLICA [BIBLIOLOGIA]]
ESCRIBA DE CRISTO
 
O QUINZE.pdf livro lidokkkkkkkkkkkkkkkkkkkk
O QUINZE.pdf livro lidokkkkkkkkkkkkkkkkkkkkO QUINZE.pdf livro lidokkkkkkkkkkkkkkkkkkkk
O QUINZE.pdf livro lidokkkkkkkkkkkkkkkkkkkk
LisaneWerlang
 
AS COLUNAS B E J E SUAS POSICOES CONFORME O RITO.pdf
AS COLUNAS B E J E SUAS POSICOES CONFORME O RITO.pdfAS COLUNAS B E J E SUAS POSICOES CONFORME O RITO.pdf
AS COLUNAS B E J E SUAS POSICOES CONFORME O RITO.pdf
ssuserbb4ac2
 

Último (20)

Slides Lição 9, Betel, Ordenança para uma vida de santificação, 2Tr24.pptx
Slides Lição 9, Betel, Ordenança para uma vida de santificação, 2Tr24.pptxSlides Lição 9, Betel, Ordenança para uma vida de santificação, 2Tr24.pptx
Slides Lição 9, Betel, Ordenança para uma vida de santificação, 2Tr24.pptx
 
Fotossíntese para o Ensino médio primeiros anos
Fotossíntese para o Ensino médio primeiros anosFotossíntese para o Ensino médio primeiros anos
Fotossíntese para o Ensino médio primeiros anos
 
Apresentação sobre as etapas do desenvolvimento infantil
Apresentação sobre as etapas do desenvolvimento infantilApresentação sobre as etapas do desenvolvimento infantil
Apresentação sobre as etapas do desenvolvimento infantil
 
Slides Lição 8, Betel, Ordenança para confessar os pecados e perdoar as ofens...
Slides Lição 8, Betel, Ordenança para confessar os pecados e perdoar as ofens...Slides Lição 8, Betel, Ordenança para confessar os pecados e perdoar as ofens...
Slides Lição 8, Betel, Ordenança para confessar os pecados e perdoar as ofens...
 
00Certificado - MBA - Gestão de projetos
00Certificado - MBA - Gestão de projetos00Certificado - MBA - Gestão de projetos
00Certificado - MBA - Gestão de projetos
 
Slides Lição 9, CPAD, Resistindo à Tentação no Caminho, 2Tr24.pptx
Slides Lição 9, CPAD, Resistindo à Tentação no Caminho, 2Tr24.pptxSlides Lição 9, CPAD, Resistindo à Tentação no Caminho, 2Tr24.pptx
Slides Lição 9, CPAD, Resistindo à Tentação no Caminho, 2Tr24.pptx
 
INTRODUÇÃO A ARQUEOLOGIA BÍBLICA [BIBLIOLOGIA]]
INTRODUÇÃO A ARQUEOLOGIA BÍBLICA [BIBLIOLOGIA]]INTRODUÇÃO A ARQUEOLOGIA BÍBLICA [BIBLIOLOGIA]]
INTRODUÇÃO A ARQUEOLOGIA BÍBLICA [BIBLIOLOGIA]]
 
Multiplicação - Caça-número
Multiplicação - Caça-número Multiplicação - Caça-número
Multiplicação - Caça-número
 
Exercícios de Clima no brasil e no mundo.pdf
Exercícios de Clima no brasil e no mundo.pdfExercícios de Clima no brasil e no mundo.pdf
Exercícios de Clima no brasil e no mundo.pdf
 
Poema - Reciclar é preciso
Poema            -        Reciclar é precisoPoema            -        Reciclar é preciso
Poema - Reciclar é preciso
 
Hans Kelsen - Teoria Pura do Direito - Obra completa.pdf
Hans Kelsen - Teoria Pura do Direito - Obra completa.pdfHans Kelsen - Teoria Pura do Direito - Obra completa.pdf
Hans Kelsen - Teoria Pura do Direito - Obra completa.pdf
 
Apresentação de vocabulário fundamental em contexto de atendimento
Apresentação de vocabulário fundamental em contexto de atendimentoApresentação de vocabulário fundamental em contexto de atendimento
Apresentação de vocabulário fundamental em contexto de atendimento
 
hereditariedade é variabilidade genetic
hereditariedade é variabilidade  genetichereditariedade é variabilidade  genetic
hereditariedade é variabilidade genetic
 
ATPCG 27.05 - Recomposição de aprendizagem.pptx
ATPCG 27.05 - Recomposição de aprendizagem.pptxATPCG 27.05 - Recomposição de aprendizagem.pptx
ATPCG 27.05 - Recomposição de aprendizagem.pptx
 
Apresentação Formação em Prevenção ao Assédio
Apresentação Formação em Prevenção ao AssédioApresentação Formação em Prevenção ao Assédio
Apresentação Formação em Prevenção ao Assédio
 
04_GuiaDoCurso_Neurociência, Psicologia Positiva e Mindfulness.pdf
04_GuiaDoCurso_Neurociência, Psicologia Positiva e Mindfulness.pdf04_GuiaDoCurso_Neurociência, Psicologia Positiva e Mindfulness.pdf
04_GuiaDoCurso_Neurociência, Psicologia Positiva e Mindfulness.pdf
 
O QUINZE.pdf livro lidokkkkkkkkkkkkkkkkkkkk
O QUINZE.pdf livro lidokkkkkkkkkkkkkkkkkkkkO QUINZE.pdf livro lidokkkkkkkkkkkkkkkkkkkk
O QUINZE.pdf livro lidokkkkkkkkkkkkkkkkkkkk
 
AS COLUNAS B E J E SUAS POSICOES CONFORME O RITO.pdf
AS COLUNAS B E J E SUAS POSICOES CONFORME O RITO.pdfAS COLUNAS B E J E SUAS POSICOES CONFORME O RITO.pdf
AS COLUNAS B E J E SUAS POSICOES CONFORME O RITO.pdf
 
O que é uma Revolução Solar. tecnica preditiva
O que é uma Revolução Solar. tecnica preditivaO que é uma Revolução Solar. tecnica preditiva
O que é uma Revolução Solar. tecnica preditiva
 
Os Padres de Assaré - CE. Prof. Francisco Leite
Os Padres de Assaré - CE. Prof. Francisco LeiteOs Padres de Assaré - CE. Prof. Francisco Leite
Os Padres de Assaré - CE. Prof. Francisco Leite
 

Junções e subconsultas

  • 1. Junções e Subconsultas Juliana Alvares
  • 2. Junções As junções (joins) são ferramentas presentes na maioria dos bancos de dados que suportam SQL e são usadas quando precisamos recuperar dados de uma ou mais tabelas com base em suas relações lógicas. Desta forma, é possível combinar os registros de tais tabelas de forma a construir um “super registro”, que nos permitirá exibir relatórios mais elaborados.
  • 3. Junções Para o bom entendimento de junções, vamos considerar duas tabelas: filmes e generos. Aqui nós temos uma cardinalidade de 1 x N. Um filme possui um gênero, enquanto um gênero pode abranger vários filmes. Vamos começar criando estas duas tabelas (comece com 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ções Comando 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 KEY fk_filmes_generos(id) REFERENCES generos(id) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB;
  • 6. Junções Veja que a tabela filmes contém uma chave estrangeira referenciando a chave primária da tabela generos. Isso nos permite “atrelar” um filme ao seu gênero. Após inserir dados na tabela generos e na tabela filme, observe o resultado de um comando DML SELECT na tabela filmes:
  • 7. Junções SELECT * FROM filmes; id titulo genero 1 EFEITO BORBOLETA 6 2 O PENTELHO 1 3 VIAGEM MALDITA 3 Nesta query o gênero é retornado como um valor inteiro, ou seja, o valor do campo id da tabela generos. Em muitos casos este não é o comportamento que queremos. Em vez do id do gênero nós gostaríamos de exibir seu nome. Isso pode ser conseguido da seguinte forma:
  • 8. Junções SELECT filmes.id, filmes.titulo, generos.nome FROM filmes, generos WHERE filmes.genero = generos.id; id titulo genero 1 EFEITO BORBOLETA FICÇÃO 2 O PENTELHO COMÉDIA 3 VIAGEM MALDITA TERROR Nesta query eu usei o nome completo da tabela antes do nome dos campos a serem retornados. Na prática, é comum darmos apelidos às tabelas. Veja: SELECT f.id, f.titulo, g.nome FROM filmes f, generos g WHERE f.genero = g.id;
  • 9. Subconsultas Uma subconsulta é uma instrução SELECT adicionada dentro de uma instrução SELECT, SELECT...INTO, INSERT...INTO, DELETE, ou UPDATE ou dentro de outra subconsulta. Pode utilizar três formas de sintaxe para criar uma subconsulta:
  • 10. Subconsultas comparaçã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 que compara a expressão com o resultado da subconsulta. Expressão: É uma expressão pela qual se busca o conjunto resultante da subconsulta. Instrução SQL: É uma instrução SELECT, que segue o mesmo formato e regras que qualquer outra SELECT. Deve ir entre parênteses.
  • 11. Subconsultas Pode-se utilizar uma subconsulta no lugar de uma expressão na lista de 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, que satisfaçam a comparação com qualquer outro registro recuperado na subconsulta. O exemplo seguinte devolve todos os produtos cujo preço unitário for maior que o de qualquer produto vendido com um desconto igual ou maior ao 25 por cento:
  • 13. Subconsultas SELECT * FROM Produtos WHERE PrecoUnidade >= ANY ( SELECT PrecoUnidade FROM DetalhePedido WHERE Desconto = 0 .25 )
  • 14. Subconsultas O predicado ALL se utiliza para recuperar unicamente aqueles registros da consulta principal que satisfazem a comparação com todos os registros recuperados na subconsulta. Se se muda ANY por ALL no exemplo anterior, a consulta devolverá unicamente aqueles produtos cujo preço unitário for maior que o de todos os produtos vendidos 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 devolve todos os produtos vendidos com um desconto igual a 25 por cento:
  • 16. Subconsultas SELECT * FROM Produtos WHERE IDProduto IN ( SELECT IDProduto FROM DetalhePedido WHERE Desconto = 0.25 )
  • 17. Subconsultas Inversamente, pode-se utilizar NOT IN para recuperar unicamente aqueles registros da consulta principal para os que não têm nenhum registro da subconsulta que contenha um valor igual. O predicado EXISTS (com palavra reservada NOT opcional) se utiliza em comparações de verdade/falso para determinar se a subconsulta devolve algum registro. Suponhamos que desejamos recuperar todos aqueles clientes que tiverem realizado pelo menos um pedido:
  • 18. Subconsultas SELECT Clientes.Companhia, Clientes.Telefone FROM Clientes WHERE EXISTS ( SELECT FROM Pedidos WHERE Pedidos.IdPedido = Clientes.IdCliente )