<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>http://wiki.cabal.mx/index.php?action=history&amp;feed=atom&amp;title=Curso_de_MariaDB_Desde_la_Consola%2FJOINs</id>
	<title>Curso de MariaDB Desde la Consola/JOINs - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.cabal.mx/index.php?action=history&amp;feed=atom&amp;title=Curso_de_MariaDB_Desde_la_Consola%2FJOINs"/>
	<link rel="alternate" type="text/html" href="http://wiki.cabal.mx/index.php?title=Curso_de_MariaDB_Desde_la_Consola/JOINs&amp;action=history"/>
	<updated>2026-05-10T01:20:28Z</updated>
	<subtitle>Historial de revisiones para esta página en el wiki</subtitle>
	<generator>MediaWiki 1.32.1</generator>
	<entry>
		<id>http://wiki.cabal.mx/index.php?title=Curso_de_MariaDB_Desde_la_Consola/JOINs&amp;diff=111391&amp;oldid=prev</id>
		<title>Rrc en 21:11 26 oct 2015</title>
		<link rel="alternate" type="text/html" href="http://wiki.cabal.mx/index.php?title=Curso_de_MariaDB_Desde_la_Consola/JOINs&amp;diff=111391&amp;oldid=prev"/>
		<updated>2015-10-26T21:11:55Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;__NOTOC__&lt;br /&gt;
