subconsultas em sql. subconsulta estrutura geral select.... from.... where [at] operador ( select......

21
Subconsultas em SQL

Upload: internet

Post on 17-Apr-2015

166 views

Category:

Documents


35 download

TRANSCRIPT

Page 1: Subconsultas em SQL. Subconsulta Estrutura geral SELECT.... FROM.... WHERE [at] OPERADOR ( SELECT... FROM... [WHERE... ]) Declaração SELECT localizada

Subconsultas em SQL

Page 2: Subconsultas em SQL. Subconsulta Estrutura geral SELECT.... FROM.... WHERE [at] OPERADOR ( SELECT... FROM... [WHERE... ]) Declaração SELECT localizada

Subconsulta

• Estrutura geral

SELECT .... FROM ....

WHERE [at] OPERADOR

( SELECT ... FROM ... [WHERE ... ])

• Declaração SELECT localizada dentro de outra declaração SELECT

Page 3: Subconsultas em SQL. Subconsulta Estrutura geral SELECT.... FROM.... WHERE [at] OPERADOR ( SELECT... FROM... [WHERE... ]) Declaração SELECT localizada

Subconsulta

• Recurso anteriormente utilizado(PLEW)

1. Inexistência anterior de junção externa

2. Desempenho ruim das ligações internas

Page 4: Subconsultas em SQL. Subconsulta Estrutura geral SELECT.... FROM.... WHERE [at] OPERADOR ( SELECT... FROM... [WHERE... ]) Declaração SELECT localizada

Subconsulta

• Preterida devido:

1. Adição de junção externa no SQL-99

2. Melhora do processamento de junção interna

3. Pouca legibilidade no código com subconsulta ( leitura/ manutenção)

Page 5: Subconsultas em SQL. Subconsulta Estrutura geral SELECT.... FROM.... WHERE [at] OPERADOR ( SELECT... FROM... [WHERE... ]) Declaração SELECT localizada

Sintaxes

SELECT * FROM TABELA1[, TABELA2]

WHERE• [  [NOT]  EXISTS ( subconsulta) ]• [ [NOT]  UNIQUE ( subconsulta)]• [ atributo > | < | >= |<=  ALL ( subconsulta)]• [ atributo > | < | >= |<=  ANY ( subconsulta)]• [ atributo [,atributo2]  [NOT]  IN  ( subconsulta ) ]

Page 6: Subconsultas em SQL. Subconsulta Estrutura geral SELECT.... FROM.... WHERE [at] OPERADOR ( SELECT... FROM... [WHERE... ]) Declaração SELECT localizada

Subconsulta

SELECT descricao , preco FROM comida

WHERE preco <

( SELECT AVG(preco) FROM comida)

Page 7: Subconsultas em SQL. Subconsulta Estrutura geral SELECT.... FROM.... WHERE [at] OPERADOR ( SELECT... FROM... [WHERE... ]) Declaração SELECT localizada

Processamento de Subconsulta

SELECT descricao , preco FROM comida

WHERE preco < ( SELECT AVG(preco) FROM comida)

• ( SELECT AVG(preco) FROM comida)

(200)

2. SELECT descricao , preco FROM comida

WHERE preco < (200)

Page 8: Subconsultas em SQL. Subconsulta Estrutura geral SELECT.... FROM.... WHERE [at] OPERADOR ( SELECT... FROM... [WHERE... ]) Declaração SELECT localizada

Subconsultas que retornam de lista de valores

• Dois casos possíveis:

1. Um valor único

2. Lista de valores

O resultado da subconsulta deve estar dentro da declaração da consulta externa.

Page 9: Subconsultas em SQL. Subconsulta Estrutura geral SELECT.... FROM.... WHERE [at] OPERADOR ( SELECT... FROM... [WHERE... ]) Declaração SELECT localizada

Subconsultas: retorno de lista• WHERE + emprego de IN / NOT IN

Null

Cintia20

Ane18

Clea16

Leila14

Graça12

Roberto10

Alex8

Antonio6

Joao4

Maria2

Nome_funcNum_func

Null

Ane18

Quenia15

Graça12

Nair9

Antonio6

Tarso3

Nome_EstNum_Est

Tab. Func Tab. Est

Page 10: Subconsultas em SQL. Subconsulta Estrutura geral SELECT.... FROM.... WHERE [at] OPERADOR ( SELECT... FROM... [WHERE... ]) Declaração SELECT localizada

Subconsulta: retorno de lista• Ocorrências de Func onde num_func

liga-se com valor da coluna num_est ( Est)

SELECT num_func, nome_func FROM func

WHERE num_func IN ( select num_est FROM est)

SELECT num_func, nome_func FROM func

WHERE num_func IN ( 3, 6, 9 , 12, 15, 18, null)

Ane18

Graça12

Antonio6Equivale a uma junção interna !

Page 11: Subconsultas em SQL. Subconsulta Estrutura geral SELECT.... FROM.... WHERE [at] OPERADOR ( SELECT... FROM... [WHERE... ]) Declaração SELECT localizada

Subconsulta: retorno de lista• Ocorrências de Func onde num_func

NÃO se ligam com nenhum valor da coluna num_est ( Est)

SELECT num_func, nome_func FROM func

WHERE num_func NOT IN

( select num_est FROM est )

SELECT num_func, nome_func FROM func

WHERE num_func IN ( 3, 6, 9 , 12, 15, 18)

Page 12: Subconsultas em SQL. Subconsulta Estrutura geral SELECT.... FROM.... WHERE [at] OPERADOR ( SELECT... FROM... [WHERE... ]) Declaração SELECT localizada

Subconsultas com retorno de valor único

Uma forma de assegurar o retorno de valor único é o emprego de funções de agregação.

Operadores possíveis:

• = < <= > >=

• IN | NOT IN

• BETWEEN

Page 13: Subconsultas em SQL. Subconsulta Estrutura geral SELECT.... FROM.... WHERE [at] OPERADOR ( SELECT... FROM... [WHERE... ]) Declaração SELECT localizada

Subconsulta correlativas

• Qualquer consulta que contém uma referência para tabela da consulta externa.

• Não pode ser avaliada antes da consulta externa.

• PLEW cita como modalidade mais antiga.

Page 14: Subconsultas em SQL. Subconsulta Estrutura geral SELECT.... FROM.... WHERE [at] OPERADOR ( SELECT... FROM... [WHERE... ]) Declaração SELECT localizada

Subconsulta com Exists

• WHERE + exists ( correlativa)• Reserva um espaço separado para cada linha da

tabela na consulta externa. select num_matricula, nome from aluno

where exists

( select distinct num_matricula from nota_aluno_disciplina)

Sem atributo

Page 15: Subconsultas em SQL. Subconsulta Estrutura geral SELECT.... FROM.... WHERE [at] OPERADOR ( SELECT... FROM... [WHERE... ]) Declaração SELECT localizada

Subconsulta para ligação externa

• Empregar NOT EXISTS SELECT a.num_func, a.nome_func, b. num_est, b. nome_est

FROM func a, est b

WHERE a.num_func = b. num_est

UNION ALL

SELECT a.num_func, a.nome_func, null, null

FROM func a

WHERE NOT EXISTS( select b.num_est FROM est WHERE a.num_func = b. num_est)

Page 16: Subconsultas em SQL. Subconsulta Estrutura geral SELECT.... FROM.... WHERE [at] OPERADOR ( SELECT... FROM... [WHERE... ]) Declaração SELECT localizada

Operadores para subconsultas

• > >= < <= < >

• EXISTS

• IN/ NOT IN

• > >= < <= <>ALL

• > >= < <= <> ANY

• <>ALL equivale a NOT INT

• IN equivale a =ANY

Page 17: Subconsultas em SQL. Subconsulta Estrutura geral SELECT.... FROM.... WHERE [at] OPERADOR ( SELECT... FROM... [WHERE... ]) Declaração SELECT localizada

Exercício

Compare a) e b) e justifique a diferença.

