Anda di halaman 1dari 17

Subconsultas

SQL

Objetivos

Descrever os tipos de problemas que as subconsultas podem


resolver;

Definir subconsultas; Listar os tipos de subconsultas; Criar subconsultas de uma nica e de vrias linhas;

SQL

Usando uma Subconsulta para Resolver um Problema


Quem tem um salrio maior que o de Abel?
Consulta Principal:

Que funcionrios tm salrios maiores que o de Abel?


Subconsulta

Qual o salrio de Abel?

SQL

Sintaxe de Subconsulta
SELECT FROM WHERE lista_de_seleo tabela operador expr (SELECT FROM

lista_de_seleo tabela);

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

SQL

Usando uma Subconsulta


SELECT last_name FROM employees 11000 WHERE salary > (SELECT salary FROM employees WHERE last_name = 'Abel');

SQL

Diretrizes para o Uso de Subconsultas

Coloque as subconsultas entre parnteses; Coloque as subconsultas aps a condio de comparao; Use operadores de uma nica linha com subconsultas de uma nica linha e use operadores de vrias linhas com subconsultas de vrias linhas.

SQL

Tipos de Subconsultas

Subconsulta de uma nica linha


Consulta principal Subconsulta retorna

ST_CLERK

Subconsulta de vrias linhas


Consulta principal Subconsulta retorna

ST_CLERK SA_MAN

SQL

Subconsultas de uma nica Linha


Retorna apenas uma linha; Use operadores de comparao de uma nica linha.
Operador = > >= < <= <> Operador Igual a Maior que Maior que ou igual a Menor que Menor que ou igual a Diferente de
SQL

Executando Subconsultas de uma nica Linha


SELECT last_name, job_id, salary FROM employees ST_CLERK WHERE job_id = (SELECT job_id FROM employees WHERE employee_id = 141) 2600 AND salary > (SELECT salary FROM employees WHERE employee_id = 143);

SQL

Usando Funes de Grupo em uma Subconsulta


SELECT last_name, job_id, salary FROM employees 2500 WHERE salary = (SELECT MIN(salary) FROM employees);

SQL

A Clusula HAVING com Subconsultas


O servidor executa primeiro as subconsultas; Retorna os resultados para a clusula HAVING da consulta principal.

SELECT FROM GROUP BY HAVING

department_id, MIN(salary) employees department_id 2500 MIN(salary) > (SELECT MIN(salary) FROM employees WHERE department_id = 50);

SQL

O que h de Errado com esta Instruo?


SELECT employee_id, last_name FROM employees WHERE salary = (SELECT MIN(salary) FROM employees GROUP BY department_id);

ERROR ERROR at at line line 4: 4: ORA-01427: ORA-01427: single-row single-row subquery subquery returns returns more more than than one one row row

SQL

Esta Instruo Retornar Linhas?

SELECT last_name, job_id FROM employees WHERE job_id = (SELECT job_id FROM employees WHERE last_name = 'Haas');

no no rows rows selected selected

A subconsulta no retorna nenhum valor

SQL

Subconsultas de Vrias Linhas


Retorne mais de uma linha; Use operadores de comparao de vrias linhas.

Operador IN ANY

Significado Igual a qualquer membro da lista Compare o valor a cada valor retornado pela subconsulta Compare o valor a todo valor retornado pela subconsulta

ALL

SQL

Usando o Operador ANY em Subconsultas de Vrias Linhas


SELECT employee_id, last_name, job_id, salary FROM employees 9000, 6000, 4200 WHERE salary < ANY (SELECT salary FROM employees WHERE job_id = 'IT_PROG') AND job_id <> 'IT_PROG';

SQL

Usando o Operador ALL em Subconsultas de Vrias Linhas


SELECT employee_id, last_name, job_id, salary FROM employees 9000, 6000, 4200 WHERE salary < ALL (SELECT salary FROM employees WHERE job_id = 'IT_PROG') AND job_id <> 'IT_PROG';

SQL

Valores Nulos em uma Subconsulta

SELECT emp.last_name FROM employees emp WHERE emp.employee_id NOT IN (SELECT mgr.manager_id FROM employees mgr); no rows selected

SQL