{"id":219,"date":"2017-09-18T22:25:27","date_gmt":"2017-09-18T22:25:27","guid":{"rendered":"http:\/\/www.manualsqlserver.com\/?p=219"},"modified":"2020-07-17T15:37:13","modified_gmt":"2020-07-17T15:37:13","slug":"subconsultas","status":"publish","type":"post","link":"https:\/\/manualsqlserver.com\/?p=219","title":{"rendered":"Subconsultas en SQL Server"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ConsultasSubconsultasD.png\" alt=\"\" class=\"wp-image-1166\" width=\"320\" height=\"310\"\/><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Subconsultas<\/strong><\/h1>\n\n\n\n<p>Una subconsulta es una consulta anidada en un SELECT, INSERT, &nbsp;UPDATE o DELETE e inclusive en otra subconsulta. &nbsp;Las subconsultas se pueden utilizar en cualquier parte en la que se permita una expresi\u00f3n. Las subconsultas deben seguir ciertas reglas que se mencionan al final del post. Es necesario conocer la estructura de la base de datos para poder relacionar las tablas correctamente y lograr los resultados esperados. Los resultados obtenidos con subconsultas se pueden tambi\u00e9n obtener con el uso de Joins.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p><strong>Las subconsultas pueden utilizarse de dos formas:<\/strong><br>1. Dentro de la Lista de campos de la instrucci\u00f3n Select, &nbsp;esta subconsulta es la que reporta un valor. &nbsp;Se debe relacionar la tabla despu\u00e9s del From<br>con la tabla de la Subconsulta.<br><strong>&nbsp; &nbsp; &nbsp;select ListaCampos, (Select \u2026. subconsulta) from Tabla<\/strong><\/p>\n\n\n\n<p>2. En las cl\u00e1sulas Where<br><strong>&nbsp; &nbsp; &nbsp;Select ListadeCampos, OtroCampo, UltimoCampo from Tabla<\/strong><br>WHERE Campo [NOT] IN (subconsulta)<br>WHERE Campo operador [ANY | ALL] (subconsulta)<br>WHERE [Not] Exists (subconsulta)<\/p>\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<h3 class=\"wp-block-heading\">Ejercicios<\/h3>\n\n\n\n<p><strong>&#8212; Usando Northwind<\/strong><br>use Northwind<br>go<\/p>\n\n\n\n<p><strong>1. &#8212; Listado de las categor\u00edas y la cantidad de productos de cada una.<\/strong><\/p>\n\n\n\n<p>select C.CategoryID As &#8216;C\u00f3digo Categor\u00eda&#8217;,<br>C.CategoryName As &#8216;Descripci\u00f3n&#8217;,<br>(<strong>select COUNT(P.ProductID) from Products As P<br>where P.CategoryID = C.CategoryID<\/strong>) As &#8216;Cantidad Productos&#8217;<br>from Categories As C<br>go<br>Nota: la consulta para saber la cantidad de productos en la instrucci\u00f3n<br>anterior es la siguiente: (ej. Cat. 5)<br>select COUNT(P.ProductID) from Products As P where P.CategoryID = 5<br>go<br>Para poder especificar el c\u00f3digo de la categor\u00eda se utiliza el campo CategoryID<br>de la tabla Categories.<\/p>\n\n\n\n<p>La imagen muestra el resultado, note que la cantidad de productos en almac\u00e9n de una determinada categor\u00eda se muestra con la consulta entre par\u00e9ntesis que es la subconsulta.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Consultas_Subconsultas_01.png\" alt=\"\" class=\"wp-image-1167\" width=\"686\" height=\"359\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Consultas_Subconsultas_01.png 562w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Consultas_Subconsultas_01-300x157.png 300w\" sizes=\"auto, (max-width: 686px) 100vw, 686px\" \/><\/figure><\/div>\n\n\n\n<p><strong>2. &#8212; Empleados y la cantidad de \u00f3rdenes del a\u00f1o 1997, orden descendente por &nbsp;cantidad de \u00f3rdenes.<\/strong><\/p>\n\n\n\n<p>select E.EmployeeID As &#8216;C\u00f3digo&#8217;, Empleado = E.FirstName + SPACE(1)+ E.LastName, \u00a0E.Address As &#8216;Direcci\u00f3n&#8217;,<br>(<strong>select Count(O.OrderID) from Orders As O where O.EmployeeID = E.EmployeeID<br>and year(O.Orderdate) = 1997<\/strong>) As &#8216;Cantidad \u00d3rdenes&#8217;<br>from Employees As E<br>go<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Consultas_Subconsultas_02.png\" alt=\"\" class=\"wp-image-1168\" width=\"812\" height=\"290\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Consultas_Subconsultas_02.png 810w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Consultas_Subconsultas_02-300x107.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Consultas_Subconsultas_02-768x275.png 768w\" sizes=\"auto, (max-width: 812px) 100vw, 812px\" \/><\/figure><\/div>\n\n\n\n<p><strong>3. &#8212; Un listado de los empleados y el monto total generado en las \u00f3rdenes y la cantidad de \u00f3rdenes de cada uno.<\/strong><\/p>\n\n\n\n<p>Para la cantidad de \u00f3rdenes (el listado es para el Empleado con c\u00f3digo 1)<\/p>\n\n\n\n<p>select Count(O.OrderID) from Orders As O where O.EmployeeID = 1&nbsp;and year(O.Orderdate) = 1997<br>go<\/p>\n\n\n\n<p>Para el monto total de las \u00f3rdenes del empleado con el c\u00f3digo 1<\/p>\n\n\n\n<p>select sum(O.Freight) from Orders As O where O.EmployeeID = 1<br>and year(O.Orderdate) = 1997<br>go<\/p>\n\n\n\n<p><strong> Inclu\u00eddas como Subconsultas en la siguiente instrucci\u00f3n<\/strong><\/p>\n\n\n\n<p>select E.EmployeeID As &#8216;C\u00f3digo&#8217;, Empleado = E.FirstName + SPACE(1)+ E.LastName,<br>E.Address As &#8216;Direcci\u00f3n&#8217;,<br>(select Count(O.OrderID) from Orders As O where O.EmployeeID = E.EmployeeID<br>and year(O.Orderdate) = 1997) As &#8216;Cantidad \u00d3rdenes&#8217;,<br>(select sum(O.Freight) from Orders As O where O.EmployeeID = E.EmployeeID<br>and year(O.Orderdate) = 1997) As &#8216;Monto total&#8217;<br>from Employees As E<br>go<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Consultas_Subconsultas_03.png\" alt=\"\" class=\"wp-image-1169\" width=\"802\" height=\"252\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Consultas_Subconsultas_03.png 902w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Consultas_Subconsultas_03-300x94.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Consultas_Subconsultas_03-768x242.png 768w\" sizes=\"auto, (max-width: 802px) 100vw, 802px\" \/><\/figure><\/div>\n\n\n\n<p><strong>4. &#8212; \u00d3rdenes que generaron los clientes de M\u00e9xico<\/strong><\/p>\n\n\n\n<p>Primero determinar \u00bfCu\u00e1les son los clientes de M\u00e9xico?<br>Se necesitan los c\u00f3digos de los clientes de M\u00e9xico<\/p>\n\n\n\n<p>select C.CustomerID from Customers As C where Country = &#8216;Mexico&#8217;<br>go<\/p>\n\n\n\n<p><strong>Para las \u00f3rdenes<\/strong><\/p>\n\n\n\n<p>select O.OrderID As &#8216;N\u00ba Orden&#8217;, Format(O.OrderDate,&#8217;dd\/MM\/yyy&#8217;) As &#8216;Fecha&#8217;,<br>O.CustomerID As &#8216;C\u00f3d. Cliente&#8217;, C.CompanyName As &#8216;Cliente&#8217; , C.Country As &#8216;Pa\u00eds&#8217;<br>from Orders As O<br>join Customers As C on O.CustomerID = C.CustomerID<br>where O.CustomerID in<br>(select C.CustomerID from Customers As C where Country = &#8216;Mexico&#8217;)<br>go<\/p>\n\n\n\n<p>\/* C\u00f3digos de los clientes de M\u00e9xico que reporta la Subconsulta<br>ANATR ANTON CENTC PERIC TORTU *\/<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Consultas_Subconsultas_04.png\" alt=\"\" class=\"wp-image-1170\" width=\"808\" height=\"506\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Consultas_Subconsultas_04.png 794w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Consultas_Subconsultas_04-300x188.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Consultas_Subconsultas_04-768x482.png 768w\" sizes=\"auto, (max-width: 808px) 100vw, 808px\" \/><\/figure><\/div>\n\n\n\n<p><strong>5. &#8212; Las \u00f3rdenes donde se vendieron los productos del Proveedor (Suppliers)\u00a0\u00a0llamado Tokyo Traders. Primero el c\u00f3digo del proveedor Tokyo Traders<\/strong><\/p>\n\n\n\n<p>select S.SupplierID from Suppliers As S where S.CompanyName = &#8216;Tokyo Traders&#8217;<br>go<\/p>\n\n\n\n<p><strong>Luego los productos de ese proveedor.<\/strong><\/p>\n\n\n\n<p>select P.ProductID from Products As P<br>where P.SupplierID = (select S.SupplierID from Suppliers As S where S.CompanyName = &#8216;Tokyo Traders&#8217;)<br>go<\/p>\n\n\n\n<p><strong>Los c\u00f3digos de los productos del proveedor Tokyo Traders son: 9, 10 y 74<\/strong><br><strong>Las ordenes en los que se vendieron los productos del proveedor Tokyo Traders<\/strong><\/p>\n\n\n\n<p>select O.OrderID As &#8216;N\u00ba Orden&#8217;, OD.ProductID As &#8216;C\u00f3d. Producto&#8217;,<br>P.ProductName As &#8216;Descripci\u00f3n&#8217;, P.UnitPrice As &#8216;Precio Lista&#8217;,<br>OD.UnitPrice As &#8216;Precio Venta&#8217;, OD.Quantity As &#8216;Cantidad&#8217;,<br>Format(O.OrderDate,&#8217;dd\/MM\/yyyy&#8217;) As &#8216;Fecha de Orden&#8217;<br>from [Order Details] As OD<br>join Orders As O on OD.OrderID = O.OrderID<br>join Products As P on OD.ProductID = P.ProductID<br>where P.ProductID in (select P.ProductID from Products As P<br>where P.SupplierID = (select S.SupplierID from Suppliers As S where S.CompanyName = &#8216;Tokyo Traders&#8217;))<br>go<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Consultas_Subconsultas_05.png\" alt=\"\" class=\"wp-image-1171\" width=\"776\" height=\"277\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Consultas_Subconsultas_05.png 944w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Consultas_Subconsultas_05-300x107.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Consultas_Subconsultas_05-768x275.png 768w\" sizes=\"auto, (max-width: 776px) 100vw, 776px\" \/><\/figure><\/div>\n\n\n\n<p><strong>6. &#8212; Los clientes y la cantidad comprada por cada uno<\/strong><\/p>\n\n\n\n<p>select C.CustomerID As &#8216;C\u00f3digo Cliente&#8217;, C.CompanyName As &#8216;Cliente&#8217;,<br>C.Address As &#8216;Direcci\u00f3n&#8217;, C.Country As &#8216;Pa\u00eds&#8217;,<br>(<strong>select SUM(O.Freight) from Orders As O<br>where O.CustomerID = C.CustomerID<\/strong>) As &#8216;Total Comprado&#8217;<br>from Customers As C<br>Where (select SUM(O.Freight) from Orders As O<br>where O.CustomerID = C.CustomerID) >0<br>go<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Consultas_Subconsultas_06-1024x296.png\" alt=\"\" class=\"wp-image-1172\" width=\"842\" height=\"243\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Consultas_Subconsultas_06-1024x296.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Consultas_Subconsultas_06-300x87.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Consultas_Subconsultas_06-768x222.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Consultas_Subconsultas_06.png 1064w\" sizes=\"auto, (max-width: 842px) 100vw, 842px\" \/><\/figure><\/div>\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<h3 class=\"wp-block-heading\">Restricciones en Subconsultas<\/h3>\n\n\n\n<p>Las subconsultas tienen las siguientes restricciones<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Los campos de una subconsulta que se especifica con un operador de comparaci\u00f3n, s\u00f3lo puede incluir un nombre de expresi\u00f3n o columna.<\/li><li>Los campos que incluyen EXISTS e IN pueden reportar un conjunto de resultados.<\/li><li>Si la cl\u00e1usula WHERE de una consulta externa incluye un nombre de columna, debe ser compatible con una combinaci\u00f3n con la columna indicada en la lista de selecci\u00f3n de la subconsulta.<\/li><li>La palabra clave DISTINCT no se puede usar con subconsultas que incluyan GROUP BY.<\/li><li>No se pueden especificar las cl\u00e1usulas COMPUTE e INTO.<\/li><li>Los tipos de datos ntext, text y image no est\u00e1n permitidos en subconsultas.<\/li><li>Las subconsultas que se especifican con un operador de comparaci\u00f3n sin modificar (no seguido de la palabra clave ANY o ALL) no pueden incluir las cl\u00e1usulas GROUP BY y HAVING.<\/li><li>S\u00f3lo se puede especificar ORDER BY si se especifica tambi\u00e9n TOP.<\/li><li>Una vista creada con una subconsulta no se puede actualizar.<\/li><li>La lista de selecci\u00f3n de una subconsulta especificada con EXISTS, &nbsp;por convenci\u00f3n, tiene un asterisco (*) en lugar de un solo nombre de columna. &nbsp;Las reglas de una subconsulta especificada con EXISTS son id\u00e9nticas a las de una lista de selecci\u00f3n est\u00e1ndar, porque este tipo de subconsulta &nbsp;crea una prueba de existencia y devuelve TRUE o FALSE en lugar de datos.<\/li><\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Subconsultas Una subconsulta es una consulta anidada en un SELECT, INSERT, &nbsp;UPDATE o DELETE e inclusive en otra subconsulta. &nbsp;Las subconsultas se pueden utilizar en cualquier parte en la que se permita una expresi\u00f3n. Las subconsultas deben seguir ciertas reglas que se mencionan al final del post. Es necesario conocer la estructura de la base &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/manualsqlserver.com\/?p=219\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":1166,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,231],"tags":[79,40,51,55],"class_list":["post-219","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-consultasdedatos","category-subconsultas","tag-group-by","tag-join","tag-select","tag-subconsultas","nodate","item-wrap"],"_links":{"self":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/219","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=219"}],"version-history":[{"count":1,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/219\/revisions"}],"predecessor-version":[{"id":1173,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/219\/revisions\/1173"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/media\/1166"}],"wp:attachment":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=219"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=219"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=219"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}