English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Subconsultas SQL

En este tutorial, aprenderás cómo insertar una consulta dentro de otra en SQL.

¿Qué es una consulta anidada?

La consulta anidada, también conocida como consulta anidada o subselección, esSELECCIONARincrustada en otra consulta SQL. DONDE O HAVINGlas consultas en la cláusula. Los datos devueltos por la subconsulta se utilizan por la declaración externa de la misma manera que los valores de texto.

La subconsulta proporciona un método simple y efectivo para manejar consultas que dependen de los resultados de otra consulta. Son casi idénticas a las declaraciones SELECT comunes, pero prácticamente sin limitaciones. Los puntos más importantes son los siguientes:

  • La subconsulta debe aparecer siempre entre paréntesis.

  • La subconsulta debe devolver solo una columna. Esto significa que no se puede usar SELECT en la subconsulta. *), a menos que la tabla referida tenga solo una columna. Si el objetivo es comparar filas, se puede usar una subconsulta que devuelva múltiples columnas.

  • Sólo puedes usar operadores que devuelvan múltiples valores (por ejemploEN O NOT INoperador) de múltiples filas de una subconsulta.

  • La subconsulta no puede serUNION. Solo se permite una declaración SELECT.

La subconsulta se usa más a menudo conSELECCIONARjunto con la declaraciónINSERTAR,ACTUALIZAROELIMINARse pueden usar en la declaración o en otra subconsulta.

Subconsulta con declaración SELECT

La siguiente declaración solo devuelve registros de la tabla de pedidos con un valor de pedido superior a5detalles de los clientes que han realizado pedidos con un valor superior aDISTINCTSe eliminaron valores repetidos de cust_id del conjunto de resultados.

SELECCIONAR * DE customers
DONDE cust_id EN (SELECCIONAR DISTINCT cust_id DE orders DONDE order_value > 5000);

Consejo:La subconsulta puede devolver un solo valor, una sola fila, una sola columna o una tabla que contiene una o más filas o una o más columnas.

Nota:La subconsulta puede anidar en el exteriorSELECCIONAR,INSERTAR,ACTUALIZAROELIMINARDe la declaraciónDONDEOHAVINGLas cláusulas, también pueden anidar en otras subconsultas.

Subconsulta con declaración INSERT

La subconsulta también se puede usar con la declaración INSERT. Aquí hay un ejemplo:

INSERTAR EN premium_customers 
SELECCIONAR * DE customers 
DONDE cust_id EN (SELECCIONAR DISTINCT cust_id DE orders DONDE order_value > 5000);

La siguiente declaración insertará los registros de clientes premium en la tabla premium_customers utilizando los datos devueltos por la subconsulta. Aquí, el cliente premium es aquel que ha realizado un pedido con un valor superior a5clientes de 000 dólares.

Consejo: ConsultaCon respecto aClonación de tablas SQLpara aprender cómo usar la declaración INSERT ... SELECT para insertar rápidamente múltiples filas de otra tabla en la tabla.

Subconsulta con declaración UPDATE

También puedes combinar la subconsulta con la declaración UPDATE para actualizar una columna o múltiples columnas en la tabla, como se muestra a continuación:

ACTUALIZAR orders
ESTABLECER order_value = order_value + 10
WHERE cust_id IN (SELECT cust_id FROM customers WHERE postal_code = 75016);

mediante el aumento del valor actual del pedido10dólares, la sentencia anterior actualizará la tabla de pedidos (orders) con el código postal75016de los valores de pedidos de clientes de la región.

Subconsulta con sentencia DELETE

Del mismo modo, se puede combinar la subconsulta con la sentencia DELETE para eliminar filas individuales o múltiples de la tabla, como se muestra a continuación:

DELETE FROM orders
DELETE FROM orders WHERE order_id IN (SELECT order_id FROM order_details WHERE product_id = 5);

La sentencia SQL del ejemplo anterior se seleccionará de la tabla que contieneproduct_idpara5eliminar estos pedidos de la tabla de pedidos del producto.