Yo el programador

INNER JOIN o EQUI-JOIN :: Consultas MySQL a multiples tablas relacionadas

Desde MySQL es posible realizar una consulta que devuelva los valores de una tabla que está relacionada con otras de una sola vez.
Por ejemplo, tenemos una tabla principal bien normalizada, con muchos campos que estan relacionados mediante un id con otras tablas que contienen los valores reales.
Lo que necesitamos hacer es convertir esa tabla ppal en otra en que los IDs se conviertan en dichos valores reales, y para ello utilizaremos JOINs:
Hay varios tipos de JOIN:

- Cross-Join
- Equi-Join o Inner Join
- Left Join

En este ejemplo se verá la utilización de lo que se llama un Equi-Join o Inner Join.
Para ver el funcionamiento creamos una base de datos de ejemplo:

 

En este ejemplo se verá la utilización de lo que se llama un Equi-Join o Inner Join.
Para ver el funcionamiento creamos una base de datos de ejemplo:

PLAIN TEXT
MySQL:
  1. CREATE DATABASE contactos;
  2. USE contactos;
  3. CREATE TABLE clientes   (
  4.             id INT(3),
  5.             nombre VARCHAR(100),
  6.             tipo_cliente INT(2),
  7.             localidad INT(3)
  8.             );
  9. CREATE TABLE tipos_cliente
  10.             (
  11.             id INT(2),
  12.             tipo VARCHAR(255)
  13.             );
  14. CREATE TABLE localidades
  15.             (
  16.             id INT(3),
  17.             nombre_localidad VARCHAR(255)
  18.             );
  19. # rellenamos la tabla «clientes»
  20. INSERT INTO clientes VALUES ( 1, ‘Marcos Gonzalez’, 1, 1 );
  21. INSERT INTO clientes VALUES ( 2, ‘Ingeniería y Mezclas’, 3, 2 );
  22. INSERT INTO clientes VALUES ( 3, ‘Daniel Aguilar’, 1, 3 );
  23. INSERT INTO clientes VALUES ( 4, ‘Abel Molina’, 2, 3 );
  24. #rellenamos la tabla tipos_cliente
  25. INSERT INTO tipos_cliente VALUES ( 1, ‘Desarrollador’ );
  26. INSERT INTO tipos_cliente VALUES ( 2, ‘Diseñador’ );
  27. INSERT INTO tipos_cliente VALUES ( 3, ‘Otros’ );
  28. # rellenamos la tabla localidades
  29. INSERT INTO localidades VALUES ( 1, ‘Oviedo’ );
  30. INSERT INTO localidades VALUES ( 2, ‘Girona’ );
  31. INSERT INTO localidades VALUES ( 3, ‘Barcelona’ );

 

Y ahora la consulta:
Lo que queremos hacer es recoger todos los valores de la tabla clientes pero recogiendo el valor real de los Id’s, que está situado en otras tablas relacionadas.

PLAIN TEXT
MySQL:
  1. SELECT
  2.     clientes.nombre AS nombre_cliente,
  3.     localidades.nombre_localidad AS localidad_cliente,
  4.     tipos_cliente.tipo AS tipo_cliente
  5. FROM clientes,
  6.     localidades,
  7.     tipos_cliente
  8. WHERE clientes.localidad=localidades.id
  9.     AND clientes.tipo_cliente=tipos_cliente.id;

Lo que hemos hecho aquí es, en la clausula SELECT seleccionar los campos de los que queremos sacar información y darles un nombre de alias con AS. El alias nos sirve para utilizar nombres que nos aclaren más la función de la tabla en cuestión, pero es totalmente opcional en este caso.
Seguidamente, en la clausula FROM decimos de qué tablas sacamos la información del SELECT, y para acabar debemos aclarar las condiciones que se tienen que cumplir para que los valores sean los correctos en cada columna.
En este caso los id’s de la tabla ppal (clientes) deben coincidir con los id’s de las tablas relacionadas.
Si ejecutamos esta consulta debemos obtener el siguiente valor:

nombre_cliente localidad_cliente tipo_cliente
Marcos Gonzalez Oviedo Desarrollador
Daniel Aguilar Barcelona Desarrollador
Abel Molina Barcelona Diseñador
Ingeniería y Mezclas Girona Otros
Enlaces relacionados:
* JOIN Syntax
Salir de la versión móvil