Subconsulta SQLite

Resumo : neste tutorial, você aprenderá sobre a subconsulta SQLite para construir consultas mais legíveis e complexas.

Introdução à subconsulta SQLite

Uma subconsulta é uma SELECTinstruçã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 INoperador.

Você pode usar uma subconsulta nas cláusulas SELECT, FROM, WHEREe JOIN.

Exemplos de subconsulta SQLite

Usaremos as tabelas trackse albumsdo banco de dados de exemplo para a demonstração.

1) Subconsulta SQLite no WHEREexemplo 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 )
Exemplo de subconsulta SQLite

A subconsulta retorna o id do álbum com o título 'Let There Be Rock'. A consulta usa o operador igual (=) para comparar o albumidretornado pela subconsulta com o   albumidda trackstabela.

Se a subconsulta retornar vários valores, você poderá usar o INoperador para verificar a existência de um único valor em relação a um conjunto de valores.

Consulte o seguinte employeese customersa 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 )
Exemplo de subconsulta SQLite com operador IN

A subconsulta retorna uma lista de IDs dos funcionários localizados no Canadá. A consulta externa usa o INoperador para localizar os clientes que possuem o ID do representante de vendas na lista.

2) Subconsulta SQLite no FROMexemplo 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 FROMclá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 FROMclá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 )
Exemplo de subconsulta correlacionada SQLite

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 SUMfunção.
  • O predicado na WHEREcláusula filtra os álbuns que possuem tamanho maior ou igual a 10MB (10000000 bytes).

Subconsulta correlacionada SQLite no SELECTexemplo de cláusula

A consulta a seguir usa uma subconsulta correlacionada na SELECTclá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 )
Subconsulta SQLite no exemplo da cláusula SELECT

Neste tutorial, apresentamos a subconsulta e mostramos várias maneiras de usar uma subconsulta em uma consulta para selecionar dados de tabelas.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *