SQL – Consultas Aninhadas

Slides:



Advertisements
Apresentações semelhantes
«Forte do Bom Sucesso (Lisboa) – Lápides 1, 2, 3» «nomes gravados, 21 de Agosto de 2008» «Ultramar.TerraWeb»
Advertisements

Otimização de Consultas em SQL Estimativas de Custos
Marco Antonio Montebello Júnior
Vamos contar D U De 10 até 69 Professor Vaz Nunes 1999 (Ovar-Portugal). Nenhuns direitos reservados, excepto para fins comerciais. Por favor, não coloque.
SQL Structured Query Language (continuação)
Exercício do Tangram Tangram é um quebra-cabeças chinês no qual, usando 7 peças deve-se construir formas geométricas.
Nome : Resolve estas operações começando no centro de cada espiral. Nos rectângulos põe o resultado de cada operação. Comprova se no final.
Prof. Bruno Rafael de Oliveira Rodrigues
FOLHA DE CÁLCULO 1.
Introdução aos Computadores e à Programação DI-FCT-UNL-2006/2007 Sistemas de Equações e Gráficos 2.1 Octave Sistemas de Equações e Gráficos.
Universidade Bandeirante de São Paulo Fundamentos da Álgebra
Excel Profa. Cristina M. Nunes.
Curso de ADMINISTRAÇÃO
Otimização de Consultas em SQL Parte II - Planos Alternativos -  Estimativa de Custos dos Planos de Execução AULA 19 Profa. Sandra de Amo Programa de.
Otimização de Consultas em SQL Parte I - Planos de Execução e Equivalências de Expressões da Álgebra Relacional AULA 19 Profa. Sandra de Amo Programa.
Mineração de Padrões Arborescentes
Gerenciamento de Banco de Dados
SQL Exercícios de Revisão
AULA 27 Profa. Sandra de Amo GBC053 – BCC
Algoritmos para Seleção Simples AULA 16 Profa. Sandra de Amo GBC053 – BCC
Algoritmos para Seleção com Condições Gerais AULA 17 Profa. Sandra de Amo GBC053 – BCC
Algoritmos para Seleção e Projeção
SQL – Comandos de Agregação
Algoritmos para Seleção Simples
Problemas NP-completos
Algoritmos para Operações de Conjuntos AULA 19 Profa. Sandra de Amo GBC053 – BCC
AULA 23 Profa. Sandra de Amo GBC053 – BCC
SQL – Consultas Aninhadas e Agregação Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke.
SQL Exercícios de Revisão Profa. Sandra de Amo Programa de Pós-graduação em Ciência da Computação – UFU
Algebra relacional nomeada e não-nomeada
Algoritmos para Projeção e Operações de Conjuntos AULA 22 Profa. Sandra de Amo GBC053 – BCC
Otimização de Consultas em SQL Planos de Execução e Equivalências de Expressões da Álgebra Relacional AULA 24 Profa. Sandra de Amo GBC053 – BCC
Subconsultas ou Consultas Aninhadas
SQL – Consultas Básicas
SQL – Noções Gerais Por Márcia Jacyntha N. Rodrigues Lucena
SQL – DML Consultas envolvendo relacionamentos entre tabelas
Operadores Especiais da SQL
SCC Bancos de Dados e Suas Aplicações
SCC Bancos de Dados e Suas Aplicações
Renda até 2 SM.
Diagnósticos Educativos = Diagnósticos Preenchidos 100% = 1.539
Comandos de SQL Excel VBA II.
Monitoria GDI Aula Prática
Introdução à Álgebra Linear Turma B1 Profa. Ana Maria Luz
1 CENTRO DE DESENVOLVIMENTO E PLANEJAMENTO REGIONAL – 2006 P Ó S-GRADUA Ç ÃO EM ECONOMIA Microeconomia I Prof.: Edson Domingues Cap í tulo II: Escolha.
EXERCÍCIOS 30 a) o 20º termo da PA (2,7,...) O 20º termo desta PA é 97.
CATÁLOGO GÉIA PÁG. 1 GÉIA PÁG. 2 HESTIA PÁG. 3.
Geração de Planos de Execução Planos para Consultas Aninhadas
Otimização de Consultas em SQL Planos Alternativos AULA 24 Profa. Sandra de Amo GBC053 – BCC
Universidade Federal de Alagoas – UFAL Centro de Tecnologia – CTEC
LINHAS MAIS RECLAMADAS Ranking Negativo para Fiscalização Direcionada CONDUTA AUXILIAR ANO IV – Nº 12.
DISTRIBUIÇÃO ELETRÔNICA
Otimização de Consultas em SQL Planos de Execução
1/40 COMANDO DA 11ª REGIÃO MILITAR PALESTRA AOS MILITARES DA RESERVA, REFORMADOS E PENSIONISTAS - Mar 06 -
TESTE DE MATEMÁTICA SEQUÊNCIAS (P.A - P.G)
Monitoria GDI Aula Prática
Algoritmos para Operação de Junção Loops Aninhados AULA 17 Profa. Sandra de Amo GBC053 – BCC.
Olhe fixamente para a Bruxa Nariguda
Baseado no material do Professor Raul Paradeda
Comandos SQL.
REVISÃO Comandos SQL - DML SELECT * FROM ?.
Teste de Matemática- 1°P
©Prof. Lineu MialaretAula 14e - 1Banco de Dados I Banco de Dados I – BD I Prof. Lineu Mialaret Aula 14e: Exercícios em SQL (1) Instituto Federal de Educação,
AULA 20 Profa. Sandra de Amo GBC053 – BCC
Algoritmos para Operações Binárias entre blocos SQL AULA 19 – Parte I Profa. Sandra de Amo GBC053 – BCC.
Fundamentos de Banco de Dados Fundamentos de Banco de Dados Prof. Gale 2º. Semestre 2008.
©Silberschatz, Korth and Sudarshan (modificado)4.2.1Database System Concepts Capítulo 4: SQL Estrutura básica Operações com conjuntos Funções de agregação.
Subconsultas ou Consultas Aninhadas Forma alternativa de especificar consultas envolvendo relacionamentos entre tabelas Otimização –filtragens prévias.
José Antônio da Cunha 2/6/2016 José Antônio - CEFET-RN 1 Disciplina: Banco de Dados.
Copyright © 2011 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Capítulo 5 Mais SQL: Consultas Complexas, Triggers e Views.
Transcrição da apresentação:

