{"id":321,"date":"2023-09-03T17:39:00","date_gmt":"2023-09-03T15:39:00","guid":{"rendered":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/?page_id=321"},"modified":"2025-03-09T18:12:48","modified_gmt":"2025-03-09T16:12:48","slug":"1-11-consultas-avanzadas-subconsultas","status":"publish","type":"page","link":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/1-11-consultas-avanzadas-subconsultas\/","title":{"rendered":"1.11. Consultas avanzadas: subconsultas"},"content":{"rendered":"<p>En ocasiones deseamos realizar un tipo de pregunta sobre nuestros datos, pero esta no es factible porque la organizaci\u00f3n en tablas escogida no lo permite. Para solventar este problema, MySQL permite anidar una consulta dentro de otra, con el objetivo de utilizar la pregunta interior para darle la forma apropiada a los datos, que podr\u00e1n ser tratados posteriormente mediante la consulta exterior.<\/p>\n<p>Sintaxis b\u00e1sica de una subconsulta:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">SELECT lista_columnas\r\nFROM nombre_tabla\r\nWHERE condici\u00f3n = (SELECT lista_columnas2\r\nFROM nombre_tabla2\r\nWHERE condiciones);<\/pre>\n<p>Sint\u00e1cticamente, desde el punto de vista de la consulta principal, la subconsulta interior desempe\u00f1ar\u00e1 el papel de una tabla convencional. Por esta raz\u00f3n, es posible asignar un nombre tanto a la consulta interior como a los atributos de los resultados que se desprender\u00e1n de esta. Para ello emplearemos la cl\u00e1usula <strong>AS<\/strong>, que permite asociar un nombre a un grupo de operaciones o atributos en SQL. El nombre empleado para esos atributos resulta \u00fatil para referirse a ellos desde la consulta exterior.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">SELECT subconsulta.valor1,..., subconsulta.valorn FROM\r\n   (SELECT atributo1 AS valor1,..., atributon AS valorn\r\n   FROM tabla GROUP BY tributoi) AS subconsulta;<\/pre>\n<p>Para ejemplificar la clase de escenario donde las subconsultas resultan potencialmente interesantes, imaginemos una tabla gen\u00e9rica llamada <em>tabla<\/em> con dos atributos, que denominaremos <em>clase <\/em>y <em>subclase<\/em>. Cada registro de esta tabla pertenece a una clase general, y dentro de esa clase, a una subclase m\u00e1s espec\u00edfica. Supongamos que nos gustar\u00eda calcular el promedio de subclases diferentes, clase por clase, que han sido utilizadas para etiquetar cada registro. Para obtener la respuesta, definiremos una subconsulta que recibir\u00e1 el nombre de <em>contador<\/em>. Esta subpregunta agrupar\u00e1 los datos por clases para contar el n\u00famero total de subclases asignado a los registros de cada clase principal. Finalmente, la consulta exterior simplemente deber\u00e1 calcular el promedio de los totales calculados por la subconsulta.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">class1 subclasex\r\nclase1 subclasey\r\nclase1 subclasez\r\nclase2 subclasea\r\nclase2 subclaseb\r\nclase3 subclasen\r\n...\r\n--------------------------------------------\r\n\r\nSELECT AVG (contador.totales) FROM\r\n\r\n (SELECT count(subclase) AS totales\r\n\r\n  FROM tabla GROUP BY clase) AS contador;<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>En ocasiones deseamos realizar un tipo de pregunta sobre nuestros datos, pero esta no es factible porque la organizaci\u00f3n en tablas escogida no lo permite. Para solventar este problema, MySQL permite anidar una consulta dentro de otra, con el objetivo de utilizar la pregunta interior para darle la forma apropiada a los datos, que podr\u00e1n [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"acf":[],"_links":{"self":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/wp-json\/wp\/v2\/pages\/321"}],"collection":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/wp-json\/wp\/v2\/comments?post=321"}],"version-history":[{"count":12,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/wp-json\/wp\/v2\/pages\/321\/revisions"}],"predecessor-version":[{"id":1014,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/wp-json\/wp\/v2\/pages\/321\/revisions\/1014"}],"wp:attachment":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/wp-json\/wp\/v2\/media?parent=321"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}