Resumen :en este tutorial, aprenderá sobre la subconsulta SQLite para construir consultas más legibles y complejas.
Introducción a la subconsulta SQLite
Una subconsulta es un SELECT
sentencia anidada en otra sentencia. Consulte la siguiente declaración.
SELECT column_1
FROM table_1
WHERE column_1 = (
SELECT column_1
FROM table_2
);
Code language: SQL (Structured Query Language) (sql)
La siguiente consulta es la consulta externa :
SELECT column_1
FROM table_1
WHERE colum_1 =
Code language: SQL (Structured Query Language) (sql)
Y la siguiente consulta es la subconsulta .
(SELECT column_1
FROM table_2)
Code language: SQL (Structured Query Language) (sql)
Debe utilizar un par de paréntesis para encerrar una subconsulta. Tenga en cuenta que puede anidar una subconsulta dentro de otra subconsulta con cierta profundidad.
Por lo general, una subconsulta devuelve una sola fila como un valor atómico, aunque puede devolver varias filas para comparar valores con IN
operador.
Puede usar una subconsulta en SELECT
, FROM
, WHERE
y JOIN
cláusulas.
Ejemplos de subconsultas de SQLite
Usaremos las tracks
y albums
tablas de la base de datos de ejemplo para la demostración.
1) Subconsulta SQLite en WHERE
ejemplo de cláusula
Puede utilizar una subconsulta simple como condición de búsqueda. Por ejemplo, la siguiente declaración devuelve todas las pistas del álbum con el 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)
La subconsulta devuelve la identificación del álbum con el título 'Let There Be Rock'
. La consulta usa el operador igual (=) para comparar albumid
devuelto por la subconsulta con el albumid
en las tracks
mesa.
Si la subconsulta devuelve varios valores, puede utilizar IN
operador para verificar la existencia de un solo valor contra un conjunto de valores.
Ver los siguientes employees
y customers
tabla en la base de datos de ejemplo:
Por ejemplo, la siguiente consulta devuelve los clientes cuyos representantes de ventas se encuentran en Canadá.
SELECT customerid,
firstname,
lastname
FROM customers
WHERE supportrepid IN (
SELECT employeeid
FROM employees
WHERE country = 'Canada'
);
Code language: SQL (Structured Query Language) (sql)
La subconsulta devuelve una lista de identificaciones de los empleados que se ubican en Canadá. La consulta externa usa IN
operador para encontrar los clientes que tienen la identificación del representante de ventas en la lista.
2) Subconsulta SQLite en FROM
ejemplo de cláusula
A veces desea aplicar funciones agregadas a una columna varias veces. Por ejemplo, primero desea sumar el tamaño de un álbum y luego calcular el tamaño promedio de todos los álbumes. Es posible que se te ocurra la siguiente consulta.
SELECT AVG(SUM(bytes)
FROM tracks
GROUP BY albumid;
Code language: SQL (Structured Query Language) (sql)
Esta consulta no es válida.
Para solucionarlo, puede usar una subconsulta en FROM
cláusula de la siguiente manera:
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
En este caso, SQLite primero ejecuta la subconsulta en el FROM
cláusula y devuelve un conjunto de resultados. Luego, SQLite usa este conjunto de resultados como una tabla derivada en la consulta externa.
Subconsulta correlacionada de SQLite
Todas las subconsultas que has visto hasta ahora se pueden ejecutar de forma independiente. En otras palabras, no depende de la consulta externa.
La subconsulta correlacionada es una subconsulta que usa los valores de la consulta externa. A diferencia de una subconsulta ordinal, una subconsulta correlacionada no se puede ejecutar de forma independiente.
La subconsulta correlacionada no es eficiente porque se evalúa para cada fila procesada por la consulta externa.
La siguiente consulta utiliza una subconsulta correlacionada para devolver los álbumes cuyo tamaño es 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)
Cómo funciona la consulta.
- Para cada fila procesada en la consulta externa, la subconsulta correlacionada calcula el tamaño de los álbumes de las pistas que pertenecen al álbum actual utilizando el
SUM
función. - El predicado en
WHERE
La cláusula filtra los álbumes que tienen un tamaño mayor o igual a 10 MB (10000000 bytes).
Subconsulta correlacionada de SQLite en SELECT
ejemplo de cláusula
La siguiente consulta utiliza una subconsulta correlacionada en SELECT
cláusula para devolver el número de pistas en un á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)
En este tutorial, le presentamos la subconsulta y le mostramos varias formas de usar una subconsulta en una consulta para seleccionar datos de tablas.