SQL – Consultas Aninhadas Profa. Sandra de Amo Capitulo 5 – Livro Texto Database Management Systems Ramakrishnan - Gehrke

Exercícios Variantes da consulta “Dê o nome dos marinheiros que reservaram barcos vermelhos” Variantes equivalentes da consulta “Dê o nome dos estudantes do primeiro período que estão matriculados em alguma disciplina ministrada pela Profa. Maria Amélia”

Dê os nomes dos marinheiros que reservaram barcos vermelhos Sailors Resposta N1 Sid Snome Status Idade 22 N1 7 45 SELECT S.Snome FROM Sailors S WHERE S.Sid IN (SELECT R.Sid FROM Reservas R WHERE R.Bid IN (SELECT B.Bid FROM Barcos B WHERE B.Cor = ‘Vermelho’)) N3 29 N2 1 33 31 N3 8 55,5 N6 32 N4 8 25,5 58 N5 10 35 64 N6 7 35 71 N7 10 16 22 74 N6 9 35 22 85 N8 3 25,5 31 95 N9 3 63,5 31 Reservas 64 Barcos Sid Bid Dia 22 101 D1 Bid BN Cor 22 102 104 102 D1 101 A1 Azul 22 103 D3 102 A1 Verm 22 104 D4 103 A2 Verde 31 102 D5 104 A3 Verm 31 103 D6 31 104 D7 64 101 D8 64 102 D9 74 103 D9

Dê os nomes dos marinheiros que NÃO reservaram barcos vermelhos Sailors N2 Resposta N4 Sid Snome Status Idade N5 22 N1 7 45 SELECT S.Snome FROM Sailors S WHERE S.Sid NOT IN (SELECT R.Sid FROM Reservas R WHERE R.Bid IN (SELECT B.Bid FROM Barcos B WHERE B.Cor = ‘Vermelho’)) N7 29 N2 1 33 N6 31 N3 8 55,5 32 N4 8 N8 25,5 58 N5 10 35 N9 64 N6 7 35 71 N7 10 16 22 74 N6 9 35 22 85 N8 3 25,5 31 95 N9 3 63,5 31 Reservas 64 Barcos Sid Bid Dia 22 101 D1 Bid BN Cor 102 104 22 102 D1 101 A1 Azul 22 103 D3 102 A1 Verm 22 104 D4 103 A2 Verde 31 102 D5 104 A3 Verm 31 103 D6 31 104 D7 64 101 D8 64 102 D9 74 103 D9

