Escolar Documentos
Profissional Documentos
Cultura Documentos
br
learningdatabase.com.br
26/03/2018
RODRIGOSAITO
SUBQUERIES
Subqueries são divisões de uma instrução SELECT, a qual estarão separados entre parentes;
Servem geralmente para resolver problemas que teriam que ser feitas com 2 consultas;
Também utilizada quando um resultado encontrado é base de condição para uma outra
consulta;
A ordem de execução da SUBQUERY depende de como ela é escrita;
Para as SUBQUERIES mais simples, são executadas as mais internas para depois ser
executado a mais externa. Esse tipo de subquerie também é conhecida como NÃO-
CORRELACIONADA;
Há também SUBQUERIES quer dependem tanto da query externa quando interna para ser
executada.
É quando existe um relacionamento entre as QUERIES, ou seja, para cada linha da query
mais externa, depende do resultado de uma linha (ou mais) de uma query mais interna. É
também chamada de CORRELACIONADA;
Não é necessário utilizar order by em queries mais internas;
As subconsultas devem estar entre parênteses;
Tome cuidado com subconsultas que retornam várias linhas utilizando operadores que
suporte somente uma única linha;
Exemplo de um problema que exigiria 2 consultas:
Qual(is) funcionário(s) que ganham igual ou mais que o funcionário Bruce do
departamento 60?
https://learningdatabase.com.br/2018/03/26/banco-de-dados-ii-aula-06/ 1/10
02/02/2019 Banco de Dados II – Aula 06 – learningdatabase.com.br
SELECT FIRST_NAME,
SALARY,
DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 60;
SELECT FIRST_NAME,
SALARY,
DEPARTMENT_ID
FROM EMPLOYEES
WHERE FIRST_NAME = 'Bruce';
SELECT FIRST_NAME,
SALARY,
DEPARTMENT_ID
FROM EMPLOYEES
WHERE SALARY >= 6000
AND DEPARTMENT_ID = 60;
SELECT FIRST_NAME,
SALARY,
DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 60
AND SALARY >= (SELECT SALARY
FROM EMPLOYEES
WHERE FIRST_NAME = 'Bruce');
TIPOS DE SUBQUERIES
https://learningdatabase.com.br/2018/03/26/banco-de-dados-ii-aula-06/ 2/10
02/02/2019 Banco de Dados II – Aula 06 – learningdatabase.com.br
Subqueries podem retornar uma única linha, várias linhas e várias colunas;
Quando a subquerie retorna uma única linha, podemos utilizar os operadores =, <, >, <>, <=
ou >=;
Quando a subquerie retorna várias linhas, temos que utilizar o IN, ALL ou ANY (uma ou mais
linhas)
As subqueries (internas) podem também utilizar funções de grupo (min, max, avg, …), com
isso, a subquerie retornará um única linha;
Subqueries são recursos poderosos do comando SELECT, que basicamente podemos ter
retornar qualquer informação do banco de dados;
Basicamente, é possível utilizar subquerie em qualquer cláusula de uma SELECT;
Caso a subconsulta não retorna registros, nenhum valor será retornado para toda a SELECT;
EXEMPLO 1:
EXEMPLO 2:
EXEMPLO 3
https://learningdatabase.com.br/2018/03/26/banco-de-dados-ii-aula-06/ 3/10
02/02/2019 Banco de Dados II – Aula 06 – learningdatabase.com.br
EXEMPLO 4:
EXEMPLO 5 (ERRO)
Quando temos em uma Subquerie que retorna várias linhas, temos que verificar qual o
operador que podemos utilizar. O operador precisa ser compatível com a quantidade de
retorno;
Quando temos essa situação, temos que utilizar os operadores IN, ANY e ALL;
EXEMPLO DE IN
https://learningdatabase.com.br/2018/03/26/banco-de-dados-ii-aula-06/ 4/10
02/02/2019 Banco de Dados II – Aula 06 – learningdatabase.com.br
EXEMPLO DE ANY
EXEMPLO DE ALL
OPERADORES DE CONJUNTO
INTERSECT: Retorna todas as linhas das consultas que estarão envolvidas, presentes em ambas
consultas (ou demais consultas); MINUS: Retorna todas as linhas que estão na primeira
consulta que não estão na segunda consulta;
UNION
EXEMPLO DE UNION
UNION ALL
SELECT EMPLOYEE_ID,
JOB_ID,
DEPARTMENT_ID
FROM EMPLOYEES
UNION ALL
SELECT EMPLOYEE_ID,
JOB_ID,
DEPARTMENT_ID
FROM JOB_HISTORY;
INTERSECT
Retorna as linhas que estejam em duas ou mais consultas, ou seja, somente os resultados
iguais das consultas são retornados pelo operador;
Faz a intersecção dos resultados de todas as consultas;
É necessário ter o mesmo número e tipos de colunas;
A ordem das consultas não influenciam no resultado;
O INTERSECT não ignora valores nulos;
EXEMPLO DE INTERSECT
pre class=”brush: sql; title: ; notranslate” title=””>
SELECT EMPLOYEE_ID, JOB_ID
FROM EMPLOYEES
INTERSECT SELECT EMPLOYEE_ID, JOB_ID
FROM JOB_HISTORY;
MINUS
https://learningdatabase.com.br/2018/03/26/banco-de-dados-ii-aula-06/ 7/10
02/02/2019 Banco de Dados II – Aula 06 – learningdatabase.com.br
DIRETRIZES GERAIS
Para qualquer operador, o número de colunas e os tipos de dados devem ser equivalentes
entre as consultas;
A utilização de parênteses altera a sequencia de execução dos operadores;
ORDER BY só pode ser usada no final da instrução;
ORDER BY aceitará somente os nomes das colunas da primeira consulta ou a notação
posição;
O nome das colunas são considerados os da primeira consulta;
Tuplas duplicadas são eliminadas automaticamente, com exceção de UNION ALL;
Por padrão, as saídas são ordenadas em ordem crescente, com exceção de UNION ALL;
Quando o número de colunas não são correspondentes entre as consultas, é possível
resolver com NULL, ou com uma constante do mesmo tipo equivalente;
É possível adicionar uma coluna virtual para ordenação de linhas entre as consultas;
https://learningdatabase.com.br/2018/03/26/banco-de-dados-ii-aula-06/ 8/10
02/02/2019 Banco de Dados II – Aula 06 – learningdatabase.com.br
EXEMPLO DE ORDEM
Anúncios
REPORT THIS AD
REPORT THIS AD
DESENVOLVIMENTO EM BANCO DE DADOS DQL LINGUAGEM SQL
ORACLE PL/SQL SELECT
WordPress.com.
https://learningdatabase.com.br/2018/03/26/banco-de-dados-ii-aula-06/ 10/10