1 / 16

Subconsultas ou Consultas Aninhadas

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

rocio
Download Presentation

Subconsultas ou Consultas Aninhadas

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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)

  2. Subconsultas com IN • Testam uma relação de pertinência elemento-conjunto selectlista_atributos fromtabela1 [...] whereatributo_ou_expressão[NOT] IN (consulta_SQL) • Mapeamento para a álgebra relacional select a1, ..., an from t1 where c IN (select x from t2 where d > 5) a1, ..., an(t1 X(x ( d > 5(t2))))  = t1.c = t2.x

  3. Exemplos

  4. Exige tabelas compatíveis Exemplos Observação MySQL não implementa estas operações Diferença/Intersecção de Tabelas

  5. Subconsultas com ANY • Permitem outras comparações do tipo elemento-conjunto • testam se um valor é >, <, =, ... que algum valor em um conjunto selectlista_atributos fromtabela1 [, ...] whereatributo_ou_expressão[=|<|<=|>|>=|<>| !=] ANY (consulta_SQL) • Mapeamento para a álgebra relacional select a1, ..., an from t1 where c > ANY (select x from t2 where d > 5) a1, ..., an(t1 X(x ( d > 5(t2))))  = t1.c > t2.x

  6. Exemplos

  7. Subconsultas com ALL • Realizam uma comparação de igualdade ou desigualdade de um elemento com todos os elementos de um conjunto ao mesmo tempo selectlista_atributos fromtabela1 [, ...] whereatributo_ou_expressão[=|<|<=|>|>=|<>| !=] ALL(consulta_SQL) • Não há correspondência com a álgebra relacional • não é equivalente a divisão • não filtra automaticamente atributos do dividendo • na divisão, os operandos podem ter mais de um atributo • na divisão existe apenas comparação de igualdade

  8. Exemplos Select nome From Funcionários Where salário > all (Select salário From Funcionários Where departamento = ‘enfermaria’) Select nome From Funcionários Where RG < > all(or not in) (Select RG From Pacientes)

  9. Comparações Elemento-Elemento • Casos em que a subconsulta retorna uma única tupla como resultado • não é utilizada nenhuma cláusula de subconsulta neste caso selectlista_atributos fromtabela1 [, ...] whereatributo_ou_expressão[=|<|<=|>|>=|<>| !=] (consulta_SQL com um único elemento)

  10. Exemplos Select nome From Funcionários Where salário > (Select salário From Funcionários Where RG = 2200020000) select nome, RG from Médicos where RG < > 1000010000 and especialidade = (select especialidade from Médicos where RG = 1000010000)

  11. 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 selectlista_atributos fromtabela1 [, ...] where[NOT] EXISTS(consulta_SQL) • Mapeamento para o cálculo relacional select a1, ..., an from T1 where EXISTS (select * from T2 where d > 5 and T2.x = T1.c) {t1.a1, ..., t1.an|t1  T1  t2  T2 (t2.d > 5  t2.x = t1.c)}

  12. Exemplos

  13. Relembrando...  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))}

  14. Exemplo

  15. Subconsulta na Cláusula FROM • Permite a geração de uma tabela derivada a ser utilizada na consulta externa • otimização: filtra linhas e colunas de uma tabela que são desejadas pela consulta externa • selectlista_atributos • from(consulta_SQL) as nome_tabela_derivada • Mapeamento para a álgebra relacional select a1 from (select x from t1 where d > 5) as t2join t3 on t3.c = t2.x a1(t3 Xt2(x ( d > 5(t1))))  = t3.c = t2.x

  16. Exemplos  Médicos.codm, ..., nroa, hora ( (Médicos  X  = Médicos.codm = C.codm C (codm, hora ( data = ’06/06/13’(Consultas))) ) )  Amb.nroa, andar, capacidade ( Amb (nroa, andar (Ambulatórios)) X  = Amb.nroa = M_ort.nroa M_ort (nroa ( cidade = ’Fpolis’(Médicos))) ) select Amb.* from (select nroa, andar from ambulatorios) as Amb join (select nroa from Medicos where cidade = ‘Fpolis') as M_ort on Amb.nroa = M_ort.nroa

More Related