Sub-Consultas Oracle

Preview:

DESCRIPTION

Sub-Consultas SQL Oracle

Citation preview

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

66

SubconsultasSubconsultas

6-2 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

ObjetivosObjetivos

Depois de completar esta lição, você poderá Depois de completar esta lição, você poderá fazer o seguinte: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

Depois de completar esta lição, você poderá Depois de completar esta lição, você poderá fazer o seguinte: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-3 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

Usando uma Subconsulta para Resolver um Problema

Usando uma Subconsulta para Resolver um Problema

"Quem tem um salário maior que o de Jones?""Quem tem um salário maior que o de Jones?""Quem tem um salário maior que o de Jones?""Quem tem um salário maior que o de Jones?"

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

Consulta principal

??

"Qual é o salário de Jones?" ??

Subconsulta

6-4 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

SubconsultasSubconsultas

• A subconsulta (consulta interna) é executada uma vez antes da consulta principal.

• O resultado da subconsulta é usado pela consulta principal (consulta externa).

• A subconsulta (consulta interna) é executada uma vez antes da consulta principal.

• O resultado da subconsulta é usado pela consulta principal (consulta externa).

SELECT select_listFROM tabelaWHERE operador expr

(SELECT select_list FROM tabela);

6-5 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

2975

SQL> SELECT ename 2 FROM emp 3 WHERE sal > 4 (SELECT sal 5 FROM emp 6 WHERE empno=7566);

Usando uma SubconsultaUsando uma Subconsulta

ENAME----------KINGFORDSCOTT

ENAME----------KINGFORDSCOTT

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

Diretrizes para o Uso de Subconsultas

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.

• 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-7 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

Tipos de SubconsultasTipos de Subconsultas• Subconsulta de uma única linha• Subconsulta de uma única linha

Consulta principal

Subconsulta retornaretorna

CLERKCLERK

Consulta principal

Subconsulta

• Subconsulta de várias linhas• Subconsulta de várias linhas

CLERK CLERK MANAGERMANAGER

retornaretorna

• Subconsulta de várias colunas• Subconsulta de várias colunas

CLERK 7900CLERK 7900MANAGER 7698MANAGER 7698

Main query

Subquery retornaretorna

Consulta principal

Subconsulta

6-8 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

Subconsultas de uma Única LinhaSubconsultas de uma Única Linha

• Retorne somente uma linha

• Use operadores de comparação de uma única linha

• Retorne somente uma linha

• Use operadores de comparação de uma única linha

Operador

=

>

>=

<

<=

<>

Significado

Igual a

Maior do que

Maior do que ou igual a

Menor do que

Menor ou igual a

Diferente de

6-9 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

Executando Subconsultas de uma Única Linha

Executando Subconsultas de uma Única Linha

CLERK

1100

ENAME JOB---------- ---------MILLER CLERK

ENAME JOB---------- ---------MILLER CLERK

SQL> SELECT ename, job 2 FROM emp 3 WHERE job = 4 (SELECT job 5 FROM emp 6 WHERE empno = 7369) 7 AND sal > 8 (SELECT sal 9 FROM emp 10 WHERE empno = 7876);

6-10 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

Usando Funções de Grupo em uma Subconsulta

Usando Funções de Grupo em uma Subconsulta

800

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

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

SQL> SELECT ename, job, sal 2 FROM emp 3 WHERE sal = 4 (SELECT MIN(sal) 5 FROM emp);

6-11 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

Cláusula HAVING com Subconsultas

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.

• O Oracle Server primeiro executa as subconsultas.

• O Oracle Server retorna os resultados para a cláusula HAVING da consulta principal.

800

SQL> SELECT deptno, MIN(sal) 2 FROM emp 3 GROUP BY deptno 4 HAVING MIN(sal) > 5 (SELECT MIN(sal) 6 FROM emp 7 WHERE deptno = 20);

6-12 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

O que Há de Errado com esta Instrução? O que Há de Errado com esta Instrução?

SQL> SELECT empno, ename 2 FROM emp 3 WHERE sal = 4 (SELECT MIN(sal) 5 FROM emp 6 GROUP BY deptno);

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

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

Operador de uma única linha com

Operador de uma única linha com

subconsulta de várias

subconsulta de várias linhaslinhas

6-13 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

Esta Instrução Irá Funcionar? Esta Instrução Irá Funcionar?

no rows selectedno rows selected

A subconsulta não

A subconsulta não retornaretorna nenhum

nenhum valorvalor

SQL> SELECT ename, job 2 FROM emp 3 WHERE job = 4 (SELECT job 5 FROM emp 6 WHERE ename='SMYTHE');

6-14 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

Subconsultas de Várias LinhasSubconsultas de Várias Linhas

• Retorne mais de uma linha

• Use operadores de comparação de várias linhas

• Retorne mais de uma linha

• Use operadores de comparação de várias linhas

Operador

IN

ANY

ALL

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

6-15 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

Usando o Operador ANY em Subconsultas de Várias Linhas

Usando o Operador ANY em Subconsultas de Várias Linhas

9508001100

1300

EMPNO ENAME JOB--------- ---------- --------- 7654 MARTIN SALESMAN 7521 WARD SALESMAN

EMPNO ENAME JOB--------- ---------- --------- 7654 MARTIN SALESMAN 7521 WARD SALESMAN

SQL> SELECT empno, ename, job 2 FROM emp 3 WHERE sal < ANY 4 (SELECT sal 5 FROM emp 6 WHERE job = 'CLERK') 7 AND job <> 'CLERK';

6-16 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

Usando o Operador ALL em Subconsultas de Várias Linhas

Usando o Operador ALL em Subconsultas de Várias Linhas

2916.6667

2175

1566.6667

EMPNO ENAME JOB--------- ---------- --------- 7839 KING PRESIDENT 7566 JONES MANAGER 7902 FORD ANALYST 7788 SCOTT ANALYST

EMPNO ENAME JOB--------- ---------- --------- 7839 KING PRESIDENT 7566 JONES MANAGER 7902 FORD ANALYST 7788 SCOTT ANALYST

SQL> SELECT empno, ename, job 2 FROM emp 3 WHERE sal > ALL 4 (SELECT avg(sal) 5 FROM emp 6 GROUP BY deptno);

6-17 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

SumárioSumário

As subconsultas são úteis quando uma As subconsultas são úteis quando uma consulta baseia-se em valores desconhecidos.consulta baseia-se em valores desconhecidos.As subconsultas são úteis quando uma As subconsultas são úteis quando uma consulta baseia-se em valores desconhecidos.consulta baseia-se em valores desconhecidos.

SELECT select_listFROM tabelaWHERE operador expr

(SELECT select_list FROM tabela);

6-18 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

Visão Geral do ExercícioVisã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

• 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

Recommended