a) select num_matricula, nome from aluno

where exists

( select distinct num_matricula from nota_aluno_disciplina)

b) select num_matricula, nome from aluno

where num_matricula in

( select distinct num_matricula from nota_aluno_disciplina)

Page 18: Subconsultas em SQL. Subconsulta Estrutura geral SELECT.... FROM.... WHERE [at] OPERADOR ( SELECT... FROM... [WHERE... ]) Declaração SELECT localizada

Operadores de Conjuntos• Equivalência com conjuntos matemáticos

• UNION/ UNION ALL

• INTERSECT CORRESPONDING BY

• EXCEPT

Page 19: Subconsultas em SQL. Subconsulta Estrutura geral SELECT.... FROM.... WHERE [at] OPERADOR ( SELECT... FROM... [WHERE... ]) Declaração SELECT localizada

Subconsultas com operadores de conjuntos

• Tratamento de consultas como conjuntos

consulta 1

UNION [ALL] | INTERSECT | EXCEPT | MINUS

consulta 2

 

* As consultas devem ter a mesma quantidade e mesmo tipo de campos como retorno para efetuar esses comandos.

Page 20: Subconsultas em SQL. Subconsulta Estrutura geral SELECT.... FROM.... WHERE [at] OPERADOR ( SELECT... FROM... [WHERE... ]) Declaração SELECT localizada
Page 21: Subconsultas em SQL. Subconsulta Estrutura geral SELECT.... FROM.... WHERE [at] OPERADOR ( SELECT... FROM... [WHERE... ]) Declaração SELECT localizada

Exercício

• Testes de operadores com sub-consultas • 1) Selecionar dados de produto se houver qualquer

ocorrência de custo superior a 100. ( exists)• 2) Selecionar se o salário de um funcionário ( que vc

escolhe ) é único. ( unique)• 3) Listar dados para todos os salários de uma cidade.

( ALL).• 4) Selecionar todos os dados dos produtos com  o custo

maior que 10. ( ALL)• 5) Selecionar o qualquer produto custo com custo maior

que 10. ( ANY)