{"id":215,"date":"2017-09-18T23:10:28","date_gmt":"2017-09-18T23:10:28","guid":{"rendered":"http:\/\/www.manualsqlserver.com\/?p=215"},"modified":"2020-05-19T03:35:54","modified_gmt":"2020-05-19T03:35:54","slug":"215","status":"publish","type":"post","link":"https:\/\/manualsqlserver.com\/?p=215","title":{"rendered":"Consultas de varias tablas &#8211; Usando Join"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"318\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ConsultasJoinsD.png\" alt=\"\" class=\"wp-image-1074\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ConsultasJoinsD.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ConsultasJoinsD-283x300.png 283w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Select desde varias tablas &#8211; Uso de Joins<\/strong><\/h1>\n\n\n\n<p>Para escribir consultas cuyos datos que se desea mostrar se encuentran en varias tablas es necesario que estas est\u00e9n CORRECTAMENTE relacionadas, antes de hacer las consultas desde varias tablas se deben evitar y corregir los valores Null en la base de datos. Es convenientes que las relaciones entre tablas cumplan con la integridad de datos.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Para optimizar las consultas desde varias tablas se recomienda usar \u00a0Join de la manera como se muestran en los ejercicios. Siempre hay una tabla desde donde se va a listar los registros y otras desde donde se van a extraer valores para completar el listado con datos que la hacen mas detallada.<\/p>\n\n\n\n<p>Para usar un Join existen varias formas, en este art\u00edculo se explica el uso del join de la manera m\u00e1s simple, la cl\u00e1usula Join se escribe despu\u00e9s de la cl\u00e1usula From,  es conveniente definir de manera correcta las dos tablas que se relacionan, existe un campo com\u00fan entre las dos tablas, en la tabla principal es la PK y en la tabla con la que se relacionar\u00e1 es la FK.<\/p>\n\n\n\n<p>Se recomienda usar alias adecuados para las tablas y los campos en el listado desde varias tablas. (<a href=\"https:\/\/manualsqlserver.com\/?p=195\">Ver Uso de Alias en consultas<\/a>)<\/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<h2 class=\"wp-block-heading\"><strong>Ejercicios<\/strong><\/h2>\n\n\n\n<p><strong>Usando Norhtwind<\/strong><br>use Northwind<br>go<\/p>\n\n\n\n<p><strong>1. &#8212; Listado de las \u00f3rdenes y el nombre del cliente<\/strong><\/p>\n\n\n\n<p>select O.OrderID As &#8216;Orden&#8217;, O.Freight as &#8216;Monto&#8217;,<br>C.CompanyName As &#8216;Cliente&#8217;<br>from Orders As O<br>join Customers As C on O.CustomerID = C.CustomerID<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_ConsultasJoins_01.png\" alt=\"\" class=\"wp-image-1066\" width=\"617\" height=\"608\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ConsultasJoins_01.png 432w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ConsultasJoins_01-300x296.png 300w\" sizes=\"auto, (max-width: 617px) 100vw, 617px\" \/><\/figure><\/div>\n\n\n\n<p><strong>2. &#8212; Listado de las \u00f3rdenes y el nombre del empleado que las gener\u00f3<\/strong><\/p>\n\n\n\n<p>select O.OrderID As &#8216;Orden&#8217;, O.Freight as &#8216;Monto&#8217;,<br>Empleado = E.LastName + SPACE(1) + E.FirstName<br>from Orders As O<br>join Employees As E on O.EmployeeID = E.EmployeeID<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_ConsultasJoins_02.png\" alt=\"\" class=\"wp-image-1067\" width=\"621\" height=\"612\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ConsultasJoins_02.png 432w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ConsultasJoins_02-300x296.png 300w\" sizes=\"auto, (max-width: 621px) 100vw, 621px\" \/><\/figure><\/div>\n\n\n\n<p><strong>3. &#8212; Listado de las \u00f3rdenes y los nombres del cliente y del empleado que las gener\u00f3<\/strong><\/p>\n\n\n\n<p>select O.OrderID As &#8216;Orden&#8217;, O.Freight as &#8216;Monto&#8217;,<br>C.CompanyName As &#8216;Cliente&#8217;,<br>Empleado = E.LastName + SPACE(1) + E.FirstName<br>from Orders As O<br>join Customers As C on O.CustomerID = C.CustomerID<br>join Employees As E on O.EmployeeID = E.EmployeeID<br>go<br><strong>&#8212; Note los joins despu\u00e9s de la cl\u00e1usula From<\/strong><\/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_ConsultasJoins_03.png\" alt=\"\" class=\"wp-image-1068\" width=\"748\" height=\"467\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ConsultasJoins_03.png 666w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ConsultasJoins_03-300x187.png 300w\" sizes=\"auto, (max-width: 748px) 100vw, 748px\" \/><\/figure><\/div>\n\n\n\n<p><strong>4. &#8212; Producto y su categoria<\/strong><\/p>\n\n\n\n<p>select P.ProductID As &#8216;C\u00f3digo&#8217;, P.ProductName,<br>P.UnitPrice As &#8216;Precio&#8217;, C.CategoryName<br>from Products As P<br>join Categories As C on P.CategoryID = C.CategoryID<br>go<\/p>\n\n\n\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_ConsultasJoins_04.png\" alt=\"\" class=\"wp-image-1069\" width=\"780\" height=\"464\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ConsultasJoins_04.png 702w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ConsultasJoins_04-300x179.png 300w\" sizes=\"auto, (max-width: 780px) 100vw, 780px\" \/><\/figure>\n\n\n\n<p><strong>5. &#8212; El detalle de la orden 10275, incluyendo el nombre del producto.<\/strong><\/p>\n\n\n\n<p>select Od.OrderID As &#8216;N\u00ba Orden&#8217;, Od.ProductID As &#8216;C\u00f3d. Producto&#8217;,<br>P.ProductName As &#8216;Descripci\u00f3n&#8217;, Od.UnitPrice As &#8216;Precio&#8217;,<br>Od.Quantity As &#8216;Cantidad&#8217;<br>from [Order Details] As OD<br>join Products As P on od.ProductID = P.ProductID<br>where OrderID = &#8216;10275&#8217;<br>go<\/p>\n\n\n\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_ConsultasJoins_05.png\" alt=\"\" class=\"wp-image-1070\" width=\"736\" height=\"105\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ConsultasJoins_05.png 681w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ConsultasJoins_05-300x43.png 300w\" sizes=\"auto, (max-width: 736px) 100vw, 736px\" \/><\/figure>\n\n\n\n<p><strong>6. &#8212; Listado de productos y el proveedor<\/strong><\/p>\n\n\n\n<p>select P.ProductID As &#8216;C\u00f3digo&#8217;, P.ProductName,<br>P.UnitPrice As &#8216;Precio&#8217;, S.CompanyName As &#8216;Courier&#8217;,<br>S.Address As &#8216;Direcci\u00f3n Courier&#8217;<br>from Products As P<br>join Suppliers As S on P.SupplierID= S.SupplierID<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_ConsultasJoins_06.png\" alt=\"\" class=\"wp-image-1071\" width=\"819\" height=\"338\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ConsultasJoins_06.png 1017w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ConsultasJoins_06-300x124.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ConsultasJoins_06-768x317.png 768w\" sizes=\"auto, (max-width: 819px) 100vw, 819px\" \/><\/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\n<p><strong>7. &#8212; Listado de \u00f3rdenes y las compa\u00f1\u00edas de env\u00edo<\/strong><\/p>\n\n\n\n<p>select O.OrderID As &#8216;Orden&#8217;, O.Freight as &#8216;Monto&#8217;,<br>S.CompanyName As &#8216;Courier&#8217;<br>from Orders As O<br>join Shippers As S on O.ShipVia = S.ShipperID<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_ConsultasJoins_07.png\" alt=\"\" class=\"wp-image-1072\" width=\"644\" height=\"625\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ConsultasJoins_07.png 433w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ConsultasJoins_07-300x291.png 300w\" sizes=\"auto, (max-width: 644px) 100vw, 644px\" \/><\/figure><\/div>\n\n\n\n<p><strong>8. &#8212; Incluir en la orden anterior el nombre del empleado que&nbsp;&nbsp;<\/strong><strong>gener\u00f3 la orden y el cliente.<\/strong><\/p>\n\n\n\n<p>select O.OrderID As &#8216;Orden&#8217;, O.Freight as &#8216;Monto&#8217;,<br>C.CompanyName As &#8216;Cliente&#8217;,<br>Empleado = E.LastName + SPACE(1) + E.FirstName,<br>S.CompanyName As &#8216;Courier&#8217;<br>from Orders As O<br>join Shippers As S on O.ShipVia = S.ShipperID<br>join Customers As C on O.CustomerID = C.CustomerID<br>join Employees As E on O.EmployeeID = E.EmployeeID<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_ConsultasJoins_08.png\" alt=\"\" class=\"wp-image-1073\" width=\"776\" height=\"382\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ConsultasJoins_08.png 852w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ConsultasJoins_08-300x148.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ConsultasJoins_08-768x379.png 768w\" sizes=\"auto, (max-width: 776px) 100vw, 776px\" \/><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Recomendaciones<\/strong>:<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Al usar Join, antes de realizar listados, deben eliminarse los valores Null de la base de datos.<\/li><li>En el dise\u00f1o de su base de datos debe estar correctamente definidas las claves primarias de las tablas y las claves for\u00e1neas de las mismas para que los datos ingresados tengan consistencias e integridad.<\/li><li>Al utilizar Join, despu\u00e9s de la palabra ON la primera tabla de la igualdad es la principal, la que se encuentra despu\u00e9s de la cl\u00e1usula From, en la parte derecha de la igualdad va la tabla referenciada despu\u00e9s de la palabra join.<\/li><\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Select desde varias tablas &#8211; Uso de Joins Para escribir consultas cuyos datos que se desea mostrar se encuentran en varias tablas es necesario que estas est\u00e9n CORRECTAMENTE relacionadas, antes de hacer las consultas desde varias tablas se deben evitar y corregir los valores Null en la base de datos. Es convenientes que las relaciones &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/manualsqlserver.com\/?p=215\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":1074,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[40,51],"class_list":["post-215","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-consultasdedatos","tag-join","tag-select","nodate","item-wrap"],"_links":{"self":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/215","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=215"}],"version-history":[{"count":1,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/215\/revisions"}],"predecessor-version":[{"id":1075,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/215\/revisions\/1075"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/media\/1074"}],"wp:attachment":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=215"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=215"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=215"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}