7th Jul 2022 Lectura de 8 minutos Cómo conservar las filas no coincidentes al unir dos tablas en SQL Tihomir Babic SQL aprender SQL sql joins Índice ¿Qué JOIN le da las filas no coincidentes? Conozca los datos ¿Qué ocurre cuando se utiliza el INNER JOIN? Obtener todas las filas coincidentes y no coincidentes de una tabla Usando el LEFT JOIN Utilizando el RIGHT JOIN ¿El FULL JOIN obtendrá todas las filas coincidentes y no coincidentes? Cuándo usar qué JOIN Aprenda los diferentes tipos de JOIN para seleccionar el que necesita Aprenda a usar JOIN para mantener tanto las filas coincidentes como las no coincidentes cuando une dos tablas. Unir dos o más tablas es una habilidad que necesitas mucho si trabajas con bases de datos. Para repasar y practicar tus habilidades de unión en SQL, te recomiendo el curso interactivo Tipos de JOIN en SQL interactivo. Contiene más de 90 ejercicios y secciones sobre diferentes retos de unión. Si a menudo une tablas en SQL, probablemente habrá notado que no todos los datos de una tabla se corresponden con los datos de otra tabla todo el tiempo. A veces, sólo necesita los datos que coinciden en ambas tablas. Y a veces, también necesita conservar las filas que no coinciden. ¿Cómo se hace eso en un JOIN? ¿Qué JOIN le da las filas no coincidentes? Probablemente ya sabe esto, pero vale la pena repetirlo. El propósito de JOIN es obtener los datos de dos o más tablas. Las unes por la(s) columna(s) que tienen en común. Los cuatro tipos principales de JOINs son: (INNER) JOIN. LEFT (OUTER) JOIN. RIGHT (OUTER) JOIN. FULL (OUTER) JOIN. Si utiliza un (INNER) JOIN simple, sólo obtendrá las filas que tengan coincidencias en ambas tablas. La consulta no devolverá las filas que no coincidan de ninguna forma. Si esto no es lo que quiere, la solución es utilizar LEFT JOIN, RIGHT JOIN, o FULL JOIN, dependiendo de lo que quiera ver. Si es nuevo en el JOIN, aquí se explica a fondo cada tipo de JOIN. También puede tener cerca una hoja de trucos de SQL JOIN para ayudarle con la sintaxis y el uso de JOIN. Conozca los datos Los datos con los que trabajaremos consisten en dos tablas: employee. project. La tabla employee tiene cuatro columnas: id: El ID del empleado; es la clave primaria (PK) de la tabla. first_name: El nombre del empleado. last_name: El apellido del empleado. project_id: El ID del proyecto y la clave foránea (FK) de la tabla, que hace referencia a otra tabla llamada project. Esto es lo que los datos de la tabla employee se ven: idfirst_namelast_nameproject_id 1IngaDansken1 2RosinaSneezem5 3DarRisbie4 4LyneaBraveyNULL 5AlanahAbrashkov4 6EmmitJaime4 7KarrieLatek5 8GarrettCreginNULL 9CecilioZiemkeNULL 10MalanieChapellow1 11FraydaPinkett1 12MaddiMullissNULL 13BlaneTue5 14CarverVeighey5 15ChristosManleyNULL Hay dos columnas en la tabla project: id: El ID del proyecto; es la clave primaria (PK) de la tabla. project_name: El nombre del proyecto. Y estos son los datos de la tabla: idproject_name 1Reporting Process 2Database Enhancement 3Sales Boosting 4Employee Satisfaction 5IT Security 6Diversity Program 7Policies & Procedures 8Social Media Visibility 9Mobile Banking 10Education ¿Qué ocurre cuando se utiliza el INNER JOIN? Para obtener el nombre de los empleados y los proyectos en los que están trabajando utilizando el INNER JOIN, tendrá que escribir este código: SELECT first_name, last_name, project_name FROM employee e JOIN project p ON e.project_id = p.id; Nota: Por supuesto, puede usar tanto JOIN como INNER JOIN como palabra clave - son lo mismo. Esto es lo que obtienes como resultado: first_namelast_nameproject_name FraydaPinkettReporting Process MalanieChapellowReporting Process IngaDanskenReporting Process EmmitJaimeEmployee Satisfaction AlanahAbrashkovEmployee Satisfaction DarRisbieEmployee Satisfaction CarverVeigheyIT Security BlaneTueIT Security KarrieLatekIT Security RosinaSneezemIT Security El resultado muestra sólo las filas de la tabla employee que coinciden con las filas de la tabla project. En otras palabras, el código devuelve sólo los empleados que tienen un proyecto asignado. Sin embargo, esto significa que cada tabla puede tener filas que no corresponden a la otra tabla. Puede haber algunos empleados que no estén asignados a ningún proyecto, y puede haber algunos proyectos sin ningún empleado asignado a ellos. ¿Cómo se obtienen también las filas no coincidentes? Obtener todas las filas coincidentes y no coincidentes de una tabla Para obtener todas las filas de una sola tabla - tanto las filas coincidentes como las no coincidentes - necesita usar el LEFT JOIN o el RIGHT JOIN. Cuál debe usar depende de la tabla de la cual quiere mantener las filas no coincidentes. El LEFT JOIN lo hará desde la tabla de la izquierda, el RIGHT JOIN desde la de la derecha. Déjeme mostrarle lo que esto significa en la práctica. Usando el LEFT JOIN Para obtener las filas emparejadas y no emparejadas de una tabla utilizando el LEFT JOIN, tendrá que escribir este código: SELECT first_name, last_name, project_name FROM employee e LEFT JOIN project p ON e.project_id = p.id; Es casi el mismo código que en el ejemplo anterior. La única diferencia es que utiliza la palabra clave LEFT JOIN en lugar de JOIN. Esto le permitirá obtener todos los datos de la tabla de la izquierda (employeeen este caso), y todos los datos coincidentes de la tabla de la derecha (project). Cuando no hay datos coincidentes en la tabla projectse obtienen los valores de NULL., pero se siguen obteniendo todos los valores de la tabla employee. Compruébelo usted mismo: first_namelast_nameproject_name FraydaPinkettReporting Process MalanieChapellowReporting Process IngaDanskenReporting Process EmmitJaimeEmployee Satisfaction AlanahAbrashkovEmployee Satisfaction DarRisbieEmployee Satisfaction CarverVeigheyIT Security BlaneTueIT Security KarrieLatekIT Security RosinaSneezemIT Security ChristosManleyNULL MaddiMullissNULL CecilioZiemkeNULL GarrettCreginNULL LyneaBraveyNULL ¿Cómo interpretas estos datos? Tienes todos los empleados y los proyectos en los que están trabajando. Cuando hay un valor NULL en la columna project_name, significa que el empleado en cuestión no está trabajando en ningún proyecto. Utilizando el RIGHT JOIN Ahora, escribamos el mismo código con el RIGHT JOIN en lugar de utilizar el LEFT JOIN. SELECT first_name, last_name, project_name FROM employee e RIGHT JOIN project p ON e.project_id = p.id; Es una imagen especular del código anterior. Devolverá todos los datos de la tabla de la derecha, projecty sólo las filas coincidentes de la tabla de la izquierda, employee. De nuevo, cuando no hay datos coincidentes de la tabla employeelos valores serán NULL. Este es el resultado de la consulta: first_namelast_nameproject_name FraydaPinkettReporting Process MalanieChapellowReporting Process IngaDanskenReporting Process NULLNULLDatabase Enhancement NULLNULLSales Boosting EmmitJaimeEmployee Satisfaction AlanahAbrashkovEmployee Satisfaction DarRisbieEmployee Satisfaction CarverVeigheyIT Security BlaneTueIT Security KarrieLatekIT Security RosinaSneezemIT Security NULLNULLDiversity Program NULLNULLPolicies & Procedures NULLNULLSocial Media Visibility NULLNULLMobile Banking NULLNULLEducation Ahora, estos datos muestran todos los proyectos que existen en la tabla project. Cuando las columnas first_name y last_name son NULL, significa que no hay ningún empleado trabajando en ese proyecto. ¿El FULL JOIN obtendrá todas las filas coincidentes y no coincidentes? Creo que la consulta usando el FULL JOIN y su resultado hablarán por sí mismos. Veamos lo que hace. Primero, la consulta: SELECT first_name, last_name, project_name FROM employee e FULL JOIN project p ON e.project_id = p.id; Nuevamente, la única diferencia con respecto a las consultas anteriores es el tipo de unión utilizado. Todo lo demás es igual. Esta consulta FULL JOIN devolverá los siguientes datos: first_namelast_nameproject_name FraydaPinkettReporting Process MalanieChapellowReporting Process IngaDanskenReporting Process NULLNULLDatabase Enhancement NULLNULLSales Boosting EmmitJaimeEmployee Satisfaction AlanahAbrashkovEmployee Satisfaction DarRisbieEmployee Satisfaction CarverVeigheyIT Security BlaneTueIT Security KarrieLatekIT Security RosinaSneezemIT Security NULLNULLDiversity Program NULLNULLPolicies & Procedures NULLNULLSocial Media Visibility NULLNULLMobile Banking NULLNULLEducation ChristosManleyNULL MaddiMullissNULL CecilioZiemkeNULL GarrettCreginNULL LyneaBraveyNULL Inspeccionemos un poco los datos. Hay filas que se encuentran en ambas tablas. Sin embargo, hay filas de la tabla employee que no tienen filas correspondientes en la tabla project. Puede identificar estas filas por los valores de NULL en la columna project_name. También hay filas de la tabla project sin filas correspondientes en la tabla employee. De nuevo, aquí es donde están los valores de NULL. Esta vez, los NULLs estarán en las columnas first_name y last_name. Cuándo usar qué JOIN Ahora que ha visto lo que devuelve cada JOIN, vamos a aclarar lo que hace cada JOIN. JOIN o INNER JOIN no devuelve ninguna fila que no coincida. Sólo devuelve las filas que coinciden en las dos tablas que se unen. Si desea obtener filas no coincidentes, no debería utilizarlo. LEFT JOIN y RIGHT JOIN permiten obtener tanto filas coincidentes como no coincidentes. Sin embargo, debe saber de qué tabla obtiene las filas no coincidentes. En función de sus necesidades, utilizará LEFT JOIN o RIGHT JOIN. Ambos obtienen todas las filas de una tabla (coincidentes y no coincidentes) y todas las filas coincidentes de la otra tabla. Cuando no se encuentran filas coincidentes en la otra tabla, las columnas de la otra tabla muestran los valores de NULL. El FULL JOIN obtiene todos los datos de todas las tablas que se unen. Es como combinar las tres uniones anteriores. Obtendrá todas las filas coincidentes como cuando se utiliza el INNER JOIN. También obtendrá las filas no coincidentes de la tabla de la izquierda y de la tabla de la derecha, también. Es como si usaras el LEFT JOIN y el RIGHT JOIN simultáneamente. Aquí hay algunos ejemplos más para practicar la unión de las tablas. Aprenda los diferentes tipos de JOIN para seleccionar el que necesita Verá, conocer cómo funcionan estos JOINs es bastante útil. Le permiten unir dos o más tablas y obtener diferentes combinaciones de datos de cada tabla. No hay ninguna diferencia en la forma de escribir el código. Lo único que cambia es la palabra clave que utilizas en función del tipo de JOIN que necesitas. Es realmente importante entender qué datos devuelve cada uno de estos JOINs. Para dominar y practicar esta habilidad, el curso SQL para principiantes y el curso de SQL JOINs son lo que necesitas. Si necesitas consejos sobre cómo practicar losJOINs, aquí tienes algunos consejos. Tags: SQL aprender SQL sql joins