1

Actualmente me encuentro cursando la carrera de análisis de sistemas y al toparme que bases de datos estoy un poco perdido.

¿Me podrían explicar el ejemplo que el profesor nos dio?

SELECT e.id AS 'Numero Encargo', cantidad, cl.nombre, co.modelo, e.fecha 
FROM encargos e
    INNER JOIN clientes cl ON cl.id = e.cliente_id
    INNER JOIN coches co ON co.id = e.coche_id
WHERE cliente_id IN (SELECT id FROM clientes WHERE nombre = 'Remis espania');
BetaM
  • 30,571
  • 7
  • 32
  • 50
Jellestad
  • 417
  • 4
  • 13
  • Creo que lo correcto sería que tus nos digas que es lo que entiendes que hace (_de lo contrario estaríamos haciendo tu tarea_), así nosotros te corregimos (o no) en base a tu respuesta. – Marcos Aug 28 '19 at 21:00
  • Marcos No estaria entendiendo que funcion comple Inner Join – Jellestad Aug 28 '19 at 21:01
  • 1
    ¿Lo has Google-ado? [Acá te dejo](https://www.vichaunter.org/desarrollo-web/joins-mysql-bien-explicado-lo-necesitas-saber) algo que te puede servir. – Marcos Aug 28 '19 at 21:03
  • Hola, puedes revisar esta pregunta para entender mejor como funciona [¿Cuál es la diferencia entre un inner y un outer join?](https://es.stackoverflow.com/questions/36/cu%c3%a1l-es-la-diferencia-entre-un-inner-y-un-outer-join) – the-breaker Aug 28 '19 at 23:26

1 Answers1

0

Del ejemplo que muestras, tenemos las siguientes entidades

  • Encargos
  • Clientes
  • Coches

La relación indicada parece de Muchos a Muchos por que la tabla encargos tiene o esta relacionada con coches y y clientes por medio de las llaves foráneas coche_id y coche_id

Tieniendo un diagrama similar al siguiente

introducir la descripción de la imagen aquí

¿Por qué el uso de INNER JOIN?

La idea es obtener un conjunto de resultados de la tabla encargos cuyas llaves foráneas existan o pertenezcan a algún registro existente de las tablas coches y clientes descartando por tanto registros de alguna de las 2 que no esten concentrados en la tabla encargos.

Dado lo anterior en una relación de muchos a muchos tu puedes almacenar en 1 tercera tabla múltiples veces la o las llaves foráneas que provenga de otra tabla o varias tablas.

Establecido lo anterior, cuando tu profesor hace esto:

INNER JOIN clientes cl ON cl.id = e.cliente_id
INNER JOIN coches co ON co.id = e.coche_id

Esta buscando obtener los registros de coches y clientes (múltiples de ellos) que estan contenidos en la tabla encargos y que existan o coincidan con registros de las otras 2 tablas en cuestión.

Lo anterior se logra igualando cliente.id ONo con encargos.cliente_id

Y lo mismo para el coche_id

Pero como lucen los datos

Una manera de verlos es:

tb_encargos

id   cliente_id  coche_id

1       1           2
2       2           3
3       1           4
4       3           2

Como puedes observar en este ejemplo, el id del cliente 1 tiene mas de un coche asignado, entonces de esta manera podemos almacenar en mas de una vez dicha llave indicando que muchos clientes puede tener muchos coches y muchos coches pueden estar asignados a muchos clientes

La última parte donde hace:

WHERE cliente_id IN (SELECT id FROM clientes WHERE nombre = 'Remis espania');

Es para el filtrado de datos indicando que le muestre toda la información solo donde la llave foránea cliente_id en la tabla encargos sea igual al id del cliente en la tabla clientes cuyo nombre sea Remis aquí lo que hizo fue una subconsulta

REFERENCIAS

BetaM
  • 30,571
  • 7
  • 32
  • 50