sql >> Base de Datos >  >> RDS >> SQLite

Subconsulta SQLite

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.