O documento discute consultas aninhadas, que permitem executar consultas dentro de outras consultas para obter resultados finais. Apresenta três tipos de subconsultas - escalar, única linha e tabela - e exemplos de como usar operadores como IN, EXISTS e UNIQUE em consultas aninhadas. Também explica funções de agregação como COUNT, SUM, AVG, MIN e MAX para realizar cálculos em consultas SQL.
2. Consultas aninhadas
• O resultado de uma consulta é utilizado por outra consulta, de
forma encadeada e no mesmo comando SQL
• O resultado do comando SELECT mais interno (subselect) é usado
por outro SELECT mais externo para obter o resultado final.
4. Consultas aninhadas
• Subconsultas devem ser escritas entre parênteses ( )
• Existem 3 tipos de subconsultas
ESCALAR → Retornam um único valor
ÚNICA LINHA → Retornam várias colunas, mas apenas uma
única linha é obtida
TABELA → Retornam uma ou mais colunas e múltiplas linhas
6. Consultas aninhadas
• Exemplo:
SELECT cod_disciplina
FROM Director WHERE endereco IN
( SELECT endereco FROM Professor
WHERE cod_depto= (SELECT numero_depto
FROM Departamento
WHERE nome_depto =
‘Engenharia’ );
SELECT coluna(s)
FROM tabela(s)
WHERE coluna operador (SELECT coluna FROM
tabela WHERE condições);
7. Tupla
• É uma função finita que mapeia nomes de campos para um
conjunto de valores inter-relacionados. No banco de dados Tupla é
você preencher oque a tabela espera em apenas uma unidade
conceitual.
Um dos maiores usos da tupla era para retornar mais de um valor
em um método. Então você encapsula estes valores dentro da tupla.
8. Comparações Set & Multi Set
Operações SET, em SQL, são um conjunto de operações realizadas
sobre tabelas que se assemelham às operações realizadas sobre
conjuntos na teoria dos conjuntos. Entre essas operações estão
a união e interseção, que quando aplicadas às tabelas, através dos
operadores padrões da SQL, resultam em novas tabelas.
No contexto da SQL, estes operadores combinam dois ou mais
comandos select onde o retorno depende operador utilizado.
9. Operador UNION
• Em SQL a cláusula UNION combina os resultados de duas
consultas SQL em uma única para todas as linhas
correspondentes. As duas consultas devem resultar no mesmo
número de colunas e em tipos de dados compatíveis com o
objetivo de unirem-se. Quaisquer registros duplicados são
automaticamente removidos a menos que UNION ALL seja usado.
• Observa que UNION não garante a ordem das linhas as linhas do
segundo operando ppodem aparecer antes depois ou misturadas
com as linhas do primeiro operando. Em situações onde uma
ordem específica é desejada, ORDER BY deve ser usada.
• Observe que UNION ALL pode ser mais rápido que UNION.
10. Um simples exemplo poderia ser um banco de dados com as tabelas
vendas2005 & vendas2006 que possuem estruturas idêndicas mas
são separadas devido ás considerações do desempenho.
Dadas as tabelas: Executando esta declaração:
SELECT * FROM vendas 2005
UNION
SELECT * FROM vendas 2006
11. Produz este conjunto de resultados, embora a ordem das
linhas podem variar devido a cláusula ORDER BY nao ter
sido fronecida.
Observe que há duas linhas para João devido estas linhas
serem distintas através de sua colunas. Há apenas uma linha
apenas para o Alex porque estas linhas não são distintas para as
para as duas colunas.
UNION ALL fornece resultados diferentes devido ele não eleminar
duplicações. Executando esta declaração: SELECT * FROM vendas 2005
UNION ALL
SELECT * FROM vendas 2006
13. Multiset
Cria uma istância de um multiconjunto de uma lista de valores. Todos
os valores no constructor MULTISET devem ser de um tipo
compatível. Construtores multiconjuntos vazios não são permitidos.
Sintaxe:
MULTISET ( Expression [{, Expression
--or
{ Expression [{, Expression }] }
14. Consultas aninhadas independentes:
• Em consultas aninhadas independentes, a execução da consulta
começa da consulta mais interna para as consultas mais externas.
A execução da consulta interna é independente da consulta
externa, mas o resultado da consulta interna é usado na execução
da consulta externa. Vários operadores como IN, NOT IN, ANY,
ALL etc são usados para escrever consultas aninhadas
independentes.
15. • Um outro ponto importante a ser mencionado é a possibilidade de
uma subconsulta aninhada poder conter outras consultas
aninhadas, como demonstra o exemplo a seguir:
Exemplo: Encontrar o nome de todos os marinheiros que reservaram
um barco vermelho.
SELECT S.sname FROM sailors S WHERE S.sid IN
(SELECT R.sid FROM reserves R WHERE R.sid IN
(SELECT B.bid FROM boats B WHERE B.color = ‘red’))
16. Consultas aninhadas correlacionadas
• Consultas aninhadas correlacionadas:
• Em consultas aninhadas correlacionadas, a saída da consulta interna depende
da linha que está sendo executada atualmente na consulta externa. por
exemplo; Se quisermos descobrir S_NAME de ESTUDANTES que estão
matriculados em C_ID 'C1', isso pode ser feito com a ajuda de uma consulta
aninhada correlacionada como;
• Selecione S_NAME de STUDENT S onde EXISTS
• (selecione * de STUDENT_COURSE SC onde S. S_ID = SC. S_ID e SC. C_ID =
'C1');
17. O EXISTS
• A cláusula EXISTS faz uma verificação se existe algum resultado para a subquery
informada. Caso haja, o resultado da consulta principal é exibido. É muito comum sua
utilização quando se deseja trazer resultados onde um valor específico existe dentro de
outra tabela.
• EXISTS simplesmente testa se a consulta interna apresenta qualquer linha. Se apresentar,
a consulta externa prossegue. Se não apresentar, a consulta externa não é executada e
toda a instrução SQL não apresenta qualquer resultado
18. A sintaxe de EXISTS é:
• SELECT "nome_coluna1"
FROM "nome_tabela1"
WHERE EXISTS
(SELECT *
FROM "nome_tabela2"
WHERE "condição");
19. UNIQUE
• A função UNIQUE garante que todos os valores numa coluna são diferentes.
• Por exemplo, na seguinte instrução’.
• CREATE TABLE Customer
(SID integer UNIQUE,
Last_Name varchar (30),
First_Name varchar (30));
• A coluna "SID" tem uma restrição única e, por conseguinte, não pode incluir
valores duplicados. Tal restrição não suporta as colunas "Last_Name" e
"First_Name". Assim sendo, se a tabela já possuir as seguintes linhas:
21. • As funções de agregação têm como objetivo realizar
cálculos no SQL, tais como: contagem, soma, média,
mínimo emáximo.
22. As funções de agregação têm como objetivo realizar
cálculos no SQL, tais como: contagem, soma, média,
mínimo emáximo.
COUNT
COUNT(*)
COUNT(*)
COUNT(DISTINCT
)
COUNT
(DISTINCT)
SUM
SUM AVG MIN/MAX
24. Count
Retorna a quantidade total
de valores de uma coluna.
O COUNT ignora os valores nulos
de uma coluna. Por isso o
resultado pode mudar
dependendo da coluna escolhida.