---
title: Curso de Bases de Datos con MySql -Parte IV- (Video) «INNER JOIN»
url: https://jarroba.com/curso-de-bases-de-datos-con-mysql-parte-iv-video-inner-join/
author: Richard [Admin Jarroba]
date: 2012-09-28
modified: 2026-10-21
language: es
license: CC BY-NC-SA 3.0 (https://creativecommons.org/licenses/by-nc-sa/3.0/) — attribution: "Curso de Bases de Datos con MySql -Parte IV- (Video) «INNER JOIN»", Richard [Admin Jarroba], jarroba.com
categories: Bases de Datos
tags: Inner join, MySql
series: Curso de bases de datos con MySQL (part 4 of 5)
---

# Curso de Bases de Datos con MySql -Parte IV- (Video) «INNER JOIN»

> En esta cuarta parte se va a pasar a explicar cómo se "unen" tablas con la sentencia INNER JOIN a partir de una clave foránea

### Parte IV: Sentencia INNER JOIN para la unión de Tablas

 

En esta cuarta parte se va a pasar a explicar cómo se «unen» tablas con la sentencia INNER JOIN a partir de una clave foránea (como es obvio). Tal y como se explica en el siguiente Video Tutorial se unen las dos tablas a partir de la «clave» común que en este caso es el identificador de la persona. A continuación mostramos la estructura de la sentencia INNER JOIN:

 

```sql

SELECT * FROM Tabla1 INNER JOIN Tabla2
ON Tabla1.identificador = Tabla2.identificador;
```

 

La misma estructura tienen las sentencias de LEFT JOIN y RIGHT JOIN que veremos más adelante

 

A continuación mostramos el Video-Tutorial de como hacerlo:

 

 

Todo el material para poder realizar y seguir este tutorial os lo podeis descargar [AQUI](https://jarroba.com/wp-content/uploads/2012/09/Script-Tutorial4-MySql.zip).

 

En este tutorial se ha realizado con las siguientes tablas y con la relación que se muestra en la siguiente imagen:

 

[![Diagrama entidad-relación de las tablas Persona y Coche, con relación de uno a muchos a través de Persona_id](https://jarroba.com/wp-content/uploads/2012/09/Foto.png)](https://jarroba.com/wp-content/uploads/2012/09/Foto.png)

 

Para saber más sobre cómo relacionar tablas y el paso de claves foráneas de unas tablas a otras según su relación, mirar el tutorial 2 de bases de datos [pulsando AQUI](https://jarroba.com/curso-de-bases-de-datos-con-mysql-parte-ii-video/).

 

El script para la creación de las tablas y su relación es el siguiente y lo podéis ejecutar tal y como se muestra en el video tutorial:

 

```sql

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

CREATE SCHEMA IF NOT EXISTS `miprimerabasededatos` DEFAULT CHARACTER SET utf8 COLLATE utf8_spanish_ci ;
USE `miprimerabasededatos` ;

-- -----------------------------------------------------
-- Table `miprimerabasededatos`.`Persona`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `miprimerabasededatos`.`Persona` (
  `id` INT(11) NOT NULL AUTO_INCREMENT ,
  `Nombre` VARCHAR(80) CHARACTER SET 'utf8' COLLATE 'utf8_spanish_ci' NOT NULL ,
  `Apellido1` VARCHAR(80) CHARACTER SET 'utf8' COLLATE 'utf8_spanish_ci' NOT NULL ,
  `Apellido2` VARCHAR(80) CHARACTER SET 'utf8' COLLATE 'utf8_spanish_ci' NOT NULL ,
  `DNI` VARCHAR(9) CHARACTER SET 'utf8' COLLATE 'utf8_spanish_ci' NOT NULL ,
  PRIMARY KEY (`id`) ,
  UNIQUE INDEX `id_UNIQUE` (`id` ASC) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_spanish_ci;

-- -----------------------------------------------------
-- Table `miprimerabasededatos`.`Coche`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `miprimerabasededatos`.`Coche` (
  `Matricula` VARCHAR(7) CHARACTER SET 'utf8' COLLATE 'utf8_spanish_ci' NOT NULL ,
  `Marca` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8_spanish_ci' NOT NULL ,
  `Modelo` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8_spanish_ci' NOT NULL ,
  `Caballos` INT(11) NOT NULL ,
  `Persona_id` INT(11) NOT NULL ,
  PRIMARY KEY (`Matricula`, `Persona_id`) ,
  UNIQUE INDEX `Matricula_UNIQUE` (`Matricula` ASC) ,
  INDEX `fk_Coche_Persona_idx` (`Persona_id` ASC) ,
  CONSTRAINT `fk_Coche_Persona`
    FOREIGN KEY (`Persona_id` )
    REFERENCES `miprimerabasededatos`.`Persona` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_spanish_ci;

SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
```

 

*PARA VER LOS CAMBIOS ACORDAOS DE «REFRESCAR».*

 

Para meter contenido a las dos tablas, tal y como se ha hecho en el tutorial, ejecutar las siguientes sentencias:

 

**TABLA PERSONA**

 

```javascript

INSERT INTO `Persona` (`id`,`Nombre`,`Apellido1`,`Apellido2`,`DNI`) VALUES (1,'Ricardo','Moya','Garcia','30000000A');
INSERT INTO `Persona` (`id`,`Nombre`,`Apellido1`,`Apellido2`,`DNI`) VALUES (2,'Pepe','Garcia','Garcia','23456789F');
INSERT INTO `Persona` (`id`,`Nombre`,`Apellido1`,`Apellido2`,`DNI`) VALUES (3,'Paco','Gonzalez','Gonzalez','76134289Q');
INSERT INTO `Persona` (`id`,`Nombre`,`Apellido1`,`Apellido2`,`DNI`) VALUES (4,'Lola','Perez','Lopez','34872453R');
```

 

**TABLA COCHE**

 

```javascript

INSERT INTO `Coche` (`Matricula`,`Marca`,`Modelo`,`Caballos`,`Persona_id`) VALUES ('1234bcb','Citroen','C3',500,1);
INSERT INTO `Coche` (`Matricula`,`Marca`,`Modelo`,`Caballos`,`Persona_id`) VALUES ('5678CDC','Renault','Clio',120,2);
INSERT INTO `Coche` (`Matricula`,`Marca`,`Modelo`,`Caballos`,`Persona_id`) VALUES ('6713bbb','Reanult','Megane',150,2);
INSERT INTO `Coche` (`Matricula`,`Marca`,`Modelo`,`Caballos`,`Persona_id`) VALUES ('8923DDD','Seat','Ibiza',100,3);
INSERT INTO `Coche` (`Matricula`,`Marca`,`Modelo`,`Caballos`,`Persona_id`) VALUES ('9823bbb','Ferrari','F25',900,1);
```

 

***NOTA: Se ha introducido una tupla más en la tabla persona para mostrar un ejemplo claro con el LEFT JOIN.***

 

La primera consulta realizada en el video tutorial en el que se hace la misma consulta que con el INNER JOIN pero sin el INNER JOIN es la siguiente:

 

```sql

SELECT * FROM Coche C ,Persona P 
WHERE C.Persona_id = P.id;
```

 

El resultado de la consulta es el siguiente:

 

| Matricula | Marca | Modelo | Caballos | Persona_id | id | Nombre | Apellido1 | Apellido2 | DNI |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 1234bcb | Citroen | C3 | 500 | 1 | 1 | Ricardo | Moya | Garcia | 30000000A |
| 9823bbb | Ferrari | F25 | 900 | 1 | 1 | Ricardo | Moya | Garcia | 30000000A |
| 5678CDC | Renault | Clio | 120 | 2 | 2 | Pepe | Garcia | Garcia | 23456789F |
| 6713bbb | Reanult | Megane | 150 | 2 | 2 | Pepe | Garcia | Garcia | 23456789F |
| 8923DDD | Seat | Ibiza | 100 | 3 | 3 | Paco | Gonzalez | Gonzalez | 76134289Q |

 

Esa misma consulta realizada con la sentencia INNER JOIN tendría la siguiente forma y daría el mismo resultado:

 

```sql

SELECT * FROM Coche INNER JOIN Persona 
	ON Coche.Persona_id = Persona.id;
```

 

La siguiente consulta es una consulta utilizando el INNER JOIN pero en la que seleccionamos unos datos concretos de una determinada persona. En este caso seleccionamos el id, el Nombre de la persona con id=2 y la Marca y Modelo de los Coches que tiene:

 

```sql

SELECT id,Nombre,Marca,Modelo FROM Coche INNER JOIN Persona 
	ON Coche.Persona_id = Persona.id
	WHERE Persona.id=2;
```

 

El resultado de la consulta sería el siguiente:

 

| id | Nombre | Marca | Modelo |
| --- | --- | --- | --- |
| 2 | Pepe | Renault | Clio |
| 2 | Pepe | Reanult | Megane |

 

Ahora ponemos un ejemplo con el LEFT JOIN, que lo que hace es seleccionar todos los «id» de la tabla izquierda (de la tabla LEFT) y los une con las tuplas de la tabla con la que le unimos. Si no tiene relación con ninguna de las tuplas de la derecha, mostrará los datos de la tabla izquierda. Para verlo más sencillo realizamos la siguiente consulta con el LEFT JOIN:

 

```sql

SELECT id,Nombre,Marca,Modelo FROM Persona LEFT JOIN Coche 
	ON Coche.Persona_id = Persona.id;
```

 

Y el resultado que obtenemos de la consulta es el siguiente:

 

| id | Nombre | Marca | Modelo |
| --- | --- | --- | --- |
| 1 | Ricardo | Citroen | C3 |
| 1 | Ricardo | Ferrari | F25 |
| 2 | Pepe | Renault | Clio |
| 2 | Pepe | Reanult | Megane |
| 3 | Paco | Seat | Ibiza |
| 4 | Lola | NULL | NULL |

 

Como se observa en este caso la persona con identificador ‘4’ llamada ‘Lola’ no tiene ningún coche, pero la consulta realizada la da como resultado sin que esta tenga una tupla asociada en la tabla Coche de la base de datos. En este caso el LEFT JOIN porque la consulta es «***Persona LEFT JOIN Coche***» y Persona está a la izquierda de Coche. Queda como ejercicio probar el RIGHT JOIN poniendo «***Coche RIGHT JOIN Persona***" para que veáis el resultado que obteneis. "***¿Sera el mismo o no?***» pues la respuesta es ‘SI’ ;). Analizar el porqué y si tenéis dudas dejar un comentario en la entrada y os resolveremos la duda.

## Serie: Curso de bases de datos con MySQL

1. [Curso de Bases de Datos con MySql -Parte I- (Video)](https://jarroba.com/curso-de-bases-de-datos-con-mysql-parte-i-video-instalacion-del-mysql-server-y-workbench.md)
2. [Curso de Bases de Datos con MySql -Parte II- (Video) -Entidad/Relación-](https://jarroba.com/curso-de-bases-de-datos-con-mysql-parte-ii-video.md)
3. [Curso de Bases de Datos con MySql -Parte III- (Video) Definition/Manipulation](https://jarroba.com/curso-de-bases-de-datos-con-mysql-parte-iii-video-definitionmanipulation.md)
4. [Curso de Bases de Datos con MySql -Parte IV- (Video) «INNER JOIN»](https://jarroba.com/curso-de-bases-de-datos-con-mysql-parte-iv-video-inner-join.md)
5. [Curso de Bases de Datos con MySql -Parte V- (Video) «Group By»](https://jarroba.com/curso-bases-datos-mysql-parte-v-video-group-by.md)

