En determinada ocasion se tendrá que unir más tablas para poder combinar los valores y poder mostrarlos juntos en una consulta, aquí se tendrá que usar la combinación de tablas por medio de la clausula JOIN. Hay que diferenciar que existen dos tipos de combinaciones, las internas y externas.
Las internas devuelven todas las filas que cumplen la combinación de la primera entrada con la segunda. En el caso de no encontrarse coincidencia de valores no emite mensaje de error, simplemente no muestra ningún registro.
Las externas son combinaciones donde las filas resultantes no son directamente de la tabla origen podría ser de la derecha, izquierda o completa.
Les dejo una imagen que ilustra mejor el uso de los JOINS
Pero como siempre, pasemos a los ejemplos
INNER JOIN
Ejemplo 1:
Script que
permita mostrar la combinación de la tabla PASAJERO
y PAGO, es decir, los pagos
realizados por los pasajeros
Primero
veamos cómo están compuestas las tablas
SELECT *
FROM
PASAJERO PAS
INNER JOIN PAGO PAG
ON PAS.IDPASAJERO = PAG.IDPASAJERO
GO
El resultado de la consulta es la multiplicación entre las filas de la tabla PASAJERO por las filas de la tabla PAGO, dando como resultado 130 filas repartidas entre los 10 pasajeros registrados y 13 filas de la tabla PAGO, pero como notará en la imagen resultante solo aparecen 13 filas por la definición de la columna de unión IDPASAJERO. El resultad de esa consulta es el siguiente:
Como ven, en la consulta se muetran todos los campos, tanto de la tabla pasajero como de la tabla PAGO, pero con el alias de las tablas y con la unión, podremos especificar que columnas de que tabla queremos mostrar, para ello mostraremos el siguiente caso:
SELECT PAS.IDPASAJERO, PAS.NOMBRES, PAI.PAIS, PAS.TELEFONO
FROM PASAJERO PAS
INNER JOIN PAIS PAI
ON PAS.IDPAIS = PAI.IDPAIS
GO
En la siguiente imagen se muestra el resultado de la consulta
Como verán queridos lectores ya no es necesario especificar el IDPAIS desde la tabla PASAJERO ya que por medio del INNER JOIN tenemos acceso a la columna PAIS de la tabla del mismo nombre.
Ejemplo 3:
Script que permita
mostrar los pasajeros con las siguientes columnas IDPASAJERO, NOMBRES, PAIS, FECHA DE PAGO, MONTO CANCELADO
SELECT PAS.IDPASAJERO, PAS.NOMBRES, PAI.PAIS, PAG.FECHA, PAG.MONTO
FROM
PASAJERO PAS
INNER JOIN PAGO PAG ON PAG.IDPASAJERO = PAS.IDPASAJERO
INNER JOIN PAIS PAI ON PAI.IDPAIS = PAS.IDPAIS
GO
El script anterior maneja tres tablas ya que el ejemplo hace referencia a columnas de éstas, hay que tener cuidado al asignar el nombre del alias a cada tabla. Como notarán la columna de unión entre PASAJERO y PAGO es IDPASAJERO, mientras que entre PASAJERO y PAIS la columna de unión es IDPAIS.
La imagen siguiente muestra el resultado de la consulta:
Ejemplo 4
Script que permita mostrar a los pasajeros de un determinado
PAIS ingresado por es usuario utilizando a clausula JOIN
DECLARE
@PAIS VARCHAR(50) = 'MEXICO'
SELECT *
FROM PASAJERO PAS
INNER JOIN PAIS PAI ON PAS.IDPAIS = PAI.IDPAIS
WHERE PAI.PAIS=@PAIS
GO
Se declara la variable @PAIS para colocar el criterio de búsqueda, en este caso buscaremos a todos los pasajeros del país MÉXICO. Se le adiciona la clausula WHERE a la consulta para poder condicionar el país de los pasajeros que se necesitan mostrar, como notará dentro del WHERE se puede referencias a cualquiera de las columnas de ambas tablas, pero en este caso solo es necesario indicar el nombre del país por medio de PAI.PAIS que es el alias de la tabla PAIS y que representa al nombre del país
LEFT JOIN
Ejemplo 5
Mostrar todos los registros de la tabla pasajero y el país
utilizando LEFT JOIN
SELECT *
FROM PAIS PAI
LEFT JOIN PASAJERO
PAS ON PAI.IDPAIS
= PAS.IDPAIS
GO
En el script la tabla PASAJERO es referenciado a la unión externa izquierda eso quiere decir que la consulta deberá mostrar sus columnas en el lado izquierdo y forzar a la otra tabla a mostrar todas sus filas, esto significa que la tabla puede tener registros que no necesariamente se encuentren en la tabla izquierda. Cuando ocurre este caso, la tabla izquierda mostrará NULL en los valores cruzados. Como se muestra en la imagen siguiente que es el resultado de la consulta anterior:
Al observar la imagen la interpretación que se puede dar aquí es que se muestran todos los paises inclusive, los que no participan en la tabla PASAJERO. Chile, Venezuela, Bolivia, Honduras, EEUU, y Puerto Rico son países que aún no tienen pasajeros registrados.
Modificaremos el script para poder mostrar solo a los países que aun no tienen pasajeros registrados, ya sabemos que los países de respuesta serían Chile, Venezuela, Bolivia, Honduras, EEUU y Puerto Rico, pero veamos la solución para mostrar únicamente esos países
SELECT *
FROM PAIS PAI
LEFT JOIN PASAJERO
PAS ON PAI.IDPAIS
= PAS.IDPAIS
WHERE PAS.IDPAIS IS NULL
GO
Right Join
El caso de RIGHT JOIN es similar al de LEFT JOIN, solo que esta vez será la tabla de la derecha, utilizaremos el mismo ejemplo anterior, solo que ahora le daremos solución con RIGHT JOIN
SELECT PAI.*
FROM PASAJERO PAS
RIGHT JOIN PAIS PAI ON PAI.IDPAIS = PAS.IDPAIS
WHERE PAS.IDPAIS IS NULL
GO
Ejemplo 6
Script que permita mostrar los pasajeros que aún no han
realizado ningún pago utilizando LEFT
JOIN y RIGHT JOIN
SELECT PAI.*
FROM PASAJERO PAS
RIGHT JOIN PAIS PAI ON PAI.IDPAIS = PAS.IDPAIS
WHERE PAS.IDPAIS IS NULL
GO
SELECT PAS.*
FROM PAGO
PAG
RIGHT JOIN PASAJERO PAS ON
PAS.IDPASAJERO =
PAG.IDPASAJERO
WHERE PAG.IDPASAJERO IS NULL
GO
Finalmente, podríamos haber usado la clausula FULL JOIN que permite combinar LEFT con RIGHT JOIN dentro de una consulta. El script es como sigue
SELECT PAS.*
FROM PAGO
PAG
FULL JOIN PASAJERO PAS ON
PAS.IDPASAJERO =
PAG.IDPASAJERO
WHERE PAG.IDPASAJERO IS NULL
GO
En todos los casos el resultado es el siguiente:
CROSS JOIN
Ejemplo 7
Script que permita mostrar
los resultados de la tabla PASAJERO y PAGO de forma que apliquen un producto
cartesiano entre sus filas. Use CROSS JOIN
SELECT *
FROM PASAJERO
CROSS JOIN PAGO
GO
En el script se muestran dos tablas involucradas, esta vez usando CROSS JOIN que permita una combinación completa entre las tablas, si visualiza la cantidad de filas en la consulta, notará que el resultado es de 130 rows, ya que por cada fila de PASAJEROS es multiplicado por cada fila de la tabla PAGO realizando una combinación completa entre sus filas. La imagen a continuación muestra la combinación CROSS JOIN
Hasta aquí el post queridos lectores, aun falta la parte mas interesante, que la programación de disparadores, procedimientos, funciones, etc. Pero eso será en post venideros, espero haya sido de utilidad este post, les haya agradado, espero también comenten, den un +1 o algún clic en una publicidad, me despido de momento, pero nos estamos leyendo por aqui muy pronto
Saludos
No hay comentarios.:
Publicar un comentario