6

Subconsultas

Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

Objetivos
Depois de completar esta lição, você poderá fazer o seguinte: • Descrever os tipos de problemas que as subconsultas podem resolver • Definir as subconsultas • Listar os tipos de subconsultas • Criar subconsultas de uma única linha e de várias linhas

6-2

Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

Usando uma Subconsulta para Resolver um Problema
"Quem tem um salário maior que o de Jones?"
Consulta principal

?

"Que funcionários têm um salário maior que o salário de Jones?"
Subconsulta

?

"Qual é o salário de Jones?"

6-3

Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

Subconsultas
SELECT FROM WHERE select_list tabela operador expr (SELECT FROM

select_list tabela);

• •

A subconsulta (consulta interna) é executada uma vez antes da consulta principal. O resultado da subconsulta é usado pela consulta principal (consulta externa).

6-4

Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

Usando uma Subconsulta
SQL> SELECT ename 2 FROM emp 2975 3 WHERE sal > 4 (SELECT sal 5 FROM emp 6 WHERE empno=7566); ENAME ---------KING FORD SCOTT

6-5

Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

Diretrizes para o Uso de Subconsultas
• Coloque as subconsultas entre parênteses. • Coloque as subconsultas no lado direito do operador de comparação. • Não adicione uma cláusula ORDER BY a uma subconsulta. • Use operadores de uma única linha com subconsultas de uma única linha. • Use operadores de várias linhas com subconsultas de várias linhas.
6-6 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

Tipos de Subconsultas
• Subconsulta de uma única linha
Consulta principal Subconsulta retorna

CLERK

• Subconsulta de várias linhas
Consulta principal Subconsulta retorna

CLERK MANAGER

• Subconsulta de várias colunas
Consulta principal Main query Subconsulta Subquery
6-7

retorna

CLERK 7900 MANAGER 7698

Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

Subconsultas de uma Única Linha
• Retorne somente uma linha • Use operadores de comparação de uma única linha
Operador = > >= < <= <>
6-8

Significado Igual a Maior do que Maior do que ou igual a Menor do que Menor ou igual a Diferente de

Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

Executando Subconsultas de uma Única Linha
SQL> 2 3 4 5 6 7 8 9 10 SELECT FROM WHERE ename, job emp job = (SELECT FROM WHERE sal > (SELECT FROM WHERE
CLERK

job emp empno = 7369)
1100

AND

sal emp empno = 7876);

ENAME JOB ---------- --------MILLER CLERK
6-9 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

Usando Funções de Grupo em uma Subconsulta
SQL> SELECT 2 FROM 3 WHERE 4 5 ename, job, sal emp sal = (SELECT FROM
800

MIN(sal) emp);

ENAME JOB SAL ---------- --------- --------SMITH CLERK 800

6-10

Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

Cláusula HAVING com Subconsultas
• O Oracle Server primeiro executa as subconsultas. • O Oracle Server retorna os resultados para a cláusula HAVING da consulta principal.
SQL> 2 3 4 5 6 7 SELECT FROM GROUP BY HAVING deptno, MIN(sal) emp deptno MIN(sal) > (SELECT FROM WHERE

800

MIN(sal) emp deptno = 20);

6-11

Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

O que Há de Errado com esta Instrução?
SQL> SELECT empno, ename 2 FROM emp m a co 3 WHERE sal = h a li n s 4 (SELECT MIN(sal) únic inha a m 5 emp de u várias l FROM r GROUP BY deptno); a de r6 do ERROR: ORA-01427: A subconsulta de uma única linha retorna mais de uma linha (Single-row subquery returns more than one row) no rows selected

Ope nsulta ubco s

6-12

Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

Esta Instrução Irá Funcionar?
SQL> SELECT ename, 2 FROM emp 3 WHERE job = 4 5 6 no rows selected job (SELECT job FROM emp WHERE ename='SMYTHE');

não ta sul con sub A

r alo mv u enh n rna reto

6-13

Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

Subconsultas de Várias Linhas
• Retorne mais de uma linha • Use operadores de comparação de várias linhas
Operador IN ANY Significado Igual a qualquer membro na lista Compare o valor a cada valor retornado pela subconsulta Compare o valor a todo valor retornado pela subconsulta

ALL

6-14

Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

Usando o Operador ANY em Subconsultas de Várias Linhas
SQL> 2 3 4 5 6 7 SELECT FROM WHERE empno, ename, job 1300 1100 emp 800 sal < ANY 950 (SELECT sal FROM emp WHERE job = 'CLERK') job <> 'CLERK'; JOB --------SALESMAN SALESMAN

AND

EMPNO --------7654 7521

ENAME ---------MARTIN WARD

6-15

Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

Usando o Operador ALL em Subconsultas de Várias Linhas
SQL> SELECT 2 FROM 3 WHERE 4 5 6 EMPNO --------7839 7566 7902 7788 empno, ename, job 1566.6667 2175 emp 2916.6667 sal > ALL (SELECT avg(sal) FROM emp GROUP BY deptno); JOB --------PRESIDENT MANAGER ANALYST ANALYST

ENAME ---------KING JONES FORD SCOTT

6-16

Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

Sumário
As subconsultas são úteis quando uma consulta baseia-se em valores desconhecidos.
SELECT FROM WHERE select_list tabela operador expr (SELECT select_list FROM tabela);

6-17

Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

Visão Geral do Exercício
Criando subconsultas para valores de consulta com base em critérios desconhecidos Usando subconsultas para descobrir quais valores existem em um conjunto de dados e não em outro

• •

6-18

Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

6-19

Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

6-20

Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

Sign up to vote on this title
UsefulNot useful