Una subconsulta es una consulta anidada dentro de otra consulta. Una subconsulta también se conoce como consulta interna o consulta anidada.
Una subconsulta puede ser útil para recuperar datos que serán utilizados por la consulta principal como condición para la selección posterior de datos.
La sintaxis básica de la subconsulta es la siguiente:
SELECT
select_list
FROM
table1
WHERE
columnA operator (
SELECT
columnB
from
table2
WHERE
condition
);
En esta sintaxis, la subconsulta se encierra entre paréntesis y se ejecuta en primer lugar:
SELECT
columnB
from
table2
WHERE
condition
La consulta principal utilizará el resultado de la subconsulta para filtrar los datos en la cláusula WHERE.
Ejemplos de subconsultas PostgreSQL¶
Veamos algunos ejemplos del uso de subconsultas.
Ejemplo básico de subconsulta PostgreSQL¶
Primero, recupere el id de país de los Estados Unidos de la tabla country:
SELECT
country_id
from
country
where
country = 'United States';
El resultado es el siguiente:
country_id
------------
103
(1 row)
En segundo lugar, recupera las ciudades de la tabla de ciudades donde country_id es 103:
SELECT
city
FROM
city
WHERE
country_id = 103
ORDER BY
city;
Salida:
city
-------------------------
Akron
Arlington
Augusta-Richmond County
Aurora
Bellevue
Brockton
Cape Coral
Citrus Heights
...
En lugar de ejecutar dos consultas, puede combinarlas en una sola, haciendo que la primera consulta sea una subconsulta y la segunda la consulta principal, como se indica a continuación:
SELECT
city
FROM
city
WHERE
country_id = (
SELECT
country_id
FROM
country
WHERE
country = 'United States'
)
ORDER BY
city;
En esta consulta, la siguiente es la subconsulta:
SELECT
country_id
FROM
country
WHERE
country = 'United States';
PostgreSQL ejecuta primero la subconsulta para obtener el id de país y utiliza ese id de país para la cláusula WHERE para recuperar las ciudades.
Uso de una subconsulta con el operador IN¶
Una subconsulta puede devolver cero o más filas. Si la consulta devuelve más de una fila, puede utilizarla con el operador IN. Por ejemplo:
En primer lugar, obtenga el film_id de la película con la categoría Acción:
SELECT
film_id
FROM
film_category
INNER JOIN category USING(category_id)
WHERE
name = 'Action';
Salida:
film_id
---------
19
21
29
38
56
...
En segundo lugar, utilice la consulta anterior como subconsulta para recuperar el título de la película de la tabla de películas:
SELECT
film_id,
title
FROM
film
WHERE
film_id IN (
SELECT
film_id
FROM
film_category
INNER JOIN category USING(category_id)
WHERE
name = 'Action'
)
ORDER BY
film_id;
Salida:
film_id | title
---------+-------------------------
19 | Amadeus Holy
21 | American Circus
29 | Antitrust Tomatoes
38 | Ark Ridgemont
56 | Barefoot Manchurian
...
Resumen¶
- Una subconsulta es una consulta anidada dentro de otra consulta
- Una subconsulta también se conoce como consulta interna o consulta anidada.