7th Jul 2022 Lectura de 7 minutos ¿Cuáles son los diferentes tipos de subconsultas SQL? Kateryna Koidan SQL aprender SQL subconsulta Índice ¿Qué es una subconsulta SQL? Subconsultas Escalares Subconsultas de varias filas Subconsultas correlacionadas Hora de Practicar los Diferentes Tipos de Subconsultas SQL Las subconsultas se pueden utilizar en muchos casos empresariales. ¿Qué tipos de subconsultas ofrece SQL? ¿Y cómo se pueden utilizar de forma eficiente? En este artículo, te guiaré a través de los diferentes tipos de subconsultas y las situaciones típicas en las que son útiles. ¿Qué es una subconsulta SQL? Una subconsulta, o consulta anidada, es una consulta colocada dentro de otra consulta SQL. Hay muchos escenarios diferentes en los que puede querer incluir una consulta en las cláusulas WHERE, FROM o SELECT de su consulta principal. Siempre es más fácil comprender nuevos conceptos cuando se presentan con ejemplos. Así que, ¡comencemos! Imaginemos que gestionamos varias galerías de arte y tenemos las siguientes tablas en nuestra base de datos: galleries idcity 1London 2New York 3Munich paintings idnamegallery_idprice 1Patterns35000 2Ringer14500 3Gift13200 4Violin Lessons26700 5Curiosity29800 sales_agents idlast_namefirst_namegallery_idagency_fee 1BrownDenis22250 2WhiteKate33120 3BlackSarah21640 4SmithHelen14500 5StewartTom32130 managers idgallery_id 12 23 41 Uno de los casos de uso más sencillos de la subconsulta es incluirla en la cláusula WHERE para filtrar los resultados. Por ejemplo, si quiere ver información sobre sólo los agentes de ventas que recibieron una comisión de agencia superior a la media el mes pasado, podría utilizar la siguiente consulta SQL: SELECT * FROM sales_agents WHERE agency_fee > (SELECT AVG(agency_fee) FROM sales_agents); Aquí, su subconsulta calcula la comisión media de agencia que recibió su equipo de ventas el mes pasado y devuelve un único valor (2728 dólares). A continuación, utiliza este valor para filtrar los resultados de la consulta principal y devolver la información sólo de aquellos agentes de ventas cuyos honorarios de agencia fueron superiores a la media: idlast_namefirst_namegallery_idagency_fee 2WhiteKate33120 4SmithHelen14500 Las subconsultas SQL pueden devolver valores individuales o tablas completas. Puede haber subconsultas anidadas o subconsultas correlacionadas. Cada uno de estos tipos de subconsultas funciona bien para determinados casos de uso. Si quieres información más detallada sobre esto, lee nuestra guía para principiantes sobre subconsultas SQL. En este artículo, proporcionaré ejemplos de diferentes tipos de subconsultas en SQL y te guiaré a través de los escenarios típicos en los que este tipo de subconsulta es particularmente útil. Subconsultas Escalares Cuando una subconsulta devuelve un solo valor, o exactamente una fila y exactamente una columna, la llamamos subconsulta escalar. Este tipo de subconsulta se utiliza con frecuencia en la cláusula WHERE para filtrar los resultados de la consulta principal. La subconsulta de nuestro ejemplo anterior es una subconsulta escalar, ya que devuelve un único valor (es decir, la tarifa media de la agencia). Las subconsultas escalares también pueden utilizarse en la sentencia SELECT de la consulta principal. Por ejemplo, digamos que queremos ver el precio medio de todos nuestros cuadros junto al precio de cada cuadro. SELECT name AS painting, price, (SELECT AVG(price) FROM paintings) AS avg_price FROM paintings; En este caso, la subconsulta devuelve un valor escalar (5840 dólares) que simplemente se añade a cada fila de la tabla resultante: paintingpriceavg_price Patterns50005840 Ringer45005840 Gift32005840 Violin Lessons67005840 Curiosity98005840 Observe que la subconsulta (también llamada consulta interna) en este ejemplo es totalmente independiente de la consulta principal (también llamada consulta externa) - puede ejecutar la consulta interna por sí sola y obtener un resultado significativo. Subconsultas de varias filas Si su subconsulta devuelve más de una fila, puede denominarse subconsulta de varias filas. Tenga en cuenta que este tipo de subconsulta incluye (1) subconsultas que devuelven una columna con múltiples filas (es decir, una lista de valores) y (2) subconsultas que devuelven múltiples columnas con múltiples filas (es decir, tablas). Las subconsultas que devuelven una columna y varias filas suelen incluirse en la cláusula WHERE para filtrar los resultados de la consulta principal. En este caso, suelen utilizarse con operadores como IN, NOT IN, ANY, ALL, EXISTS o NOT EXISTS que permiten comparar un valor concreto con los valores de la lista devuelta por la subconsulta. ¿Quiere saber más sobre las subconsultas SQL con el operador IN? Vea un episodio de nuestra serie We Learn SQL en Youtube. Recuerda suscribirte a nuestro canal. Por ejemplo, digamos que quiere calcular el promedio de los honorarios de los agentes que no son gerentes. Puede utilizar la siguiente subconsulta para responder a esta pregunta: SELECT AVG(agency_fee) FROM sales_agents WHERE id NOT IN (SELECT id FROM managers); La consulta interna devolverá una lista de todos los ID de gestores. A continuación, la consulta externa filtra sólo los agentes de ventas que no están en la lista de gerentes y calcula una comisión media de agencia pagada a estos agentes. La consulta devuelve un único valor: la comisión media de agencia pagada a los no gestores (1885 dólares). Consulte nuestra guía de subconsultas SQL para ver más ejemplos de subconsultas de varias filas. Subconsultas correlacionadas También existen subconsultas SQL en las que la consulta interna se basa en la información obtenida de la consulta externa. Estas son subconsultas correlacionadas. Debido a la interdependencia entre la consulta principal y la interna, este tipo de subconsulta puede ser más difícil de entender. Lea esta guía para principiantes para ser más hábil con las subconsultas correlacionadas en SQL. Una vez más, vayamos directamente a los ejemplos. Las subconsultas correlacionadas se utilizan comúnmente en las sentencias SELECT, WHERE y FROM. Si queremos calcular el número de cuadros encontrados en cada una de nuestras galerías, podemos utilizar la siguiente consulta. Observe la subconsulta correlacionada en la sentencia SELECT: SELECT city, (SELECT count(*) FROM paintings p WHERE g.id = p.gallery_id) total_paintings FROM galleries g; Aquí, la subconsulta devuelve un valor escalar con el número total de cuadros en la galería correspondiente. La consulta principal muestra esta información junto con la ciudad donde se encuentra esa galería de arte. citytotal_paintings London2 New York2 Munich1 También puedes ver que, en contraste con nuestros ejemplos anteriores, aquí la consulta interna depende de la consulta externa. Sacamos el ID de la galería de la tabla galleries que está en la consulta externa. En otras palabras, no se puede ejecutar la consulta interna como una consulta independiente - sólo arrojará un error. Observe también que, en este caso, podría utilizar JOIN en lugar de una subconsulta y obtener el mismo resultado: SELECT g.city, count(p.name) AS total_paintings FROM galleries g JOIN paintings p ON g.id = p.gallery_id GROUP BY g.city; Los JOIN suelen ser más rápidos que las subconsultas. Sin embargo, si encuentra que las subconsultas son más intuitivas para su caso particular, está bien usarlas. Puede leer más sobre el uso de subconsultas vs. JOINs en nuestra guía completa. Por último, las subconsultas correlacionadas también pueden utilizarse en la sentencia WHERE. Por ejemplo, digamos que queremos obtener información sobre aquellos agentes de ventas cuyos honorarios de agencia fueron iguales o superiores a los honorarios medios de su galería. Podemos ejecutar la siguiente consulta para obtener el resultado deseado: SELECT last_name, first_name, agency_fee FROM sales_agents sa1 WHERE sa1.agency_fee >= (SELECT avg(agency_fee) FROM sales_agents sa2 WHERE sa2.gallery_id = sa1.gallery_id); La consulta interna, en este caso, devuelve la tarifa media de la galería del agente de ventas correspondiente. La consulta externa devuelve la información sólo de aquellos agentes de venta que cumplen la condición incluida en la sentencia WHERE (es decir, una comisión de agencia igual o superior a la media de su galería). last_namefirst_nameagency_fee BrownDenis2250 WhiteKate3120 SmithHelen4500 De nuevo, la subconsulta de este ejemplo es una subconsulta correlacionada, ya que no puede ejecutarse independientemente de la consulta externa. Si quiere saber más, consulte este sencillo tutorial sobre cómo escribir subconsultas correlacionadas. Aunque los diferentes tipos de subconsultas SQL cubren muchas situaciones típicas, hay algunos casos en los que puede querer utilizar expresiones de tabla comunes (CTE) en lugar de subconsultas. Si estás interesado en aprender más sobre las CTEs, revisa este artículo que te guiará a través de las diferencias entre las subconsultas y las CTEs. Hora de Practicar los Diferentes Tipos de Subconsultas SQL Ha aprendido que hay muchos tipos de subconsultas en SQL. Dependiendo de la tarea a realizar, puede aplicar subconsultas escalares, de varias filas o correlacionadas para obtener el resultado que necesita. Ya hemos visto varios ejemplos de subconsultas y hemos descubierto dónde se pueden utilizar. Sin embargo, para convertirte en un usuario de SQL realmente poderoso, necesitas más práctica con los diferentes tipos de subconsultas. Es hora de realizar ejercicios interactivos. Nuestro curso SQL para principiantes tiene una sección muy completa sobre las subconsultas, en la que se combinan explicaciones y ejemplos detallados con docenas de ejercicios. ¡Compruébalo! Para obtener práctica adicional, también recomiendo completar la sección de subconsultas en el curso Ejercicios prácticos de SQL. Más práctica = más consultas SQL profesionales. ¡Feliz aprendizaje! Tags: SQL aprender SQL subconsulta