Aula sql7
Aula sql7
Aula sql7
Subconsulta:
Consulta principal
retornos ST_CLERK
Subconsulta
SA_MAN
Subconsultas de uma única linha
◦ Retorna somente uma linha
◦ Use operadores de comparação de uma única linha
Operator Significado
= Igual a
> Maior que
>= Maior que ou igual a
< Menor que
<= Menor que ou igual a
<> Diferente de
Executando as subconsultas de uma
única linha
SELECT last_name, job_id, salary
FROM employees
WHERE job_id = SA_REP
(SELECT job_id
FROM employees
WHERE last_name = 'Taylor')
AND salary > 8600
(SELECT salary
FROM employees
WHERE last_name = 'Taylor');
Usando funções de grupo em uma
subconsulta
SELECT last_name, job_id, salary
FROM employees
WHERE salary = 2500
(SELECT MIN(salary)
FROM employees);
Cláusula HAVING com subconsultas
◦ O Oracle executa as subconsultas primeiro.
◦ O Oracle retorna resultados para a cláusula HAVING da
consulta principal.
SELECT department_id, MIN(salary)
FROM employees
GROUP BY department_id 2500
HAVING MIN(salary) >
(SELECT MIN(salary)
FROM employees
WHERE department_id = 50);
O que está errado com esta
instrução?
SELECT employee_id, last_name
FROM employees
WHERE salary =
(SELECT MIN(salary)
FROM employees
GROUP BY department_id);
Operador de uma
única linha com
subconsulta de
várias linhas
Nenhuma linha retornada pela
consulta interna
SELECT last_name, job_id
FROM employees
WHERE job_id =
(SELECT job_id
FROM employees
WHERE last_name = 'Haas');
Consulta principal
WHERE (MANAGER_ID, DEPARTMENT_ID) IN
Subconsulta
100 90
102 60
124 50
GET
a linha candidata da consulta externa
EXECUTE
a consulta interna usando o valor da linha candidata
USE
valores da consulta interna para qualificar
ou desqualificar a linha candidata
Subconsultas Correlacionadas
A subconsulta se refere a uma coluna com base em uma tabela na
consulta pai.
…
Cláusula WITH
◦ Com a cláusula WITH, você pode usar o mesmo bloco de
consulta em uma instrução SELECT quando ele ocorre mais
de uma vez em uma consulta complexa.
◦ A cláusula WITH recupera os resultados de um bloco de
consulta e o armazena no tablespace temporário do usuário.
◦ A cláusula WITH pode melhorar o desempenho.
◦ Inline view
Cláusula WITH: Exemplo
Com a cláusula WITH, crie uma consulta para exibir o nome do
departamento e o total de salários dos departamentos cujo
salário total seja maior que o salário médio de todos os
departamentos.
WITH
dept_costs AS (
SELECT d.department_name, SUM(e.salary) AS dept_total
FROM employees e JOIN departments d
ON e.department_id = d.department_id
GROUP BY d.department_name),
avg_cost AS (
SELECT SUM(dept_total)/COUNT(*) AS dept_avg
FROM dept_costs)
SELECT *
FROM dept_costs
WHERE dept_total >
(SELECT dept_avg
FROM avg_cost)
ORDER BY department_name;
O que é uma view?
Tabela EMPLOYEES
Vantagens das views
Para restringir Para simplificar
acesso de dados consultas complexas
DESCRIBE empvu80
Criando uma view
◦ Crie uma view usando aliases de colunas na subconsulta: