Subconsultas ou Consultas Aninhadas

Documentos relacionados
Subconsultas ou Consultas Aninhadas

Subconsultas ou Consultas Aninhadas

Subconsulta na Cláusula FROM

Cálculo Relacional. Cálculo Relacional de Tupla

Cálculo Relacional. Duas categorias de linguagens cálculo relacional de tupla cálculo relacional de domínio

Banco de Dados I. Prof. Diego Buchinger. Profa. Rebeca Schroeder Freitas Prof. Fabiano Baldo.

Modelo Relacional - Manipulação

select nome from Médicos where codm in (select codm from Consultas where data = 06/06/13 )

Subconsulta na Cláusula FROM

Banco de Dados. SQL Structured Query Language

Sumário. Etapas do Processamento de Consultas

SQL (Structured Query Language)

SQL Consultas Básicas

Banco de Dados I. Prof. Diego Buchinger. Profa. Rebeca Schroeder Freitas Prof. Fabiano Baldo.

Modelo Relacional - Manipulação

UTFPR - Universidade Tecnológica Federal do Paraná. Processamento e otimização de consultas

Agenda. Linguagem de Consulta SQL. 1. Introdução Histórico. 1. Introdução BD Relacionais

Crie a seguinte estrutura: Banco de Dados: Carros e duas tabelas: proprietários e veículos, conforme está abaixo e cadastre os mesmos dados:

