Os exemplos apresentados usam o esquema lógico do BD Empresa, conforme abaixo.
Uma subconsulta consiste em um comando SELECT posicionado dentro de um outro comando SQL. Com maior frequência, subconsultas estão inseridas em outras consultas, ou seja, consultas aninhadas:
- A subconsulta é denominada consulta interna.
- A consulta na qual a subconsulta está embutida é chamada consulta externa.
- A subconsulta usualmente está localizada na cláusula WHERE, na cláusula FROM e/ou na cláusula SELECT, conforme necessário.
Um classificação comum para subconsultas é:
- Subconsulta Independente: a execução da subconsulta é independente da consulta mais externa:
- a subconsulta é executada uma única vez;
- o resultado da subconsulta é utilizado para o processamento da consulta mais externa.
- Subconsulta Corretata: a execução da subconsulta é dependente da consulta mais externa:
- a subconsulta é potencialmente executada várias vezes:
- a subconsulta é avaliada uma vez para cada tupla (ou combinação de tuplas) na consulta externa.
- a subconsulta requer dados oriundos da consulta externa para ser processada.
- a subconsulta é potencialmente executada várias vezes:
As cláusulas ANY e ALL são usadas conjuntamente com subconsultas com os seguintes significados:
■ O predicado que inclui a cláusula ANY será verdadeiro caso seja satisfeito para pelo menos um (qualquer) dos elementos resultantes da subconsulta.
■ O predicado que inclui a cláusula ALL será verdadeiro caso seja satisfeito para todos os elementos resultantes da subconsulta.
Classificação | SQL |
---|---|
Subconsulta independente | SELECT Pnome, Unome FROM FUNCIONARIO WHERE Cpf = ANY ( SELECT Cpf_gerente FROM DEPARTAMENTO ) |
Classificação | SQL |
---|---|
Subconsulta independente | SELECT Pnome, Unome, Salario FROM FUNCIONARIO WHERE Salario <= ALL ( SELECT Salario FROM FUNCIONARIO ) |
Classificação | SQL |
---|---|
Subconsulta independente | SELECT Pnome, Unome, Salario FROM FUNCIONARIO WHERE Salario >= ALL ( SELECT Salario FROM FUNCIONARIO ) |
Subconsulta independente Subconsulta independente |
SELECT Pnome, Unome, Salario FROM FUNCIONARIO WHERE Salario NOT IN ( SELECT Salario FROM FUNCIONARIO WHERE Salario < ANY ( SELECT Salario FROM FUNCIONARIO ) ) |
Subconsulta independente Subconsulta correlata |
SELECT Pnome, Unome, Salario FROM FUNCIONARIO AS EXTERNA WHERE Salario NOT IN ( SELECT Salario FROM FUNCIONARIO AS CENTRAL WHERE EXISTS ( SELECT Salario FROM FUNCIONARIO AS INTERNA WHERE CENTRAL.Salario < INTERNA.Salario ) ) |
Classificação | SQL |
---|---|
Subconsulta correlata | SELECT Pnome, Unome FROM FUNCIONARIO WHERE ( SELECT COUNT(*) FROM TRABALHA_EM WHERE FUNCIONARIO.Cpf = TRABALHA_EM.Fcpf ) IN (1, 4) |
Classificação | SQL |
---|---|
Subconsulta independente | SELECT Cpf, Pnome, Unome, Salario FROM FUNCIONARIO WHERE Cpf IN ( SELECT Cpf_supervisor FROM FUNCIONARIO ) OR Cpf IN ( SELECT Fcpf FROM DEPENDENTE ) |
Classificação | SQL |
---|---|
Subconsulta independente | SELECT Cpf, Pnome, Unome, Salario FROM FUNCIONARIO WHERE Cpf IN ( SELECT Cpf_supervisor FROM FUNCIONARIO ) AND Cpf IN ( SELECT Fcpf FROM DEPENDENTE ) |
Classificação | SQL |
---|---|
Subconsulta independente | SELECT Cpf, Pnome, Unome, Salario FROM FUNCIONARIO WHERE Cpf IN ( SELECT Cpf_supervisor FROM FUNCIONARIO ) AND Cpf NOT IN ( SELECT Fcpf FROM DEPENDENTE ) |
Criar uma issue no projeto https://github.com/plinioleitao/bd-2021-1-bia, com o título "Tópico 21", para responder:
- Você consegue entender e usar os exemplos de subconsulta apresentados no tópico?
Favor selecionar uma das respostas a seguir:
"Sim, eu consigo entender e usar os exemplos de subconsulta apresentados no tópico", ou
"Não, pois eu tenho as seguintes dificuldades: blá, blá, ...". Nesta resposta, você deve descrever as suas dificuldades, em vez de apenas listá-las.
- Issue criada no projeto https://github.com/plinioleitao/bd-2021-1-bia, cujo título é "Tópico 21", para entender e usar subconsultas em consultas da SQL.