Dê os nomes dos marinheiros que reservaram barcos não vermelhos Sailors Resposta Sid Snome Status Idade N1 22 N1 7 45 SELECT S.Snome FROM Sailors S WHERE S.Sid IN (SELECT R.Sid FROM Reservas R WHERE R.Bid NOT IN (SELECT B.Bid FROM Barcos B WHERE B.Cor = ‘Vermelho’)) N3 29 N2 1 33 N6 31 N3 8 55,5 N6 32 N4 8 25,5 58 N5 10 35 64 N6 7 35 71 N7 10 16 22 74 N6 9 35 22 85 N8 3 25,5 31 95 N9 3 63,5 64 Reservas 74 Barcos Sid Bid Dia 22 101 D1 Bid BN Cor 22 102 D1 101 A1 Azul 102 104 22 103 D3 102 A1 Verm 22 104 D4 103 A2 Verde 31 102 D5 104 A3 Verm 31 103 D6 31 104 D7 64 101 D8 64 102 D9 74 103 D9

Dê os nomes dos marinheiros que não reservaram barcos não vermelhos Sailors Resposta Sid Snome Status Idade N2 22 N1 7 45 SELECT S.Snome FROM Sailors S WHERE S.Sid NOT IN (SELECT R.Sid FROM Reservas R WHERE R.Bid NOT IN (SELECT B.Bid FROM Barcos B WHERE B.Cor = ‘Vermelho’)) N4 29 N2 1 33 N5 31 N3 8 55,5 N7 32 N4 8 25,5 N8 58 N5 10 35 64 N6 7 35 N9 71 N7 10 16 74 N6 9 35 22 85 N8 3 25,5 22 95 N9 3 63,5 31 Reservas 64 Barcos Sid Bid Dia 74 22 101 D1 Bid BN Cor 22 102 D1 101 A1 Azul 22 103 D3 102 A1 Verm 102 104 22 104 D4 103 A2 Verde 31 102 D5 104 A3 Verm 31 103 D6 31 104 D7 64 101 D8 64 102 D9 74 103 D9

Dê o nome dos estudantes do primeiro período que estão matriculados em alguma disciplina ministrada pela Profa. Maria Amélia” VARIANTE 1 : Sem subconsultas aninhadas SELECT E.ENOME FROM ESTUDANTE E, MATRICULADO M, DISCIPLINA D, PROF P WHERE E.PERIODO = ‘1’ AND E.ENUM = M.ENUM AND M.DID = D.DID AND D.PID = P.PID AND P.PNOME = ‘Maria Amélia’

Dê o nome dos estudantes do primeiro período que estão matriculados em alguma disciplina ministrada pela Profa. Maria Amélia” VARIANTE 2 : com um nível de aninhamento SELECT E.ENOME FROM ESTUDANTE WHERE E.PERIODO = ‘1’ AND E.NUM IN (SELECT M.ENUM FROM MATRICULADO M, DISCIPLINA D, PROF P WHERE M.DID = D.DID AND D.PID = P.PID AND P.PNOME = ‘Maria Amélia’)

Dê o nome dos estudantes do primeiro período que estão matriculados em alguma disciplina ministrada pela Profa. Maria Amélia” VARIANTE 3 : com dois níveis de aninhamento SELECT E.ENOME FROM ESTUDANTE WHERE E.PERIODO = ‘1’ AND E.NUM IN (SELECT M.ENUM FROM MATRICULADO M WHERE M.DID IN (SELECT D.DID FROM DISCIPLINA D, PROF P WHERE D.PID = P.PID AND P.PNOME = ‘Maria Amélia’))

Dê o nome dos estudantes do primeiro período que estão matriculados em alguma disciplina ministrada pela Profa. Maria Amélia” VARIANTE 4 : com três níveis de aninhamento SELECT E.ENOME FROM ESTUDANTE WHERE E.PERIODO = ‘1’ AND E.NUM IN (SELECT M.ENUM FROM MATRICULADO M WHERE M.DID IN (SELECT D.DID FROM DISCIPLINA D WHERE D.PID IN (SELECT P.PID FROM PROF P WHERE P.PNOME = ‘Maria Amélia’)))

