Saltar a contenido

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.