67 - Varias tablas (natural join) |
"natural join" se usa cuando los campos por los cuales se enlazan las tablas tienen el mismo nombre.
Tenemos las tablas "libros" y "editoriales" de una librería.
Las tablas tienen las siguientes estructuras:
- libros: codigo (clave primaria), titulo, autor, codigoeditorial, precio. - editoriales: codigoeditorial(clave primaria), nombre.
Como en ambas tablas, el código de la editorial se denomina "codigoeditorial", podemos omitir la parte "on" que indica los nombres de los campos por el cual se enlazan las tablas, empleando "natural join", se unirán por el campo que tienen en común:
select titulo,nombre from libros as l natural join editoriales as e;
La siguiente sentencia tiene la misma salida anterior:
select titulo,nombre from libros as l join editoriales as e on l.codigoeditorial=e.codigoeditorial;
También se puede usar "natural" con "left join" y "right join":
select nombre,titulo from editoriales as e natural left join libros as l;
que tiene la misma salida que:
select nombre,titulo from editoriales as e left join libros as l on e.codigoeditorial=l.codigoeditorial;
Es decir, con "natural join" no se coloca la parte "on" que especifica los campos por los cuales se enlazan las tablas, porque MySQL busca los campos con igual nombre y enlaza las tablas por ese campo.
Hay que tener cuidado con este tipo de "join" porque si ambas tablas tiene más de un campo con igual nombre, MySQL no sabrá por cual debe realizar la unión. Por ejemplo, si el campo "titulo" de la tabla "libros" se llamara "nombre", las tablas tendrían 2 campos con igual nombre ("codigoeditorial" y "nombre").
Otro problema que puede surgir es el siguiente. Tenemos la tabla "libros" con los siguientes campos: codigo (del libro), titulo, autor y codigoeditorial, y la tabla "editoriales" con estos campos: codigo (de la editorial) y nombre. Si usamos "natural join", unirá las tablas por el campo "codigo", que es el campo que tienen igual nombre, pero el campo "codigo" de "libros" no hace referencia al código de la editorial sino al del libro, así que la salida será errónea.