Condições do WHERE – em consultas aninhadas A IN (R: Resultado de subconsulta) Verdadeiro se o valor do atributo A está em R A NOT IN (R: Resultado de subconsulta) Verdadeiro se o valor do atributo A não está em R EXISTS (R: Resultado de subconsulta) Verdadeiro se R é não vazio NOT EXISTS (R: Resultado de subconsulta) Verdadeiro se R é vazio

Exemplo SELECT S.Snome FROM Sailors S WHERE EXISTS (SELECT * Encontre nome de marinheiros que reservaram o barco ‘103’ SELECT S.Snome FROM Sailors S WHERE EXISTS (SELECT * FROM Reservas R WHERE R.Bid = ‘103’ AND R.Sid = S.Sid)

Exemplo SELECT S.Snome FROM Sailors S WHERE NOT EXISTS (SELECT * Encontre nome de marinheiros que não reservaram o barco ‘103’ SELECT S.Snome FROM Sailors S WHERE NOT EXISTS (SELECT * FROM Reservas R WHERE R.Bid = ‘103’ AND R.Sid = S.Sid)

Exemplo SELECT S.Snome FROM Sailors S WHERE UNIQUE (SELECT * Encontre nome de marinheiros que reservaram uma única vez o barco ‘103’ SELECT S.Snome FROM Sailors S WHERE UNIQUE (SELECT * FROM Reservas R WHERE R.Bid = ‘103’ AND R.Sid = S.Sid)

Condições do WHERE – em consultas aninhadas A > ANY (R: Resultado de subconsulta) Verdadeiro se o valor do atributo A é maior do que algum valor de R A > ALL (R: Resultado de subconsulta) Verdadeiro se o valor do atributo A é maior do que qualquer valor em R A <> ALL (R: Resultado de subconsulta) Verdadeiro se o valor de A não está em R A = ANY (R: Resultado de subconsulta) Verdadeiro se o valor de A está em R

Exemplo Encontre os identificadores de marinheiros cujo status é melhor do que algum marinheiro chamado “Horácio” SELECT S.Sid FROM Sailors S WHERE S.Status >= ANY (SELECT S2.Status FROM Sailors S2 WHERE S2.Snome = ‘Horacio’)

Exemplo Encontre os identificadores de marinheiros que têm os maiores status. SELECT S.Sid FROM Sailors S WHERE S.Status >= ALL (SELECT S2.Status FROM Sailors S2)

Exercício 1 Quais são os nomes dos marinheiros mais jovens que reservaram o barco 103 ? SELECT S.Snome FROM Sailors WHERE S.Idade <= ALL (SELECT S2.Idade FROM S2 Sailors, R Reservas WHERE R.Sid = S2.Sid AND R.Bid = 103)

Consultas Aninhadas Correlacionadas (a evitar - ineficientes) Encontre nome de marinheiros que reservaram o barco ‘103’ SELECT S.Snome FROM Sailors S WHERE EXISTS (SELECT * FROM Reservas R WHERE R.Bid = ‘103’ AND R.Sid = S.Sid) Consulta executada repetidamente: uma vez para cada tupla da relação Sailors

Exercício 2 A consulta a seguir é correlacionada ? SELECT S.Snome FROM Sailors WHERE S.Idade <= ALL (SELECT S2.Idade FROM S2 Sailors, R Reservas WHERE R.Sid = S2.Sid AND R.Bid = 103) Resposta: Não

Como simular operador de Intersecção Encontre os nomes de marinheiros que reservaram barcos verdes e vermelhos. SELECT S.Snome FROM Sailors S, Reservas R, Barcos B WHERE S.Sid = R.Sid AND R.Bid = B.Bid AND B.Cor = ‘Vermelho’ AND S.Sid IN (SELECT S2.Sid FROM Sailors S2, Barcos B2, Reservas R2 WHERE S2.Sid = R2.Sid AND R2.Bid = B2.Bid AND B2.Cor = ‘Verde’)

Variante: calcula a mesma resposta ? (SIM) SELECT S.Snome FROM Sailors S WHERE S.Sid IN ( (SELECT R.Sid FROM Barcos B, Reservas R WHERE R.Bid = B.Bid AND B.Cor = ‘Vermelho’) INTERSECT (SELECT R.Sid B.Cor = ‘Verde’) )

Variante: calcula a mesma resposta ? (NÃO !!) (SELECT S.Snome FROM Sailors S, Barcos B, Reservas R WHERE S.Sid = R.Sid AND R.Bid = B.Bid AND B.Cor = ‘Vermelho’) INTERSECT B.Cor = ‘Verde’)

Exercício 3 : Operador de Diferença Dê os nomes dos marinheiros que reservaram barcos vermelhos e não reservaram barcos verdes. SELECT S.Snome FROM Sailors S, Reservas R, Barcos B WHERE S.Sid = R.Sid AND R.Bid = B.Bid AND B.Cor = ‘Vermelho’ AND S.Sid NOT IN (SELECT S2.Sid FROM Sailors S2, Barcos B2, Reservas R2 WHERE S2.Sid = R2.Sid AND R2.Bid = B2.Bid AND B2.Cor = ‘Verde’)

Variante: Calcula a mesma resposta ? (SIM) SELECT S.Snome FROM Sailors S WHERE S.Sid IN ( (SELECT R.Sid FROM Barcos B, Reservas R WHERE R.Bid = B.Bid AND B.Cor = ‘Vermelho’) EXCEPT (SELECT R.Sid B.Cor = ‘Verde’) )

Variante: calcula a mesma resposta ? (NÃO !!) (SELECT S.Snome FROM Sailors S, Barcos B, Reservas R WHERE S.Sid = R.Sid AND R.Bid = B.Bid AND B.Cor = ‘Vermelho’) EXCEPT B.Cor = ‘Verde’)

Exercicio 4 : Operador de União Dê o nome dos marinheiros que reservaram barcos vermelhos ou verdes. SELECT S.Snome FROM Sailors S, Reservas R, Barcos B WHERE S.Sid = R.Sid AND R.Bid = B.Bid AND B.Cor = ‘Vermelho’ OR S.Sid IN (SELECT S2.Sid FROM Sailors S2, Barcos B2, Reservas R2 WHERE S2.Sid = R2.Sid AND R2.Bid = B2.Bid AND B2.Cor = ‘Verde’)

Variante: Calcula a mesma resposta ? (SIM) SELECT S.Snome FROM Sailors S WHERE S.Sid IN ( (SELECT R.Sid FROM Barcos B, Reservas R WHERE R.Bid = B.Bid AND B.Cor = ‘Vermelho’) UNION (SELECT R.Sid B.Cor = ‘Verde’) )

Variante: calcula a mesma resposta ? (SIM !!) (SELECT S.Snome FROM Sailors S, Barcos B, Reservas R WHERE S.Sid = R.Sid AND R.Bid = B.Bid AND B.Cor = ‘Vermelho’) UNION B.Cor = ‘Verde’)

Operador de Divisão Dê o nome dos marinheiros que reservaram todos os barcos. SELECT S.SNOME FROM SAILORS S WHERE NOT EXISTS ( ( SELECT B.BID FROM BARCOS B EXCEPT (SELECT R.BID FROM RESERVAS R WHERE R.SID = S.SID) ) Identificadores de barcos que não foram reservados pelo marinheiro com identificador Sid

Variante (sem EXCEPT) Dê o nome dos marinheiros que reservaram todos os barcos. SELECT S.SNOME FROM SAILORS S WHERE NOT EXISTS (( SELECT B.BID FROM BARCOS B ( SELECT R.BID FROM RESERVAS R WHERE R.BID = B.BID AND R.SID = S.SID) ) Identificadores de barcos que não foram reservados pelo marinheiro com Identificador SID Identificadores de barcos que foram reservados pelo marinheiro com Identificador SID

Exercício 5 Dê o nome dos marinheiros que reservaram todos os barcos vermelhos. SELECT S.SNOME FROM SAILORS S WHERE NOT EXISTS ( (SELECT B.BID FROM BARCOS B, RESERVAS R WHERE B.Cor = ‘Vermelho’) EXCEPT (SELECT R.BID FROM RESERVAS R WHERE R.SID = S.SID) )