Resumo :neste tutorial, você aprenderá sobre a subconsulta SQLite para construir consultas mais legíveis e complexas.
Introdução à subconsulta SQLite
Uma subconsulta é um
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
);
Code language: SQL (Structured Query Language) (sql)
A consulta a seguir é a consulta externa :
SELECT column_1
FROM table_1
WHERE colum_1 =
Code language: SQL (Structured Query Language) (sql)
E a consulta a seguir é a subconsulta .
(SELECT column_1
FROM table_2)
Code language: SQL (Structured Query Language) (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 no
SELECT
, FROM
, WHERE
e JOIN
cláusulas. Exemplos de subconsulta SQLite
Usaremos as
tracks
e albums
tabelas do banco de dados de exemplo para a demonstração. 1) Subconsulta SQLite em WHERE
exemplo de 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'
);
Code language: SQL (Structured Query Language) (sql)
A subconsulta retorna o id do álbum com o título
'Let There Be Rock'
. A consulta usa o operador igual (=) para comparar albumid
retornado pela subconsulta com o albumid
nas 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. Veja os seguintes
employees
e customers
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'
);
Code language: SQL (Structured Query Language) (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 têm o ID de representante de vendas na lista. 2) Subconsulta SQLite no FROM
exemplo de 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, em seguida, calcular o tamanho médio de todos os álbuns. Você pode vir acima com a seguinte consulta.
SELECT AVG(SUM(bytes)
FROM tracks
GROUP BY albumid;
Code language: SQL (Structured Query Language) (sql)
Esta consulta não é válida.
Para corrigi-lo, você pode usar uma subconsulta no
FROM
cláusula da seguinte forma:SELECT
AVG(album.size)
FROM
(
SELECT
SUM(bytes) SIZE
FROM
tracks
GROUP BY
albumid
) AS album;
Code language: SQL (Structured Query Language) (sql)
AVG(album.size) --------------- 338288920.317
Nesse caso, o SQLite primeiro executa a subconsulta no
FROM
cláusula e retorna um conjunto de resultados. Em seguida, 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 independentemente. 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 independentemente.
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;
Code language: SQL (Structured Query Language) (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 o
SUM
função. - O predicado em
WHERE
A cláusula filtra os álbuns com tamanho maior ou igual a 10 MB (1.0000.000 bytes).
Subconsulta correlacionada SQLite no SELECT
exemplo de cláusula
A consulta a seguir usa uma subconsulta correlacionada no
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;
Code language: SQL (Structured Query Language) (sql)
Neste tutorial, apresentamos a subconsulta e mostramos várias maneiras de usar uma subconsulta em uma consulta para selecionar dados de tabelas.