Enlazar tablas
Vamos a seguir con el ejemplo de ayer para ver como podemos enlazar tablas usando el comando joins de select.
Teníamos la base de datos biblioteca. Para los que justo os incorporáis al curso, la podéis crear y seleccionar con:
1 | create database biblioteca; |
Volvemos a crear la tabla libros, pero esta vez incluimos el campo editorial:
2 | libro_id int unsigned auto_increment, |
3 | titulo varchar (50) not null , |
4 | autor varchar (30) not null default 'Desconocido' , |
5 | codigo_editorial int unsigned not null , |
6 | cantidad smallint unsigned default 0, |
Y ahora también creamos una tabla editoriales:
1 | create table editoriales ( |
2 | editorial_id int unsigned auto_increment, |
3 | nombre_editorial varchar (25) not null , |
4 | primary key (editorial_id) |
Ahora necesitamos crear una serie de registros para ambas tablas para ver el funcionamiento en la práctica:
1 | insert into libros (titulo, autor, codigo_editorial, cantidad) |
2 | values ( "Técnicas avanzadas de posicionamiento en buscadores" , "Fernando Maciá Domene" , 1, 2); |
3 | insert into libros (titulo, autor, codigo_editorial, cantidad) |
4 | values ( "Diseño Web con CSS" , "Ralph G. Schulz " , 2, 1); |
5 | insert into libros (titulo, autor, codigo_editorial, cantidad) |
6 | values ( "Usabilidad. Prioridad en el diseño Web" , "Jakob Nielsen" , 1, 1); |
1 | insert into editoriales (nombre_editorial) values ( "Anaya" ); |
2 | insert into editoriales (nombre_editorial) values ( "Marcombo" ); |
En la tabla editoriales, Anaya es el registro 1 y Marcombo el registro 2. Ahora queremos mostrar los libros de la editorial Anaya, probad esto:
1 | select * from libros where codigo_editorial=1; |
Veremos que efectivamente sólo se muestran los libros de la editorial Anaya, pero en el campo editorial aparece el número 1. Lo que nosotros queremos es que en este campo aparezca el nombre de la editorial y no su código. Aquí entra el comando left join para vincular tablas.
Left join
1 | select * from libros join editoriales |
2 | on editoriales.editorial_id = libros.codigo_editorial; |
En este caso, vemos los libros de todas las editoriales, pero también aparece los campos codigo_editorial y editorial_id que no queremos visualizar en los resultados:
Para evitarlo, cambiamos el comodín asterisco por los campos que queremos visualizar:
1 | select libros.titulo, libros.autor,libros.cantidad, editoriales.nombre_editorial |
2 | from libros join editoriales on editoriales.editorial_id = libros.codigo_editorial; |
El resultado es:
Si solo queremos visualizar los libros de la editorial Anaya, entonces hemos de modificar el código:
1 | select libros.titulo, libros.autor,libros.cantidad, editoriales.nombre_editorial |
2 | from libros join editoriales on editoriales.editorial_id = libros.codigo_editorial |
3 | where libros.codigo_editorial=1; |
Finalmente, el resultado es:
Unión de tablas
Con MySQL también podemos unir las consultas a varias tablas en un único conjunto de resultados. Para ello utilizamos el comando union. Es importante tener en cuenta que ambas tablas han de tener el mismo número de campos o nos dará error. Un ejemplo será:
No hay comentarios.:
Publicar un comentario