Subconsultas ou Consultas Aninhadas

Documentos relacionados
Subconsultas ou Consultas Aninhadas

Subconsultas ou Consultas Aninhadas

Subconsulta na Cláusula FROM

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

Modelo Relacional - Manipulação

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

Subconsulta na Cláusula FROM

SQL (Structured Query Language)

Sumário. Etapas do Processamento de Consultas

SQL Consultas Básicas

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

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

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

Modelo Relacional - Manipulação

Sintaxe do comando SELECT

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.

Marcelo Henrique dos Santos

ÁLGEBRA E CÁLCULO RELACIONAL

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

- SQL Linguagem de Manipulação de Dados

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

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

SQL Uma Visão mais Ampla

Álgebra Relacional e SQL

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

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

Banco de Dados I Álgebra Relacional

Álgebra Relacional e Cálculo Relacional

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

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

INE 5616 Banco de Dados II

SQL Consultas Básicas

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

BDII SQL Junção Revisão 8

Linguagem SQL Comando SELECT Subqueries

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

Projeto de Banco de Dados

SQL Avançado Continuação. Renata Viegas

Consultas SQL com mais de uma 01 tabela

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

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

SISTEMAS DE BANCO DE DADOS. Prof. Adriano Pereira Maranhão

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

SQL (Structured Query Language)

IF685 Gerenciamento de Dados e Informação - Prof. Robson Fidalgo 1

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

SQL (Structured Query Language)

Memória de aula Aulas 11 e 12

SQL (Structured Query Language)

Sistemas de Informação e Bases de Dados 2012/2013. Linguagem SQL

BD Objeto-Relacional - Motivação

Banco de Dados I. Aula 14 - Prof. Bruno Moreno 11/10/2011

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

Introdução ao SQL. Aécio Costa

Projeto de Banco de Dados

Sumário SELECT + FROM

Processamento e Otimização de Consultas

SQL - Perguntas. André Restivo. Faculdade de Engenharia da Universidade do Porto. February 24, 2012

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

Rápida revisão do Modelo Relacional

Definida pelo American National Standard Institute (ANSI) em 1986

Banco de Dados. Rafael Port da Rocha - Notas de Aula 47

Linguagem de Definição de Dados Estrutura básica Operações com conjuntos Funções de agregação Valores nulos Subconsultas embebidas Relações derivadas

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

Ordenação de tuplos order by

Banco de Dados. Álgebra Relacional. João Eduardo Ferreira Osvaldo Kotaro Takai Marcelo Finger

TABELA ENTIDADE LINHA OCORRÊNCIA DA ENTIDADE COLUNA ATRIBUTO DA ENTIDADE

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_) nome_atributo [< <= > >= < >!=] ANY (consulta_) nome_atributo [< <= > >= < >!=] ALL (consulta_) Subconsultas com IN Testam a relação de pertinência ou nãopertinência elemento-conjunto from tabela1 [...] where atributo_ou_expressão [NOT] IN (consulta_) 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)) 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) Diferença/Intersecção de Tabelas Exige tabelas compatíveis Álgebra relação1 relação2 relação1 relação2 (π RG (Funcionários)) (π RG (Pacientes)) (π RG (Médicos)) (π RG (Pacientes)) Observação consulta1 except consulta2 consulta1 intersect consulta2 Select RG except Select RG From Pacientes Select RG From Médicos intersect Select RG From Pacientes My não implementa estas operações 2

Subconsultas com ANY Permitem outras comparações do tipo elemento-conjunto testa se um valor é >, <, =,... que algum valor em um conjunto from tabela1 [,...] where atributo_ou_expressão [= < <= > >= <>!=] ANY (consulta_) 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 Á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))) 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) 3

Subconsultas com ALL Realiza uma comparação de igualdade ou desigualdade de um elemento com todos os elementos de um conjunto from tabela1 [,...] where atributo_ou_expressão [= < <= > >= <>!=] ALL(consulta_) 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 Where salário > all (Select salário Where departamento = contábil ) Where CPF < > all (or not in) (Select CPF From Pacientes) 4

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 from tabela1 [,...] where atributo_ou_expressão [= < <= > >= <>!=] (consulta_ com um único elemento) 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) 5

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 from tabela1 [,...] where [NOT] EXISTS (consulta_) 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)} Select m.nome 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) 6

Relembrando... 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))} Exemplo Cálculo {p.codp, p.nome p Pacientes m Médicos ( c Consultas (c.codm = m.codm p.codp = c.codp))} Select p.codp, 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)) A consulta acima equivale ao uso do operador de divisão da álgebra relacional: π codp, nome (Pacientes) (π codp, codm (Consultas) π codm (Médicos)) 7

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 8