Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.
SELECT * FROM empleado
id | nombre | edad | id_departamento |
---|---|---|---|
1 | Juan | 30 | 1 |
2 | Paco | 20 | 1 |
SELECT * FROM departamento
id | nombre |
---|---|
1 | Programación |
2 | Marketing |
Consultas multitablas
Producto cartesiano o composición cruzada
Cada fila de la tabla empleado se combinará con cada fila de la tabla departamento. Esto puede dar lugar a resultados con muchas filas si ambas tablas tienen muchos registros. Podemos hacer un producto cartesiano de dos formas:
SELECT * FROM empleado, departamento
SELECT * FROM empleado CROSS JOIN departamento
id | nombre | edad | id_departamento | id | nombre |
---|---|---|---|---|---|
1 | Juan | 30 | 1 | 1 | Programación |
2 | Paco | 20 | 1 | 1 | Programación |
1 | Juan | 30 | 1 | 2 | Marketing |
2 | Paco | 20 | 1 | 2 | Marketing |
Composición interna
Esta consulta nos devolvería la intersección entre las dos tablas. Sólo obtendremos los resultados que esten en ambos conjuntos.
Por lo tanto, si existen filas en la tabla empleado
que no tienen un departamento asociado, no se verán en los resultados, al igual que pueden existir filas en la tabla departamento
que no aparecen en el resultado porque no tienen ningún empleado asociado.
En nuestro ejemplo, el departamento de marketing no tiene ningún empleado.
La segunda consulta tiene una sintaxis más moderna que la primera.
SELECT * FROM empleado, departamento WHERE empleado.id_departamento = departamento.id
SELECT * FROM empleado INNER JOIN departamento ON empleado.id_departamento = departamento.id
id | nombre | edad | id_departamento | id | nombre |
---|---|---|---|---|---|
1 | Juan | 30 | 1 | 1 | Programación |
2 | Paco | 20 | 1 | 1 | Programación |
Composiciones externas
En la siguiente consulta, en los valores de la tabla de la derecha en la que no haya correspondencia, se mostrará NULL.
SELECT * FROM empleado LEFT JOIN departamento ON empleado.id_departamento = departamento.id
id | nombre | edad | id_departamento | id | nombre |
---|---|---|---|---|---|
1 | Juan | 30 | 1 | 1 | Programación |
2 | Paco | 20 | 1 | 1 | Programación |
En la siguiente consulta, en los valores de la tabla de la derecha en la que no haya correspondencia, se mostrará NULL.
SELECT * FROM empleado RIGHT JOIN departamento ON empleado.id_departamento = departamento.id
id | nombre | edad | id_departamento | id | nombre |
---|---|---|---|---|---|
1 | Juan | 30 | 1 | 1 | Programación |
2 | Paco | 20 | 1 | 1 | Programación |
NULL | NULL | NULL | NULL | NULL | NULL |
Ejercicios
Realiza las siguientes consultas en la base de datos que tiene las siguientes tablas:
- books
- id
- title
- price
- author_id
- authors
- id
- name
- born_date
De la base de datos de bicicletas:
- Muestra el nombre del usuario con DNI 52111111A
- Muestra las ids de las bicicletas que están en el parking 1
- Muestra los dni de los usuarios cuyo nombre comienza por M
- Muestra la id y la dirección de los aparcamientos de bicicletas ordenados por capacidad máxima de bicicletas. Mostrar los resultados en orden ascendente y descendente.
- Muestra las direcciones de los aparcamientos de bicicletas que tienen capacidad entre 10 y 20 bicicletas