* [[:#JOINs | JOINs]]&lt;br /&gt;
&lt;br /&gt;
= JOINs =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;GESHI_FANCY_LINE_NUMBERS&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JOINs son manera para consultar datos de dos o más tablas relacionadas.&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE Cursos ( ID smallint unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
                      Nombre varchar(50) NOT NULL,&lt;br /&gt;
                      PRIMARY KEY (ID)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
MariaDB [Prueba1]&amp;gt; INSERT INTO Cursos values ( &amp;#039;&amp;#039;, &amp;#039;HTML5&amp;#039; ),&lt;br /&gt;
                                             ( &amp;#039;&amp;#039;, &amp;#039;CSS3&amp;#039; ),&lt;br /&gt;
                                             ( &amp;#039;&amp;#039;, &amp;#039;JavaScript&amp;#039; ),&lt;br /&gt;
                                             ( &amp;#039;&amp;#039;, &amp;#039;PHP&amp;#039; ),&lt;br /&gt;
                                             ( &amp;#039;&amp;#039;, &amp;#039;MariaDB&amp;#039; );&lt;br /&gt;
Query OK, 5 rows affected, 5 warnings (0.03 sec)&lt;br /&gt;
Records: 5  Duplicates: 0  Warnings: 5&lt;br /&gt;
&lt;br /&gt;
MariaDB [Prueba1]&amp;gt; insert into Cursos values ( &amp;#039;&amp;#039;,  &amp;#039;Python&amp;#039; );&lt;br /&gt;
Query OK, 1 row affected, 1 warning (0.03 sec)&lt;br /&gt;
&lt;br /&gt;
MariaDB [Prueba1]&amp;gt; SHOW CREATE TABLE Cursos;&lt;br /&gt;
+--------+-------------------------------------------------------------------------+&lt;br /&gt;
| Table  | Create Table                                                            |&lt;br /&gt;
+--------+-------------------------------------------------------------------------+&lt;br /&gt;
| Cursos | CREATE TABLE `Cursos` (&lt;br /&gt;
  `ID` smallint(5) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `Nombre` varchar(50) COLLATE utf8_unicode_ci NOT NULL,&lt;br /&gt;
  PRIMARY KEY (`ID`)&lt;br /&gt;
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci      |&lt;br /&gt;
+--------+-------------------------------------------------------------------------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
MariaDB [Prueba1]&amp;gt; DESCRIBE Cursos;&lt;br /&gt;
+--------+----------------------+------+-----+---------+----------------+&lt;br /&gt;
| Field  | Type                 | Null | Key | Default | Extra          |&lt;br /&gt;
+--------+----------------------+------+-----+---------+----------------+&lt;br /&gt;
| ID     | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |&lt;br /&gt;
| Nombre | varchar(50)          | NO   |     | NULL    |                |&lt;br /&gt;
+--------+----------------------+------+-----+---------+----------------+&lt;br /&gt;
2 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
MariaDB [Prueba1]&amp;gt; SELECT * FROM Cursos;&lt;br /&gt;
+----+------------+&lt;br /&gt;
| ID | Nombre     |&lt;br /&gt;
+----+------------+&lt;br /&gt;
|  1 | HTML5      |&lt;br /&gt;
|  2 | CSS3       |&lt;br /&gt;
|  3 | JavaScript |&lt;br /&gt;
|  4 | PHP        |&lt;br /&gt;
|  5 | MariaDB    |&lt;br /&gt;
|  6 | Python     |&lt;br /&gt;
+----+------------+&lt;br /&gt;
5 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
El número del curso se refiere a un tema en la table de Cursos&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE Usuarios ( ID smallint unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
                        Nombre varchar(30) NOT NULL,&lt;br /&gt;
                        Curso smallint unsigned,&lt;br /&gt;
                        PRIMARY KEY (ID),&lt;br /&gt;
                        KEY Curso (Curso),&lt;br /&gt;
                        CONSTRAINT Usuarios_ibfk_1 &lt;br /&gt;
                        FOREIGN KEY (Curso) REFERENCES Cursos (ID) );&lt;br /&gt;
Query OK, 0 rows affected (0.36 sec)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MariaDB [Prueba1]&amp;gt; SHOW CREATE TABLE Usuarios;&lt;br /&gt;
+----------+-------------------------------------------------------------------------+&lt;br /&gt;
| Table    | Create Table                                                            |&lt;br /&gt;
+----------+-------------------------------------------------------------------------+&lt;br /&gt;
| Usuarios | CREATE TABLE `Usuarios` (&lt;br /&gt;
  `ID` smallint(5) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `Nombre` varchar(30) COLLATE utf8_unicode_ci NOT NULL,&lt;br /&gt;
  `Curso` smallint(5) unsigned,&lt;br /&gt;
  PRIMARY KEY (`ID`),&lt;br /&gt;
  KEY `Curso` (`Curso`),&lt;br /&gt;
  CONSTRAINT `Usuarios_ibfk_1` FOREIGN KEY (`Curso`) REFERENCES `Cursos` (`ID`)&lt;br /&gt;
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci       |&lt;br /&gt;
+----------+-------------------------------------------------------------------------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
MariaDB [Prueba1]&amp;gt; DESCRIBE Usuarios;&lt;br /&gt;
+--------+----------------------+------+-----+---------+----------------+&lt;br /&gt;
| Field  | Type                 | Null | Key | Default | Extra          |&lt;br /&gt;
+--------+----------------------+------+-----+---------+----------------+&lt;br /&gt;
| ID     | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |&lt;br /&gt;
| Nombre | varchar(30)          | NO   |     | NULL    |                |&lt;br /&gt;
| Curso  | smallint(5) unsigned | YES  | UNI | NULL    |                |&lt;br /&gt;
+--------+----------------------+------+-----+---------+----------------+&lt;br /&gt;
3 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
MariaDB [Prueba1]&amp;gt; INSERT INTO Usuarios values ( &amp;#039;&amp;#039;, &amp;#039;Ana&amp;#039;, 2 ), &lt;br /&gt;
                       ( &amp;#039;&amp;#039;, &amp;#039;Roberto&amp;#039;, 1 ), ( &amp;#039;&amp;#039;, &amp;#039;Angel&amp;#039;, 5 ), &lt;br /&gt;
                       ( &amp;#039;&amp;#039;, &amp;#039;Laura&amp;#039;, 3 ),  ( &amp;#039;&amp;#039;, &amp;#039;Ricardo&amp;#039;, 4 );&lt;br /&gt;
Query OK, 5 rows affected, 5 warnings (0.04 sec)&lt;br /&gt;
Records: 5  Duplicates: 0  Warnings: 5&lt;br /&gt;
&lt;br /&gt;
MariaDB [Prueba1]&amp;gt; show warnings;&lt;br /&gt;
+---------+------+------------------------------------------------------+&lt;br /&gt;
| Level   | Code | Message                                              |&lt;br /&gt;
+---------+------+------------------------------------------------------+&lt;br /&gt;
| Warning | 1366 | Incorrect integer value: &amp;#039;&amp;#039; for column &amp;#039;ID&amp;#039; at row 1 |&lt;br /&gt;
| Warning | 1366 | Incorrect integer value: &amp;#039;&amp;#039; for column &amp;#039;ID&amp;#039; at row 2 |&lt;br /&gt;
| Warning | 1366 | Incorrect integer value: &amp;#039;&amp;#039; for column &amp;#039;ID&amp;#039; at row 3 |&lt;br /&gt;
| Warning | 1366 | Incorrect integer value: &amp;#039;&amp;#039; for column &amp;#039;ID&amp;#039; at row 4 |&lt;br /&gt;
| Warning | 1366 | Incorrect integer value: &amp;#039;&amp;#039; for column &amp;#039;ID&amp;#039; at row 5 |&lt;br /&gt;
+---------+------+------------------------------------------------------+&lt;br /&gt;
5 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
MariaDB [Prueba1]&amp;gt; INSERT INTO Usuarios values ( &amp;#039;&amp;#039;, &amp;#039;Mia&amp;#039;, 2 );&lt;br /&gt;
Query OK, 1 row affected, 1 warning (0.08 sec)&lt;br /&gt;
&lt;br /&gt;
MariaDB [Prueba1]&amp;gt; INSERT INTO Usuarios values ( &amp;#039;&amp;#039;, &amp;#039;Leo&amp;#039;, 4 );&lt;br /&gt;
Query OK, 1 row affected, 1 warning (0.08 sec)&lt;br /&gt;
&lt;br /&gt;
MariaDB [Prueba1]&amp;gt; INSERT INTO Usuarios ( ID, Nombre ) values ( &amp;#039;&amp;#039;, &amp;#039;Mauricio&amp;#039;);&lt;br /&gt;
Query OK, 1 row affected, 1 warning (0.08 sec)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MariaDB [Prueba1]&amp;gt; SELECT * FROM Usuarios;&lt;br /&gt;
+----+---------+--------+&lt;br /&gt;
| ID | Nombre  | Curso  |&lt;br /&gt;
+----+---------+--------+&lt;br /&gt;
| 1  | Ana     |      2 |&lt;br /&gt;
| 1  | Roberto |      1 |&lt;br /&gt;
| 3  | Angel   |      5 |&lt;br /&gt;
| 4  | Laura   |      3 |&lt;br /&gt;
| 5  | Ricardo |      4 |&lt;br /&gt;
| 6  | Mia     |      2 |&lt;br /&gt;
| 7  | Leo     |      4 |&lt;br /&gt;
| 8  | Mauricio |  NULL |&lt;br /&gt;
+----+---------+--------+&lt;br /&gt;
7 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
JOINs nos permite consultar estos datos en varios maneras.&lt;br /&gt;
&lt;br /&gt;
INNER JOIN&lt;br /&gt;
&lt;br /&gt;
La cláusula más frecuente es INNER JOIN. Esto produce&lt;br /&gt;
un conjunto de registros que coinciden con los usuarios &lt;br /&gt;
y tables de Cursos, es decir, todos los Usuarios que están&lt;br /&gt;
inscritos en un curso:&lt;br /&gt;
&lt;br /&gt;
MariaDB [Prueba1]&amp;gt; SELECT Usuarios.Nombre, Cursos.Nombre FROM `Usuarios`&lt;br /&gt;
                   INNER JOIN `Cursos` on &lt;br /&gt;
                   Usuarios.Curso = Cursos.ID;&lt;br /&gt;
+---------+------------+&lt;br /&gt;
| Nombre  | Nombre     |&lt;br /&gt;
+---------+------------+&lt;br /&gt;
| Ana     | CSS3       |&lt;br /&gt;
| Roberto | HTML5      |&lt;br /&gt;
| Angel   | MariaDB    |&lt;br /&gt;
| Laura   | JavaScript |&lt;br /&gt;
| Ricardo | PHP        |&lt;br /&gt;
| Mia     | CSS3       |&lt;br /&gt;
| Leo     | PHP        |&lt;br /&gt;
+---------+------------+&lt;br /&gt;
7 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
¿Qué pasa si necesitamos una lista de todos los estudiantes y sus &lt;br /&gt;
cursos incluso si no estás inscrito en uno? Un LEFT JOIN produce el&lt;br /&gt;
conjunto de registros que coincide con cada entrada en la tabla&lt;br /&gt;
izquierda (Usuarios) sin importar ninguna entrada coincidente en la &lt;br /&gt;
tabla derecha (Cursos):&lt;br /&gt;
&lt;br /&gt;
MariaDB [Prueba1]&amp;gt; SELECT Usuarios.Nombre, Cursos.Nombre&lt;br /&gt;
       FROM `Usuarios`&lt;br /&gt;
       LEFT JOIN `Cursos` on Usuarios.Curso = Cursos.ID;&lt;br /&gt;
+----------+------------+&lt;br /&gt;
| Nombre   | Nombre     |&lt;br /&gt;
+----------+------------+&lt;br /&gt;
| Ana      | CSS3       |&lt;br /&gt;
| Roberto  | HTML5      |&lt;br /&gt;
| Angel    | MariaDB    |&lt;br /&gt;
| Laura    | JavaScript |&lt;br /&gt;
| Ricardo  | PHP        |&lt;br /&gt;
| Mia      | CSS3       |&lt;br /&gt;
| Leo      | PHP        |&lt;br /&gt;
| Mauricio | NULL       |&lt;br /&gt;
+----------+------------+&lt;br /&gt;
8 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
RIGHT JOIN&lt;br /&gt;
&lt;br /&gt;
Tal vez necesitamos una lista de todos los cursos y estudiantes &lt;br /&gt;
incluso si nadie se ha inscrito? Un RIGHT JOIN produce un conjunto&lt;br /&gt;
de registros que coincide con cada entrada en la tabla de la &lt;br /&gt;
derecha (Cursos) independientemente de cualquier entrada &lt;br /&gt;
coincidente en la tabla de la izquierda (Usuarios):&lt;br /&gt;
&lt;br /&gt;
MariaDB [Prueba1]&amp;gt; SELECT Usuarios.Nombre, Cursos.Nombre&lt;br /&gt;
       FROM `Usuarios`&lt;br /&gt;
       RIGHT JOIN `Cursos` on Usuarios.Curso = Cursos.ID;&lt;br /&gt;
+---------+------------+&lt;br /&gt;
| Nombre  | Nombre     |&lt;br /&gt;
+---------+------------+&lt;br /&gt;
| Roberto | HTML5      |&lt;br /&gt;
| Ana     | CSS3       |&lt;br /&gt;
| Mia     | CSS3       |&lt;br /&gt;
| Laura   | JavaScript |&lt;br /&gt;
| Ricardo | PHP        |&lt;br /&gt;
| Leo     | PHP        |&lt;br /&gt;
| Angel   | MariaDB    |&lt;br /&gt;
| NULL    | Python     |&lt;br /&gt;
+---------+------------+&lt;br /&gt;
7 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
RGHT JOINs are rarely used since you can express the same result using a LEFT JOIN. This can be more efficient and quicker for the database to parse:&lt;br /&gt;
RGHT JOINs rara vez se utiliza ya que se puede expresar &lt;br /&gt;
el mismo resultado utilizando un LEFT JOIN. Esto puede &lt;br /&gt;
ser más eficiente y más rápido para la base de datos para &lt;br /&gt;
analizar:&lt;br /&gt;
&lt;br /&gt;
MariaDB [Prueba1]&amp;gt; SELECT Usuarios.Nombre, Cursos.Nombre &lt;br /&gt;
                     FROM Cursos &lt;br /&gt;
                   LEFT JOIN Usuarios on Usuarios.Curso = Cursos.ID;&lt;br /&gt;
+---------+------------+&lt;br /&gt;
| Nombre  | Nombre     |&lt;br /&gt;
+---------+------------+&lt;br /&gt;
| Roberto | HTML5      |&lt;br /&gt;
| Ana     | CSS3       |&lt;br /&gt;
| Mia     | CSS3       |&lt;br /&gt;
| Laura   | JavaScript |&lt;br /&gt;
| Ricardo | PHP        |&lt;br /&gt;
| Leo     | PHP        |&lt;br /&gt;
| Angel   | MariaDB    |&lt;br /&gt;
| NULL    | Python     |&lt;br /&gt;
+---------+------------+&lt;br /&gt;
7 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
Podríamos contar el número de alumnos inscribiendos en cada curso:&lt;br /&gt;
&lt;br /&gt;
MariaDB [Prueba1]&amp;gt; SELECT Cursos.Nombre, COUNT(Usuarios.Nombre)&lt;br /&gt;
                     FROM Cursos&lt;br /&gt;
                   LEFT JOIN Usuarios ON Usuarios.Curso = Cursos.ID&lt;br /&gt;
                   GROUP BY Cursos.ID;&lt;br /&gt;
+------------+------------------------+&lt;br /&gt;
| Nombre     | COUNT(Usuarios.Nombre) |&lt;br /&gt;
+------------+------------------------+&lt;br /&gt;
| HTML5      |                      1 |&lt;br /&gt;
| CSS3       |                      2 |&lt;br /&gt;
| JavaScript |                      1 |&lt;br /&gt;
| PHP        |                      2 |&lt;br /&gt;
| MariaDB    |                      1 |&lt;br /&gt;
| Python     |                      0 |&lt;br /&gt;
+------------+------------------------+&lt;br /&gt;
6 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
OUTER JOIN (or FULL OUTER JOIN)&lt;br /&gt;
&lt;br /&gt;
Nuestra última opción es la OUTER JOIN que devuelve todos &lt;br /&gt;
los registros en ambas tablas, independientemente de cualquier &lt;br /&gt;
partido. Cuando no existe coincidencia, el lado que falta &lt;br /&gt;
contendrá NULL.&lt;br /&gt;
&lt;br /&gt;
OUTER JOIN es menos útil que INNER LEFT o RIGHT y no se implementó en MySQL. &lt;br /&gt;
Sin embargo, puede evitar esta restricción mediante la unión de &lt;br /&gt;
un LEFT y RIGHT JOIN, por ejemplo,&lt;br /&gt;
&lt;br /&gt;
SELECT Usuarios.Nombre, Cursos.Nombre &lt;br /&gt;
         FROM Usuarios &lt;br /&gt;
       LEFT JOIN Cursos &lt;br /&gt;
         ON Usuarios.Curso = Cursos.ID &lt;br /&gt;
UNION SELECT Usuarios.Nombre, Cursos.Nombre &lt;br /&gt;
         FROM Usuarios &lt;br /&gt;
       RIGHT JOIN Cursos &lt;br /&gt;
         ON Usuarios.Curso = Cursos.ID;&lt;br /&gt;
+----------+------------+&lt;br /&gt;
| Nombre   | Nombre     |&lt;br /&gt;
+----------+------------+&lt;br /&gt;
| Ana      | CSS3       |&lt;br /&gt;
| Roberto  | HTML5      |&lt;br /&gt;
| Angel    | MariaDB    |&lt;br /&gt;
| Laura    | JavaScript |&lt;br /&gt;
| Ricardo  | PHP        |&lt;br /&gt;
| Mia      | CSS3       |&lt;br /&gt;
| Leo      | PHP        |&lt;br /&gt;
| Mauricio | NULL       |&lt;br /&gt;
| NULL     | Python     |&lt;br /&gt;
+----------+------------+&lt;br /&gt;
9 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:MariaDB Desde la Consola]]&lt;br /&gt;
[[Category: CursoMatiaDB]]&lt;/div&gt;</summary>
		<author><name>Rrc</name></author>
		
	</entry>
</feed>