Exemplo Clínica. Exemplo Clínica. Exemplo Clínica. Exemplo Clínica. (

Bases de Dados BDDAD. Linguagem SQL. Comando SELECT Divisão Algébrica. Nelson Freire (ISEP LEI-BDDAD 2015/16) 1/9

Banco de Dados I. Prof. Diego Buchinger. Profa. Rebeca Schroeder Freitas Prof. Fabiano Baldo.

Sintaxe do comando SELECT

Marcelo Henrique dos Santos

SQL Consultas Básicas

SQL Uma Visão mais Ampla

Visões ... Esquema Externo n. Esquema Externo 1. Esquema Lógico. Usuários finais/aplicações

ÁLGEBRA E CÁLCULO RELACIONAL

IFSP Campus Presidente Epitácio. BND Banco de Dados. Professora: Márcia Jani. 1.1 Apresentação: Márcia Jani

Operações da Álgebra Relacional Operadores Especiais da Álgebra Relacional Renomeação

Álgebra Relacional e SQL

SQL Uma Visão mais Ampla

INE 5616 Banco de Dados II

- SQL Linguagem de Manipulação de Dados

ROTEIRO Introdução Álgebra e Cálculo Relacional Operações da Álgebra Relacional Classificação de Operadores da Álgebra Relacional Mapeamento AR -> SQL

SQL Linguagem de Manipulação de Dados SQL DML SQL DML. Exemplo Modelo Relacional. Exemplo ME-R SQL DML CONTINUAÇÃO...

Consultas SQL com mais de uma 01 tabela

Álgebra Relacional e SQL operações de interesse

3 Plano de Execução de Consultas

Álgebra Relacional e Cálculo Relacional

Aula 10 BD 1 SQL Parte 2. Profa. Elaine Faria UFU

Banco de Dados I Álgebra Relacional

Bases de Dados. Parte IV: Álgebra e Cálculo Relacional

BD Objeto-Relacional - Motivação

SQL (Structured Query Language)

Introdução ao SQL. Aécio Costa

SQL (Structured Query Language)

Linguagem SQL Comando SELECT Subqueries

SQL (Structured Query Language)

BDII SQL Junção Revisão 8

Objetos Persistentes. Objetos Persistentes: são objetos que requerem armazenamento persistente.

ANÁLISE E PROJETO DE BANCO DE DADOS

Bases de Dados. Parte IV: Álgebra e Cálculo Relacional

Consultas SQL. Andre Noel

Visões. Definição de Visões

SQL. Subqueries. Cristina C. Vieira Departamento de Engenharia Eletrónica e Informática

Banco de Dados. Aula 8 - Prof. Bruno Moreno 16/09/2011

Banco de Dados I. Aula 16 - Prof. Bruno Moreno 04/11/2011

Processamento e Otimização de Consultas

IEC Banco de Dados I Aula 06 Álgebra Relacional

- Um "query block" permite a implementação das operações de selecção, projecção e junção da álgebra relacional.

SQL Avançado Continuação. Renata Viegas

Bases de Dados. Parte IV. Álgebra e Cálculo Relacional

SQL. Prof. Msc Denival A. dos Santos

Projeto de Banco de Dados

ACH2025. Laboratório de Bases de Dados Aula 15. Processamento de Consultas Parte 2 Otimização. Professora: Fátima L. S. Nunes SISTEMAS DE INFORMAÇÃO

Banco de Dados I. Aula 9 - Prof. Bruno Moreno 20/09/2011

Sumário. Definição do Plano de Execução

António Rocha Nuno Melo e Castro

O Modelo e a Álgebra Relacional

Rápida revisão do Modelo Relacional

ALGEBRA RELACIONAL. Álgebra Relacional Conjunto básico de operações para o Modelo Relacional O resultado é uma relação

MATA60 BANCO DE DADOS Aula: Otimização. Prof. Daniela Barreiro Claro

SQL. Agregações e agrupamentos. Cristina C. Vieira Departamento de Engenharia Eletrónica e Informática

Processamento e Otimização de Consultas. Msc. Simone Dominico Orientador: Dr. Eduardo Cunha de Almeida PPGINF - UFPR

Banco de Dados. Cálculo Relacional de Domínio. João Eduardo Ferreira Osvaldo Kotaro Takai Marcelo Finger

Banco de Dados. Cálculo Relacional de Tuplas. João Eduardo Ferreira Osvaldo Kotaro Takai

Consulta sobre múltiplas relações

ANÁLISE E PROJETO DE BANCO DE DADOS

A cláusula order by permite ordenar tuplos exemplo: listar por ordem alfabética os nomes dos clientes com empréstimo na agência de Perryridge

Aula 8 BD1 Álgebra Relacional. Profa. Elaine Faria UFU

Processamento de Consultas. Processamento de Consultas. Processamento de Consultas Distribuídas. Otimização de Consultas

Unipar Universidade Paranaense Disciplina: Banco de Dados II 3ª Série Profª: Késsia Marchi Profa. Késsia Marchi

IMPLEMENTAÇÃO DE BANCO DE DADOS

Uma expressão básica em SQL consiste em três cláusulas: select, from e where.

Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri. Banco de Dados Processamento e Otimização de Consultas

Tecnologias de Bancos de Dados

Processamento de Produtos ( X )

Desenvolvimento de Aplicações Desktop

Projeto de Bancos de Dados Distribuídos (Parte 01)

SQL Uma Visão mais Ampla

GES013 - Sistema de Banco de Dados SQL/DML no PostgreSQL Parte 2 Consultas Aninhaas

Linguagem de Consulta/Interrogação

Bases de Dados. Parte IV

PCS3413. Engenharia de So-ware e Banco de Dados. Aula 17. Escola Politécnica da Universidade de São Paulo

14/03/12. Tipos de fragmentação. Projeto de Bancos de Dados Distribuídos (Parte 01) Correção das regras de fragmentação. Grau de fragmentação

Compilação, Otimização e Execução de Consultas. Profa. Dra. Cristina Dutra de Aguiar Ciferri

Transcrição:

Subconsultas ou Consultas Aninhadas Forma alternativa de especificar consultas envolvendo relacionamentos entre tabelas Otimização filtragens prévias de dados na subconsulta apenas tuplas/atributos de interesse são combinados com dados da(s) tabela(s) da consulta externa Cláusulas de subconsulta nome_atributo [NOT] IN (consulta_sql) nome_atributo [< <= > >= < >!=] ANY (consulta_sql) nome_atributo [< <= > >= < >!=] ALL (consulta_sql) Subconsultas com IN Testam a relação de pertinência ou nãopertinência elemento-conjunto select lista_atributos from tabela1 [...] where atributo_ou_expressão [NOT] IN (consulta_sql) Mapeamento para a álgebra relacional select a 1,..., a n from t 1 where c IN (select x from t 2 where d > 5) π a1,..., an (t 1 θ X (π x (σ d > 5 (t 2 )))) θ = t 1.c = t 2.x 1

Álgebra π nome ( (Médicos θ X θ = Médicos.codm = Consultas.codm (π codm (σ data = 06/11/13 (Consultas))) ) ) (π CPF (Funcionários)) (π CPF (Pacientes)) (π CPF (Médicos)) (π CPF (Pacientes)) Exemplos SQL From Médicos Where codm in (select codm from Consultas where data = 06/11/13 ) Select CPF Where CPF not in (select CPF from Pacientes) Select CPF From Médicos Where CPF in (select CPF from Pacientes) Subconsultas com ANY Permitem outras comparações do tipo elemento-conjunto testa se um valor é >, <, =,... que algum valor em um conjunto select lista_atributos from tabela1 [,...] where atributo_ou_expressão [= < <= > >= <>!=] ANY (consulta_sql) Mapeamento para a álgebra relacional select a 1,..., a n from t 1 where c > ANY (select x from t 2 where d > 5) π a1,..., an (t 1 θ X (π x (σ d > 5 (t 2 )))) θ = t 1.c > t 2.x 2

Álgebra π nome ( (Médicos θ X θ = Médicos.codm = Consultas.codm (π codm (σ data = 06/11/13 (Consultas))) ) ) π Funcionários.idade ( ((π idade (Funcionários)) θ X θ = Funcionários.idade < f2.idade (π idade (ρ f2 (Funcionários))) SQL From Médicos Where codm = any (ou in) (select codm from Consultas where data = 06/11/13 ) Where idade < any ( Select idade from Funcionários) Subconsultas com ALL Realiza uma comparação de igualdade ou desigualdade de um elemento com todos os elementos de um conjunto select lista_atributos from tabela1 [,...] where atributo_ou_expressão [= < <= > >= <>!=] ALL(consulta_SQL) Não tem mapeamento para a álgebra relacional não é equivalente a divisão na divisão existe apenas comparação de igualdade dividendo deve ter mais atributos que o divisor não filtra automaticamente atributos do dividendo 3

Where salário > all (Select salário Where departamento = contábil ) Where CPF < > all (or not in) (Select CPF From Pacientes) Comparações Elemento-Elemento Casos em que a subconsulta retorna apenas um elemento como resultado cardinalidade da subconsulta = 1 não é utilizada nenhuma cláusula de subconsulta neste caso select lista_atributos from tabela1 [,...] where atributo_ou_expressão [= < <= > >= <>!=] (consulta_sql com um único elemento) 4

Where salário > (Select salário Where CPF = 22000200002) select nome, CPF from Médicos where CPF < > 10000100001 and especialidade = (select especialidade from Médicos where CPF = 10000100001) Cálculo Relacional Linguagem formal para consulta a relações mesmo poder de expressão da álgebra relacional Forma Geral {t, v,..., x P(t, v,..., x)} variáveis livres predicado aplicado à t, v,..., x Variável livre assume valores de tuplas de uma ou mais relações constitui a resposta da consulta Predicado expressão lógica que, se verdadeira para determinados valores das variáveis livres t, v,...x, retorna os valores destas variáveis na resposta da consulta 5

buscar os dados dos pacientes que estão com sarampo {p p Pacientes p.doença = sarampo } buscar o número e a capacidade dos ambulatórios do terceiro andar {a.nroa, a.capacidade a Ambulatórios a.andar = 3} buscar os nomes dos médicos ortopedistas e o número e andar dos ambulatórios onde eles atendem {m.nome, a.nroa, a.andar m Médicos m.especialidade = ortopedia a Ambulatórios m.nroa = a.nroa} Quantificador Existencial Notação t R (P(t)) Define uma variável não-livre t (associada sempre a uma relação R) e avalia um predicado P(t) para ela interpretação: verifica se existe alguma tupla t em R para o qual P(t) seja verdadeiro Uma variável não-livre não faz parte da resposta da consulta usada para definir predicados sobre tuplas de relações que não interessam para a resposta 6

buscar o nome dos médicos que atendem em ambulatórios do segundo andar {m.nome m Médicos a Ambulatórios (a.andar = 2 m.nroa = a.nroa)} buscar o nome e a doença dos pacientes que têm consulta marcada com o médico João da Silva {p.nome, p.doença p Pacientes c Consultas (p.codp = c.codp m Médicos (c.codm = m.codm m.nome = João da Silva ))} Notação Quantificador Universal t R (P(t)) Interpretação verifica se toda tupla t em R satisfaz P(t) Usado para formular consultas que envolvem a associação com tuplas de relações que não vão para a resposta similar ao princípio da divisão da álgebra relacional 7

buscar o nome dos médicos que têm consulta marcada com todos os pacientes {m.nome m Médicos p Pacientes ( c Consultas (p.codp = c.codp c.codm = m.codm))} buscar o nome dos pacientes com câncer que têm consulta marcada com todos os médicos {p.nome p Pacientes p.doença = câncer m Médicos ( c Consultas (c.codm = m.codm c.codp = p.codp))} Observação Propriedade de Equivalência dos Quantificadores Universal e Existencial t R (P(t)) t R ( P(t)) Buscar o nome dos médicos que têm consulta marcada com todos os pacientes {m.nome m Médicos p Pacientes ( c Consultas (p.codp = c.codp c.codm = m.codm))} {m.nome m Médicos p Pacientes ( c Consultas (p.codp = c.codp c.codm = m.codm))} 8

Subconsultas com EXISTS Quantificador existencial do cálculo relacional testa se um predicado é V ou F na subconsulta para cada tupla da consulta externa a ser analisada, a subconsulta é executada select lista_atributos from tabela1 [,...] where [NOT] EXISTS (consulta_sql) Mapeamento para o cálculo relacional select a 1,..., a n from T 1 where EXISTS (select * from T 2 where d > 5 and T 2.x = T 1.c) {t 1.a 1,..., t 1.a n t 1 T 1 t 2 T 2 (t 2.d > 5 t 2.x = t 1.c) } Cálculo {m.nome m Médicos c Consultas (c.data = 06/11/13 c.codm = m.codm)} {f.nome f Funcionários f.depto = pessoal p Pacientes (p.cpf = f.cpf)} Exemplos SQL From Médicos m Where exists (Select * From Consultas Where data = 06/11/13 and codm = m.codm) Select f.nome f Where f.depto = pessoal and not exists (Select * From Pacientes Where CPF = f.cpf) 9

Exemplo Cálculo {p.nome p Pacientes m Médicos ( c Consultas (c.codm = m.codm p.codp = c.codp))} SQL Select p.nome From Pacientes p Where not exists (Select * From Médicos m Where not exists (Select * From Consultas c Where c.codm = m.codm and c.codp = p.codp)) Exercícios Resolva o que se pede utilizando subconsultas IN: 1) nome e CPF dos médicos que também são pacientes do hospital 2) código e nome dos pacientes com consulta marcada para horários após às 14 horas 3) nome e idade dos médicos que têm consulta com a paciente Ana 4) número e andar dos ambulatórios onde nenhum médico dá atendimento 5) nome, CPF e idade dos pacientes que têm consultas marcadas sempre para dias anteriores ao dia 16 Resolva o que se pede utilizando subconsultas ANY e/ou ALL: 1) números e andares de todos os ambulatórios, exceto o de menor capacidade 2) nome e idade dos médicos que têm consulta com a paciente Ana 3) nome e a idade do médico mais jovem (sem usar função MIN!) 4) nome e CPF dos pacientes com consultas marcadas para horários anteriores a todos os horários de consultas marcadas para o dia 12 de Novembro de 2006 5) nome e CPF dos médicos que não atendem em ambulatórios com capacidade superior à capacidade dos ambulatórios do segundo andar Resolva o que se pede utilizando subconsultas EXISTS: 1) nome e CPF dos médicos que também são pacientes do hospital 2) nome e idade dos médicos que têm consulta com a paciente Ana 3) número do ambulatório com a maior capacidade (sem usar função MAX!) 4) nome e CPF dos médicos que têm consultas marcadas com todos os pacientes 5) nome e CPF dos médicos ortopedistas que têm consultas marcadas com todos os pacientes de Florianópolis 10