SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

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 é 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.