Como sabes, en SQL para relacionar a dos tablas entre sí se puede usar la palabra JOIN. El modificador LEFT JOIN (unir por la izquierda) significa lo siguiente: “devuélveme todas las filas de la tabla de la izquierda y solamente las filas de la tabla de la derecha cuyo valor también exista en la tabla de la izquierda”.

LEFTJOIN1

(haciendo click en la imagen la verás más grande)

La tabla A es la tabla de la izquierda, la tabla B es la tabla de la derecha. Como puedes ver, todas las filas de la tabla A serán mostradas. Recuerda que la tabla de la izquierda es la que se encuentra a continuación de la cláusula FROM y la tabla de la derecha es la que se encuentra a continuación de la palabra JOIN.

SELECT
   P.PRD_CODIGO,
   P.PRD_NOMBRE,
   P.PRD_PROCED,
   Q.PRO_NOMBRE AS PRD_NOMPRO
FROM
   PRODUCTOS P
LEFT JOIN
   PROCEDENCIAS Q
      ON P.PRD_PROCED = Q.PRO_IDENTI

Este SELECT mostrará a todas las filas de la tabla PRODUCTOS y solamente los nombres de los países de procedencia que hayan sido registrados en la tabla de PRODUCTOS. Si de un producto no se conoce cual es su país de procedencia, o si el identificador de ese país no se encuentra en la tabla de PROCEDENCIAS, entonces la columna PRO_IDENTI será NULL y por lo tanto el nombre de dicho país no será mostrado sino que se mostrará NULL. Las tablas PRODUCTOS y PROCEDENCIAS están relacionadas mediante las columnas PRD_PROCED y PRO_IDENTI, porque en ambas columnas se guarda el identificador del país de procedencia.

Este SELECT podría mejorarse un poco así:

SELECT
   P.PRD_CODIGO,
   P.PRD_NOMBRE,
   P.PRD_PROCED,
   COALESCE(Q.PRO_NOMBRE, "procedencia desconocida") AS PRD_NOMPRO
FROM
   PRODUCTOS P
LEFT JOIN
   PROCEDENCIAS Q
      ON P.PRD_PROCED = Q.PRO_IDENTI

Entonces, si PRD_PROCED es NULL no encontrará ese valor en la columna PRO_IDENTI de la tabla PROCEDENCIAS, por lo tanto PRO_NOMBRE también será NULL y la función COALESCE() devolverá el string “procedencia desconocida”, haciendo más fácil la lectura del SELECT.

Recuerda que para que el JOIN funcione ambas tablas deben tener una columna (o más de una columna) con valores comunes. Por ejemplo, en la tabla de PROCEDENCIAS tenemos:

 LEFTJOIN2

entonces en la tabla de PRODUCTOS, en la columna PRD_PROCED deberíamos tener uno de estos números: 0, 1, 2, 3, 4. Si allí hay otro número o si allí hay NULL entonces no podrá saberse cual es el país de procedencia del producto.

Para estos casos, o sea cuando queremos ver todas las filas de una tabla y de la otra tabla solamente las filas relacionadas, es que se usa LEFT JOIN.

 

Anuncios