Saltar al contenido

Left JOIN en SQL con ejemplos

En este tutorial, se proporcionará una introducción a la cláusula LEFT JOIN de SQL y se ofrecerán ejemplos para ilustrar cómo funciona. También se brindará una guía paso a paso para implementar una cláusula LEFT JOIN en una base de datos SQL Server o MySQL.

Por lo que te recomiendo ver este articulo completo para aprender las bondades de usar left join en vez de where not in!!!

Índice

    Diferencia entre el left outer join y left join

    «Left join» y «left outer join» son términos que se usan indistintamente y suelen referirse al mismo tipo de operación en la base de datos. En ambos casos, la consulta devuelve todos los registros de la tabla izquierda (la tabla que aparece antes de la palabra clave «left join» o «left outer join» en la consulta), y los registros coincidentes de la tabla derecha (la tabla que aparece después de la palabra clave).

    La diferencia entre ambos términos radica en que el «left outer join» es más explícito en términos de la lógica de la consulta, ya que indica que se desea incluir todos los registros de la tabla izquierda incluso si no hay registros coincidentes en la tabla derecha. Es decir, si hay registros en la tabla izquierda que no tienen coincidencias en la tabla derecha, estos registros también se incluirán en el resultado de la consulta.

    asi mismo esto aplica para el right outer join y el Right join en escencia son una forma abreviada de la clausula.

    Sintaxis del left join

    La sintaxis de LEFT OUTER JOIN en PostgreSQL a diferencia de sql sever y MySQL es similar, aunque hay algunas pequeñas diferencias.

    En PostgreSQL, la sintaxis es la siguiente:

    • SELECT
    • compos
    • FROM t1
    • LEFT outer JOIN t2 ON join_condition1

    Mientras que para motores de base de datos como son Sql Server y Mysql server seria la siguiente:

    • SELECT
    • compos
    • FROM t1
    • LEFT JOIN t2 ON join_condition1

    Como utilizar el comando INNER JOIN en SQL

    1. Primero, especifique la tabla principal que aparece en la cláusula FROM (t1).
    2. En segundo lugar, especifique las tablas que con la cual se desea validar la relacion la tabla principal, que aparece en la cláusula LEFT JOIN (t2).
    3. Debe indicar los criterios de la relación después de la palabra clave ON de la cláusula LEFT JOIN. La condición especifica la regla para hacer coincidir los registros entre las tablas entre la tablas.

    Diferencias entres motores de base de datos

    En general, la sintaxis y el comportamiento de la cláusula «left join» o «Right join» en MySQL, SQL Server y PostgreSQL son bastante similares. Sin embargo, existen algunas diferencias sutiles en la forma en que cada motor de base de datos implementa esta operación:

    • En MySQL, la cláusula «left join» o «Right join» se utiliza para combinar dos tablas y recuperar todas las filas de la tabla de la izquierda y las filas coincidentes de la tabla de la derecha. También se puede usar «left outer join» para lograr el mismo resultado. Es importante tener en cuenta que, en versiones antiguas de MySQL, la palabra clave «outer» no era necesaria y se podía omitir.
    • En SQL Server, la sintaxis de la cláusula «left join» o «Right join» es similar a la de MySQL, y también se puede usar «left outer join» para obtener el mismo resultado. Además, SQL Server admite el uso de la cláusula «full outer join», que combina todas las filas de ambas tablas, incluyendo las que no tienen coincidencias en la otra tabla.
    • En PostgreSQL, la sintaxis de la cláusula «left join» o «Right join» es similar a la de MySQL y SQL Server, y también se puede usar «left outer join» para obtener el mismo resultado. Sin embargo, PostgreSQL ofrece una funcionalidad adicional en la cláusula «join» que permite especificar condiciones adicionales en la cláusula «on», lo que puede ser útil para filtrar los resultados de la unión.

    MySQL, SQL Server y PostgreSQL tienen la opción de utilizar RIGHT OUTER JOIN para obtener todas las filas de la tabla de la derecha (tabla2 en el ejemplo) y solo las filas de la tabla de la izquierda (tabla1 en el ejemplo) que coinciden con ellas. La sintaxis es similar a la del LEFT OUTER JOIN, pero se utiliza la palabra clave RIGHT OUTER JOIN o RIGHT JOIN en lugar de LEFT OUTER JOIN o LEFT JOIN.

    LEFT JOIN en SQL Server y Mysql

    La cláusula LEFT JOIN de SQL se utiliza para validar que exista una relación entre las tablas involucradas. LEFT JOIN mantiene todas las filas de la tabla izquierda (tabla1). Las filas de la tabla derecha se mostrarán si hay una coincidencia con las de la izquierda. Si existen valores en la tabla izquierda pero no en la tabla derecha, ésta mostrará Null.

    Para los fines te mostraremos como relacionar dos tablas producto y categoría del producto.

    SELECT PRODUCTO.*,CATEGORIA.Name AS CATEGORIA
    FROM [AventureWorks].[SalesLT].[Product] AS PRODUCTO
    LEFT JOIN [AventureWorks].[SalesLT].ProductCategory AS CATEGORIA
    ON
    PRODUCTO.ProductCategoryID =CATEGORIA.ProductCategoryID

    En este caso las solicitud mostrara todos los valores que estén o no dentro de la condición de definida en el LEFT JOIN los valores no que no se encuentren solo marcaran un NULL en el campo categoría.

    LEFT JOIN en SQL con la clausula WHERE

    Para este ejemplo solo aplicaremos lo ya aprendido en el tutorial de inner join en este caso al usar la clausula WHERE indicamos el valor de la columna dentro de la relacion join que se encontrara en nulo indicando que esta fuera de la condicion JOIN.

    SELECT PRODUCTO.*,CATEGORIA.Name AS CATEGORIA
    FROM [AventureWorks].[SalesLT].[Product] AS PRODUCTO
    LEFT JOIN [AventureWorks].[SalesLT].ProductCategory AS CATEGORIA
    ON
    PRODUCTO.ProductCategoryID =CATEGORIA.ProductCategoryID
    WHERE CATEGORIA.ProductCategoryID IS NULL

    LEFT JOIN mantiene todas las filas de la tabla izquierda (la tabla1). por lo cual solo mostrara las filas de la izquierda que no están relacionadas con la derecha.

    LEFT JOIN vs RIGHT JOIN en SQL

    Mientras que el LEFT JOIN mantiene todas las filas de la tabla izquierda el RIGHT JOIN mantiene todas las filas de la tabla DERECHA indicando que debemos evaluar cuales registros de la izquierda no estan relacionados con los de la derecha.

    la sintaxis es la misma que la del LEFT outer JOIN , solo sustituyes LEFT por RIGHT

    • SELECT
    • campos
    • FROM t1
    • RIGHT JOIN t2 ON join_condition1

    Como usar el Left join en postgresql

    en PostgreSQL existen algunas opciones adicionales que pueden ser útiles al utilizar LEFT OUTER JOIN. Algunas de las opciones son:

    • USING: Esta opción se utiliza para especificar la columna en la que se unen las tablas. En lugar de utilizar la cláusula ON, se puede utilizar la cláusula USING para especificar la columna en común entre las dos tablas. Por ejemplo:
            SELECT columnas
            FROM tabla1
            LEFT OUTER JOIN tabla2 USING (columna);
    
    • ON CONFLICT: Esta opción se utiliza para especificar cómo manejar los conflictos que pueden ocurrir al insertar datos en una tabla. Por ejemplo, si se está uniendo una tabla de pedidos con una tabla de clientes, puede ocurrir que un cliente tenga múltiples pedidos, lo que puede provocar un conflicto al insertar datos en la tabla de resultados. En este caso, se puede utilizar la cláusula ON CONFLICT para especificar cómo manejar el conflicto. Por ejemplo:
            SELECT columnas
            FROM tabla1
            LEFT OUTER JOIN 
            tabla2 ON tabla1.columna = tabla2.columna
            ON CONFLICT (columna) DO NOTHING;
    

    Estas opciones adicionales no están disponibles en MySQL, por lo que si necesita utilizarlas, es posible que deba ajustar su consulta de acuerdo con las capacidades de MySQL.

    En conclusion

    En resumen, La cláusula LEFT JOIN de SQL se utiliza para validar que exista una relación entre las tablas involucradas se puede combinar con Group by, where , having y order by. ademas, es posible combinar con un subquery. Esta es una poderosa herramienta para comparar información entre tablas en base de datos.

    Hasta la próxima !!

    Bye :D!!