5th Dec 2022 Lectura de 8 minutos Explicación de INNER JOIN en palabras sencillas Ignacio L. Bisso princípios básicos de SQL SQL aprender SQL Índice Una Base de Datos de una Agencia de Viajes Su Primer JOIN SQL: Obtenga los Paquetes de Viaje Incluyendo las Ciudades de la Playa En este artículo, cubriré quizás el elemento más importante del lenguaje SQL. Así es. Estoy hablando de la cláusula INNER JOIN de SQL. Como sabes, en una base de datos los datos se almacenan en varias tablas. En mi último artículo, cubrí cómo crear consultas SQL cuando los datos que necesitas están en una sola tabla. ¿Pero qué pasa si los datos que necesitas están en dos tablas? Para este caso, necesita usar una cláusula JOIN para combinar ambas tablas, que es algo similar a conectar ambas tablas. En este artículo, explicaré la cláusula INNER JOIN de SQL en palabras sencillas usando algunos ejemplos fáciles de entender. Una Base de Datos de una Agencia de Viajes Quizá ya sepa que en una base de datos los datos se almacenan en tablas. Supongamos que trabajas en una agencia de viajes y que la base de datos de la agencia tiene dos tablas TRAVEL_PACK y CITIES. En la siguiente imagen puedes ver la base de datos, por supuesto no se muestran todos los datos. Muestra de TRAVEL_PACK Tabla PACK_NAMEBEST_SEASONPRICEDURATION United States: Big CitiesAll year$3500.0010 days United States: West CoastMarch to May$3700.0012 days South American TourAugust to November$1850.0018 days Beaches of BrazilDecember to March$2200.007 days Muestra de CITIES Tabla NAMETYPE_OF_CITYPACK_NAMEDAYS_STAYING San FranciscohistoricalUnited States: West Coast5 WashingtonhistoricalUnited States: Big Cities3 New YorkbusinessUnited States: Big Cities7 Rio de JaneirobeachBeaches of Brazil4 UshuaiamountainSouth American Tour3 Salvador de BahiabeachBeaches of Brazil3 Los AngelesbeachUnited States: West Coast7 Tenga en cuenta: Para utilizar una cláusula JOIN para combinar dos tablas, debe haber un campo o columna que aparezca en ambas tablas. En la base de datos de muestra este campo es el nombre del paquete de viaje. Como puede ver en la TRAVEL_PACK tabla, el nombre del paquete está en la columna PACK_NAMEy en la tabla CITIES tabla el nombre del paquete está en la columna PACK_NAME también. Es fácil ver que ambas columnas tienen el mismo nombre de columna, sin embargo en otras bases de datos puede ser diferente. Es decir, cuando se utiliza una cláusula INNER JOIN el nombre de la columna común puede ser diferente en ambas tablas o no. De todos modos, recuerde el nombre de la columna PACK_NAMEporque lo necesitará más tarde para escribir la cláusula JOIN. Su Primer JOIN SQL: Obtenga los Paquetes de Viaje Incluyendo las Ciudades de la Playa Suelo recomendar empezar pensando en dónde se encuentran los datos que necesitas para la consulta. En este caso está claro que necesitarás la tabla TRAVEL_PACK tabla para obtener los nombres de los paquetes, pero al mismo tiempo también necesitarás la CITIES porque necesitas comprobar si la ciudad es de playa o no. Por lo tanto, los datos necesarios para esta consulta están en dos tablas, que es la razón por la que necesita utilizar un JOIN SQL. Cuando tiene que obtener datos de dos (o más) tablas, debe utilizar un JOIN SQL. El SQL JOIN actúa como un conector entre dos tablas, creando pares de registros. Básicamente, toma dos registros (uno de cada tabla) y los une en un par de registros. Este tipo de unión se llama INNER JOIN, y en SQL los términos JOIN o INNER JOIN son exactamente lo mismo. Para aquellos lectores que quieran profundizar, existen otros tipos de join en SQL, por ejemplo el opuesto al INNER join es otro tipo de join llamado LEFT join o OUTER LEFT join, y también puedes encontrar otros tipos de join como RIGHT join, NATURAL join y LATERAL join entre otros. Puedes aprender muchos de estos tipos de join en SQL en el curso online Tipos de JOIN en SQL . Sin embargo, en este artículo me centraré en el INNER JOIN, que es realmente poderoso. La siguiente imagen muestra cómo la cláusula JOIN crea un par de registros: (haga clic para ampliar) Ahora, mostraré la sintaxis para implementar un INNER JOIN, utilizando el siguiente patrón FROM table1 INNER JOIN table2 ON common column in table1 = common column in table2 Si rellena el patrón con sus tablas de muestra y los nombres de las columnas, entonces tendrá la siguiente cláusula INNER JOIN: FROM CITIES INNER JOIN TRAVEL_PACK ON CITIES.PACK_NAME = TRAVEL_PACK.PACK_NAME FROM CIUDADES Una vez que complete la cláusula FROM con el INNER JOIN, puede continuar trabajando en las cláusulas SELECT y WHERE de la consulta. La cláusula SELECT es fácil porque sólo necesitas devolver la columna NAME, luego la cláusula será: SELECT TRAVEL_PACK.PACK_NAME Observe que la referencia a la columna PACK_NAME se hace añadiendo un prefijo con el nombre de la tabla (TRAVEL_PACK en este caso). Esta es una buena práctica a aplicar cuando la consulta involucra más de una tabla. En la cláusula WHERE tendrá que filtrar los resultados para incluir sólo las ciudades de playa. Entonces la cláusula será: WHERE CITIES.TYPE_OF_CITY = 'beach' Finalmente si juntas todas las cláusulas la consulta será: SELECT TRAVEL_PACK.PACK_NAME FROM CITIES JOIN TRAVEL_PACK ON CITIES.PACK_NAME = TRAVEL_PACK.PACK_NAME WHERE CITIES.TYPE_OF_CITY = 'beach' A continuación el resultado de la consulta anterior: NAME Los Angeles Salvador de Bahia Rio de Janeiro Su siguiente unión: las ciudades incluidas en los paquetes de viaje más baratos que 2500 dólares De nuevo, como en la consulta anterior, puede ver que necesita acceder a dos tablas para esta consulta, utilizando un JOIN para las columnas CITIES y TRAVEL_PACK de nuevo. Observe que utilizo el término JOIN en lugar de INNER JOIN porque ambos son exactamente lo mismo en SQL. De la consulta anterior ya sabe cómo crear la cláusula JOIN. Los cambios están en las cláusulas SELECT y WHERE, como puede ver en los siguientes párrafos. La cláusula select es fácil, porque sólo necesita el nombre de la ciudad: SELECT CITY.NAME En la cláusula where hay que filtrar por el precio del paquete de viaje, entonces la cláusula WHERE será: WHERE TRAVEL_PACK.PRICE <= 2500 Entonces, la consulta completa será la siguiente: SELECT CITY.NAME FROM CITIES JOIN TRAVEL_PACK ON CITIES.PACK_NAME = TRAVEL_PACK.PACK_NAME WHERE TRAVEL_PACK.PRICE <= 2500 El resultado de la consulta anterior será: NAME Rio de Janeiro Ushuaia Salvador de Bahia Profundización: INNER JOIN para tres tablas ¿Es posible utilizar un INNER JOIN con más de dos tablas? Claro que sí. Es más, puede utilizar una cláusula JOIN con tantas tablas como desee. Sin embargo, debo mencionar que cada cláusula SQL JOIN es sólo para un par de tablas. Así que si tiene tres tablas para unir, como T1, T2 y T3, necesitará dos cláusulas SQL JOIN como puede ver en el siguiente ejemplo: FROM T1 JOIN T2 ON ...... JOIN T3 ON ....... He dejado la cláusula ON vacía porque voy a explicar esta parte con el siguiente ejemplo. Supongamos que amplía la base de datos de la agencia añadiendo una nueva tabla llamada STATES en la que piensa almacenar los estados, regiones o provincias de cada país. La base de datos con tres tablas será como la siguiente imagen: TRAVEL_PACK Tabla PACK_NAMEBEST_SEASONPRICEDURATION United States: Big CitiesAll year$3500.0010 days United States: West CoastMarch to May$3700.0012 days South American TourAugust to November$1850.0018 days Beaches of BrazilDecember to March$2200.007 days STATES Tabla NAMECOUNTRYPOPULATIONLANGUAGE New YorkUnited States17000000english Tierra del FuegoArgentina190000spanish CaliforniaUnited States13400000english Rio de JaneiroBrasil15000000portuguese BahiaBrasil8000000portuguese CITIES Tabla NAMETYPE_OF CITYPACK_NAMEDAYS_STAYSTATE San FranciscohistoricalUnited States: West Coast5California WashingtonhistoricalUnited States: Big Cities3Washington New YorkbusinessUnited States: Big Cities7New York Rio de JaneirobeachBeaches of Brazil4Rio de Janeiro UshuaiamountainSouth American Tour3Tierra del Fuego Salvador de BahiabeachBeaches of Brazil3Bahia Los AngelesbeachUnited States: West Coast7California Supongamos que necesita obtener un informe con una lista de todas las ciudades con el estado, el nombre del paquete y el idioma utilizado en la ciudad en los estados donde el idioma es el español o el portugués. Está claro que necesita unir las tablas CITIES y STATES y luego JOIN este resultado también con la tabla TRAVEL_PACK tabla. Puede empezar aplicando lo que ha aprendido en los ejemplos anteriores. Primero, utilice una cláusula JOIN para combinar la tabla CITIES con la tabla STATES. Está claro que necesita utilizar las columnas CITIES.STATE y STATE.NAME en la cláusula ON. Entonces la cláusula from será la siguiente: FROM CITIES JOIN STATES ON CITIES.STATE = STATES.NAME A continuación, hay que añadir la tercera tabla a la cláusula JOIN, que es la tabla TRAVEL_PACK. Ya aprendió cómo unir esta tabla en un ejemplo anterior, así que el JOIN completo será: FROM CITIES JOIN STATES ON CITIES.STATE = STATES.NAME JOIN TRAVEL_PACK ON CITIES.PACK_NAME = TRAVEL_PACK.PACK_NAME Añadiendo las cláusulas SELECT y WHERE, la consulta completa será como la siguiente: SELECT CITIES.NAME, STATES.NAME, TRAVEL_PACK.PACK_NAME, STATES.LANGUAGE FROM CITIES JOIN STATES ON CITIES.STATE = STATES.NAME JOIN TRAVEL_PACK ON CITIES.PACK_NAME = TRAVEL_PACK.PACK_NAME WHERE STATES.LANGUAGE IN ('spanish','portuguese') Y el resultado será: NAMENAMEPACK_NAMELANGUAGE SalvadorBahiaBeaches of Brazilportuguese Rio de JaneiroRio de JaneiroBeaches of Brazilportuguese UshuaiaTierra del FuegoSouth American Tourspanish Próximos pasos para seguir aprendiendo En este artículo, cubrí cómo unir tablas en SQL. Expliqué mediante ejemplos lo que es un INNER JOIN en SQL y cómo funciona la cláusula JOIN. La cláusula JOIN abre un enorme mundo de nuevas posibilidades en SQL. Piensa que cualquier persona no técnica con capacidad para utilizar la cláusula JOIN en consultas SQL tiene un valor extra como empleado, independientemente del área de la empresa en la que trabaje. Profundice en Tipos de JOIN en SQL y sea un sólido colaborador de negocio en su empresa. Tags: princípios básicos de SQL SQL aprender SQL