{"id":165,"date":"2014-03-07T12:38:21","date_gmt":"2014-03-07T12:47:52","guid":{"rendered":"https:\/\/eb96aINNNER.jpg"},"modified":"2015-07-16T20:57:54","modified_gmt":"2015-07-17T02:57:54","slug":"uso-de-join-en-mysql-ejemplos-practicos","status":"publish","type":"post","link":"https:\/\/emanuelpaxtian.com\/blog\/uso-de-join-en-mysql-ejemplos-practicos\/","title":{"rendered":"Uso de Join en mysql ejemplos practicos"},"content":{"rendered":"<p>Supongamos que tenemos dos tablas y deseamos unirlas \u00bfpero como las queremos unir? \u00bfpor los registros conicidentes? \u00bflos que coinciden en tabla A? \u00bflos que coinciden en tabla B? \u00a0\u00bfo algun otro?<\/p>\n<p>Supongamos que tenemos las siguientes dos tablas. Tabla A est\u00e1 a la izquierda, y en la Tabla B est\u00e1 a la derecha. Vamos a poblar con cuatro registros cada una.<\/p>\n<div class=\"one-half\">\n<table class=\"gen-table\">\n<thead>\n<tr>\n<th>ID<\/th>\n<th>NAME<\/th>\n<\/tr>\n<\/thead>\n<tfoot>\n<tr>\n<td colspan=\"2\">Tabla 1<\/td>\n<\/tr>\n<\/tfoot>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>Pirate<\/td>\n<\/tr>\n<tr class=\"odd\">\n<td>2<\/td>\n<td>Monkey<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>Ninja<\/td>\n<\/tr>\n<tr class=\"row-last\">\n<td>4<\/td>\n<td>Spaghetti<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"one-half column-last\">\n<table class=\"gen-table\">\n<thead>\n<tr>\n<th>ID<\/th>\n<th>NAME<\/th>\n<\/tr>\n<\/thead>\n<tfoot>\n<tr>\n<td colspan=\"2\">Tabla 2<\/td>\n<\/tr>\n<\/tfoot>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>Rutabaga<\/td>\n<\/tr>\n<tr class=\"odd\">\n<td>2<\/td>\n<td>Pirate<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>Darth Vader<\/td>\n<\/tr>\n<tr class=\"row-last\">\n<td>4<\/td>\n<td>Ninja<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Unamos estas tablas por el campo de nombre de varias maneras diferentes y ver si podemos conseguir un partido conceptual a los diagramas de Venn ingeniosas.<\/p>\n<div class=\"one-half\">\n<pre>SELECT * FROM TableA\r\n<strong>INNER JOIN<\/strong> TableB\r\nON TableA.name = TableB.name<\/pre>\n<table class=\"gen-table\">\n<thead>\n<tr>\n<th>ID<\/th>\n<th>NAME<\/th>\n<th>ID<\/th>\n<th>NAME<\/th>\n<\/tr>\n<\/thead>\n<tfoot>\n<tr>\n<td colspan=\"4\">INNER JOIN<\/td>\n<\/tr>\n<\/tfoot>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>Pirate<\/td>\n<td>2<\/td>\n<td>Pirate<\/td>\n<\/tr>\n<tr class=\"row-last\">\n<td>3<\/td>\n<td>Ninja<\/td>\n<td>4<\/td>\n<td>Ninja<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Inner join s\u00f3lo produce el conjunto de registros que coinciden tanto en los cuadros A y B.<\/p>\n<\/div>\n<div class=\"one-half column-last\">\n<div class=\"entry-image\"><img loading=\"lazy\" decoding=\"async\" src=\"..\/fotos\/INNER-JOIN.png\" alt=\"\" width=\"502\" height=\"329\" \/><\/div>\n<\/div>\n<div class=\"one-half\">\n<pre>SELECT * FROM TableA\r\n<strong>FULL OUTER JOIN<\/strong> TableB\r\nON TableA.name = TableB.name<\/pre>\n<table class=\"gen-table\">\n<thead>\n<tr>\n<th>ID<\/th>\n<th>NAME<\/th>\n<th>ID<\/th>\n<th>NAME<\/th>\n<\/tr>\n<\/thead>\n<tfoot>\n<tr>\n<td colspan=\"4\">Full Outer join<\/td>\n<\/tr>\n<\/tfoot>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>Pirate<\/td>\n<td>2<\/td>\n<td>Pirate<\/td>\n<\/tr>\n<tr class=\"odd\">\n<td>2<\/td>\n<td>Monkey<\/td>\n<td>null<\/td>\n<td>null<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>Ninja<\/td>\n<td>4<\/td>\n<td>Ninja<\/td>\n<\/tr>\n<tr class=\"odd\">\n<td>4<\/td>\n<td>Spaghetti<\/td>\n<td>null<\/td>\n<td>null<\/td>\n<\/tr>\n<tr>\n<td>null<\/td>\n<td>null<\/td>\n<td>1<\/td>\n<td>Rutabaga<\/td>\n<\/tr>\n<tr class=\"row-last\">\n<td>null<\/td>\n<td>null<\/td>\n<td>3<\/td>\n<td>Darh Vader<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Full Outer join<\/strong>\u00a0produce el conjunto de todos los registros en el cuadro A y el cuadro B, con registros coincidentes de ambos lados cuando est\u00e9n disponibles. Si no hay ninguna coincidencia, el lado que falta se contiene nula.<\/p>\n<\/div>\n<div class=\"one-half column-last\">\n<div class=\"entry-image\"><img loading=\"lazy\" decoding=\"async\" title=\"Inner Join\" src=\"..\/fotos\/INNER-JOIN.png\" alt=\"\" width=\"502\" height=\"329\" \/><\/div>\n<\/div>\n<div class=\"one-half\">\n<pre>SELECT * FROM TableA\r\nLEFT OUTER JOIN TableB\r\nON TableA.name = TableB.name<\/pre>\n<table class=\"gen-table\">\n<thead>\n<tr>\n<th>ID<\/th>\n<th>NAME<\/th>\n<th>ID<\/th>\n<th>NAME<\/th>\n<\/tr>\n<\/thead>\n<tfoot>\n<tr>\n<td colspan=\"4\">LEFT OUTER JOIN<\/td>\n<\/tr>\n<\/tfoot>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>Pirate<\/td>\n<td>2<\/td>\n<td>Pirate<\/td>\n<\/tr>\n<tr class=\"odd\">\n<td>2<\/td>\n<td>Monkey<\/td>\n<td>null<\/td>\n<td>null<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>Ninja<\/td>\n<td>4<\/td>\n<td>Ninja<\/td>\n<\/tr>\n<tr class=\"row-last\">\n<td>4<\/td>\n<td>Spaghetti<\/td>\n<td>null<\/td>\n<td>null<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Left outer join<\/strong>\u00a0produce un conjunto completo de los registros de la Tabla A, con los registros coincidentes (donde est\u00e9 disponible) de la Tabla B. Si no hay ninguna coincidencia, el lado derecho contendr\u00e1 nulo.<\/p>\n<\/div>\n<div class=\"one-half column-last\">\n<div class=\"entry-image\"><img loading=\"lazy\" decoding=\"async\" title=\"Inner Join\" src=\"..\/fotos\/Left-outer-join.png\" alt=\"\" width=\"502\" height=\"329\" \/><\/div>\n<\/div>\n<hr \/>\n<div class=\"one-half\">\n<pre>SELECT * FROM TableA\r\nLEFT OUTER JOIN TableB\r\nON TableA.name = TableB.name\r\nWHERE TableB.id IS null<\/pre>\n<table class=\"gen-table\">\n<thead>\n<tr>\n<th>ID<\/th>\n<th>NAME<\/th>\n<th>ID<\/th>\n<th>NAME<\/th>\n<\/tr>\n<\/thead>\n<tfoot>\n<tr>\n<td colspan=\"4\">LEFT OUTER JOIN<\/td>\n<\/tr>\n<\/tfoot>\n<tbody>\n<tr>\n<td>2<\/td>\n<td>Monkey<\/td>\n<td>null<\/td>\n<td>null<\/td>\n<\/tr>\n<tr class=\"row-last\">\n<td>4<\/td>\n<td>Spaghetti<\/td>\n<td>null<\/td>\n<td>null<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Para producir el conjunto de registros s\u00f3lo de la Tabla A, pero no en la Tabla B, se realiza la misma combinaci\u00f3n externa izquierda, a continuaci\u00f3n, excluir los registros que no queremos desde la derecha a trav\u00e9s de una cl\u00e1usula de d\u00f3nde.<\/p>\n<\/div>\n<div class=\"one-half column-last\">\n<div class=\"entry-image\"><img loading=\"lazy\" decoding=\"async\" src=\"..\/fotos\/LEFT-OUTER-JOIN-with-ISNULL.png\" alt=\"\" width=\"502\" height=\"329\" \/><\/div>\n<\/div>\n<hr \/>\n<div class=\"one-half\">\n<pre>SELECT * FROM TableA\r\nFULL OUTER JOIN TableB\r\nON TableA.name = TableB.name\r\nWHERE TableA.id IS null \r\nOR TableB.id IS null<\/pre>\n<table class=\"gen-table\">\n<thead>\n<tr>\n<th>ID<\/th>\n<th>NAME<\/th>\n<th>ID<\/th>\n<th>NAME<\/th>\n<\/tr>\n<\/thead>\n<tfoot>\n<tr>\n<td colspan=\"4\">FULL OUTER JOIN<\/td>\n<\/tr>\n<\/tfoot>\n<tbody>\n<tr>\n<td>2<\/td>\n<td>Monkey<\/td>\n<td>null<\/td>\n<td>null<\/td>\n<\/tr>\n<tr class=\"odd\">\n<td>4<\/td>\n<td>Spaghetti<\/td>\n<td>null<\/td>\n<td>null<\/td>\n<\/tr>\n<tr>\n<td>null<\/td>\n<td>null<\/td>\n<td>1<\/td>\n<td>Rutabaga<\/td>\n<\/tr>\n<tr class=\"row-last\">\n<td>null<\/td>\n<td>null<\/td>\n<td>3<\/td>\n<td>Darth Vader<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Para producir el conjunto de registros \u00fanicos de los cuadros A y B, que realizan la misma combinaci\u00f3n externa completa, entonces excluir los registros que no queremos a ambos lados a trav\u00e9s de una cl\u00e1usula where.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Supongamos que tenemos dos tablas y deseamos unirlas \u00bfpero como las queremos unir? \u00bfpor los registros conicidentes? \u00bflos que coinciden en tabla A? \u00bflos que coinciden en tabla B? \u00a0\u00bfo&hellip;<\/p>\n","protected":false},"author":1,"featured_media":480,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14],"tags":[],"class_list":["post-165","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mysql"],"_links":{"self":[{"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/posts\/165","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/comments?post=165"}],"version-history":[{"count":0,"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/posts\/165\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/media\/480"}],"wp:attachment":[{"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/media?parent=165"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/categories?post=165"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/tags?post=165"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}