Resumo : neste tutorial, você aprenderá sobre a subconsulta SQLite para construir consultas mais legíveis e complexas.
Introdução à subconsulta SQLite
Uma subconsulta é uma SELECT
instrução aninhada em outra instrução. Veja a seguinte declaração.
SELECT column_1
FROM table_1
WHERE column_1 = (
SELECT column_1
FROM table_2
);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A consulta a seguir é a consulta externa :
SELECT column_1
FROM table_1
WHERE colum_1 =
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
E a consulta a seguir é a subconsulta .
(SELECT column_1
FROM table_2)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Você deve usar um par de parênteses para incluir uma subconsulta. Observe que você pode aninhar uma subconsulta dentro de outra subconsulta com uma certa profundidade.
Normalmente, uma subconsulta retorna uma única linha como um valor atômico, embora possa retornar várias linhas para comparar valores com o IN
operador.
Você pode usar uma subconsulta nas cláusulas SELECT
, FROM
, WHERE
e JOIN
.
Exemplos de subconsulta SQLite
Usaremos as tabelas tracks
e albums
do banco de dados de exemplo para a demonstração.
1) Subconsulta SQLite no WHERE
exemplo da cláusula
Você pode usar uma subconsulta simples como condição de pesquisa. Por exemplo, a instrução a seguir retorna todas as faixas do álbum com o título Let There Be Rock
SELECT trackid,
name,
albumid
FROM tracks
WHERE albumid = (
SELECT albumid
FROM albums
WHERE title = 'Let There Be Rock'
);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A subconsulta retorna o id do álbum com o título 'Let There Be Rock'
. A consulta usa o operador igual (=) para comparar o albumid
retornado pela subconsulta com o albumid
da tracks
tabela.
Se a subconsulta retornar vários valores, você poderá usar o IN
operador para verificar a existência de um único valor em relação a um conjunto de valores.
Consulte o seguinte employees
e customers
a tabela no banco de dados de exemplo:
Por exemplo, a consulta a seguir retorna os clientes cujos representantes de vendas estão no Canadá.
SELECT customerid,
firstname,
lastname
FROM customers
WHERE supportrepid IN (
SELECT employeeid
FROM employees
WHERE country = 'Canada'
);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A subconsulta retorna uma lista de IDs dos funcionários localizados no Canadá. A consulta externa usa o IN
operador para localizar os clientes que possuem o ID do representante de vendas na lista.
2) Subconsulta SQLite no FROM
exemplo da cláusula
Às vezes você deseja aplicar funções agregadas a uma coluna várias vezes. Por exemplo, primeiro você deseja somar o tamanho de um álbum e depois calcular o tamanho médio de todos os álbuns. Você pode fazer a seguinte consulta.
SELECT AVG(SUM(bytes)
FROM tracks
GROUP BY albumid;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Esta consulta não é válida.
Para corrigir isso, você pode usar uma subconsulta na FROM
cláusula da seguinte forma:
SELECT
AVG(album.size)
FROM
(
SELECT
SUM(bytes) SIZE
FROM
tracks
GROUP BY
albumid
) AS album;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
AVG(tamanho do álbum) --------------- 338288920.317
Neste caso, o SQLite primeiro executa a subconsulta na FROM
cláusula e retorna um conjunto de resultados. Então, o SQLite usa esse conjunto de resultados como uma tabela derivada na consulta externa.
Subconsulta correlacionada SQLite
Todas as subconsultas que você viu até agora podem ser executadas de forma independente. Em outras palavras, não depende da consulta externa.
A subconsulta correlacionada é uma subconsulta que usa os valores da consulta externa. Ao contrário de uma subconsulta ordinal, uma subconsulta correlacionada não pode ser executada de forma independente.
A subconsulta correlacionada não é eficiente porque é avaliada para cada linha processada pela consulta externa.
A consulta a seguir usa uma subconsulta correlacionada para retornar os álbuns cujo tamanho é inferior a 10 MB.
SELECT albumid,
title
FROM albums
WHERE 10000000 > (
SELECT sum(bytes)
FROM tracks
WHERE tracks.AlbumId = albums.AlbumId
)
ORDER BY title;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Como funciona a consulta.
- Para cada linha processada na consulta externa, a subconsulta correlacionada calcula o tamanho dos álbuns das faixas que pertencem ao álbum atual usando a
SUM
função. - O predicado na
WHERE
cláusula filtra os álbuns que possuem tamanho maior ou igual a 10MB (10000000 bytes).
Subconsulta correlacionada SQLite no SELECT
exemplo de cláusula
A consulta a seguir usa uma subconsulta correlacionada na SELECT
cláusula para retornar o número de faixas em um álbum.
SELECT albumid,
title,
(
SELECT count(trackid)
FROM tracks
WHERE tracks.AlbumId = albums.AlbumId
)
tracks_count
FROM albums
ORDER BY tracks_count DESC;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Neste tutorial, apresentamos a subconsulta e mostramos várias maneiras de usar uma subconsulta em uma consulta para selecionar dados de tabelas.