Las subconsultas son una herramienta muy útil al trabajar con bases de datos. Una subconsulta es una consulta que se encuentra anidada dentro de otra consulta. En otras palabras, es una consulta que se utiliza como argumento en otra consulta. Las subconsultas pueden ser utilizadas para filtrar y/o manipular datos de una tabla de forma más precisa. Por ejemplo, con una subconsulta podemos hacer que una consulta sólo tenga en cuenta los registros que se cumplen en otra tabla. Así, podemos utilizar el resultado de una consulta como parte de otra consulta. La sintaxis general para una subconsulta en SQL es la siguiente:
SELECT columna1, columna2, ... FROM tabla1 WHERE columna1 IN (SELECT columna2 FROM tabla2 WHERE condición);
En este ejemplo, estamos seleccionando ciertas columnas de tabla1. Sin embargo, estamos limitando los valores que serán seleccionados mediante el uso de una subconsulta en la cláusula WHERE. La subconsulta está seleccionando una columna de tabla2 basada en una cierta condición.
Hay varios tipos de subconsultas como:
- Subconsultas de una sola fila: Devuelven una única fila y columna. Esta subconsulta puede ser usada como una simple expresión. Por ejemplo, para saber el balance total de la cuenta bancaria de un cliente:
SELECT balance FROM cuentas_bancarias WHERE id_cliente = (SELECT id_cliente FROM clientes WHERE nombre_cliente = 'Juan Perez');
- Subconsultas de varias filas: Devuelven múltiples filas y columnas. Esta subconsulta debe de ser usada en la cláusula WHERE, así que debe devolver una columna para compararla con otra columna de otra tabla.
SELECT nombre FROM clientes WHERE id_cliente IN (SELECT id_cliente FROM cuentas_bancarias WHERE balance < 1000);
En este caso, estamos seleccionando los nombres de los clientes que tienen una cuenta bancaria con un balance menor a 1000. La subconsulta está seleccionando los IDs de los clientes cuyas cuentas bancarias tienen un balance menor a 1000.
- Subconsultas correlacionadas: Utilizan valores de la consulta externa en la consulta interna. Se hacen coincidir los valores de la tabla externa con los de la tabla interna.
SELECT nombre FROM clientes WHERE (SELECT COUNT(*) FROM cuentas_bancarias WHERE id_cliente = clientes.id_cliente) > 1;
En este ejemplo la subconsulta está contando el número de cuentas bancarias por cada cliente, y selecciona los clientes que tienen más de una cuenta bancaria.
La utilización de subconsultas hace que las consultas sean más flexibles y poderosas, y con ello, se pueden hacer muchas acciones que no serían posibles de otra forma en SQL.