Capítulo 14: Profundización en Consultas SQL
14.2 Uniendo Múltiples Tablas
En SQL, las cláusulas JOIN
se utilizan para combinar filas de dos o más tablas en función de una columna relacionada entre ellas. Hay varios tipos de JOIN disponibles en SQL:
- JOIN (INTERNO): Devuelve registros que tienen valores coincidentes en ambas tablas.
- LEFT JOIN (OUTER): Devuelve todos los registros de la tabla izquierda y los registros coincidentes de la tabla derecha.
- RIGHT JOIN (OUTER): Devuelve todos los registros de la tabla derecha y los registros coincidentes de la tabla izquierda.
- FULL JOIN (OUTER): Devuelve todos los registros cuando hay una coincidencia en cualquiera de las tablas izquierda o derecha.
Palabra clave INNER JOIN
La palabra clave INNER JOIN se utiliza para combinar datos de dos tablas diferentes utilizando una columna común. Esto es particularmente útil cuando queremos recuperar datos que existen en ambas tablas. Al usar la palabra clave INNER JOIN, podemos asegurarnos de que solo se devuelvan los registros con valores coincidentes en ambas tablas.
Esto puede ayudarnos a comprender mejor las relaciones entre diferentes piezas de datos y a obtener ideas que de otro modo no habríamos podido ver. Además, la palabra clave INNER JOIN es solo uno de los muchos tipos diferentes de joins que podemos usar para combinar datos de múltiples tablas. Otros tipos de joins incluyen LEFT JOIN, RIGHT JOIN y FULL OUTER JOIN, cada uno de los cuales tiene sus propiedades y casos de uso únicos.
Al comprender los diferentes tipos de joins que están disponibles para nosotros, podemos asegurarnos de estar utilizando la herramienta adecuada para el trabajo y obteniendo el máximo provecho de nuestros datos.
Sintaxis:
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
Ejemplo:
Supongamos que tenemos dos tablas, Orders
y Customers
, con la siguiente estructura:
Orders:
OrderID | CustomerID | OrderAmount
--------|------------|------------
1 | 1 | 100
2 | 2 | 200
3 | 5 | 300
4 | 3 | 400
Clientes:
CustomerID | Name | Country
-----------|-------|---------
1 | Alex | USA
2 | Bob | UK
3 | Chris | France
4 | Dave | Canada
Un INNER JOIN selecciona todas las filas de ambas tablas siempre y cuando haya una coincidencia entre las columnas. Si hay registros en la tabla "Orders" que no tienen entradas coincidentes en la tabla "Customers", esos registros se omitirán del resultado.
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderAmount
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
Resultado:
OrderID | CustomerName | OrderAmount
--------|--------------|------------
1 | Alex | 100
2 | Bob | 200
3 | Chris | 400
14.2.1 LEFT JOIN y RIGHT JOIN
Palabra clave LEFT JOIN
La palabra clave LEFT JOIN es un tipo de join que recupera filas de la tabla izquierda (tabla1) y las filas coincidentes de la tabla derecha (tabla2). Esto significa que si no hay una coincidencia en la tabla derecha, el valor resultante será NULL.
Es importante tener en cuenta que LEFT JOIN es diferente de INNER JOIN, ya que este último solo devuelve filas que tienen datos coincidentes en ambas tablas. LEFT JOIN, por otro lado, seguirá mostrando todas las filas de la tabla izquierda incluso si no hay datos correspondientes en la tabla derecha.
Esto puede ser útil cuando se trabaja con datos que tienen valores faltantes o cuando se desea ver todos los datos de una tabla independientemente de si hay datos coincidentes en la otra tabla. Además, LEFT JOIN se puede combinar con otras declaraciones SQL como WHERE, ORDER BY y GROUP BY para refinar aún más los resultados y obtener la salida deseada.
Sintaxis:
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
Ejemplo:
SELECT Customers.CustomerName, Orders.OrderAmount
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
Resultado:
CustomerName | OrderAmount
-------------|------------
Alex | 100
Bob | 200
Chris | 400
Dave | NULL
Como puedes ver, la palabra clave LEFT JOIN devuelve todos los registros de la tabla izquierda (Clientes) y los registros coincidentes de la tabla derecha (Pedidos). El resultado es NULL en el lado derecho cuando no hay coincidencias.
Palabra clave RIGHT JOIN
La palabra clave RIGHT JOIN se utiliza para combinar datos de dos tablas, tabla1 y tabla2. Este tipo de unión devuelve todas las filas de la tabla2 y las filas coincidentes de la tabla1. Si no hay coincidencia de la tabla1, el resultado será NULL en el lado izquierdo. El RIGHT JOIN se usa a menudo cuando se desea incluir todos los datos de la tabla2 y solo los datos coincidentes de la tabla1.
Por ejemplo, supongamos que tienes dos tablas: una que contiene información sobre empleados (tabla1) y otra que contiene información sobre departamentos (tabla2). Quieres mostrar una lista de todos los departamentos, incluso si no hay empleados en algunos de ellos. El RIGHT JOIN se puede utilizar para obtener todos los departamentos de la tabla2 y solo los datos coincidentes de la tabla1 (los empleados que pertenecen a cada departamento).
Vale la pena señalar que RIGHT JOIN no es un tipo de unión comúnmente utilizado. En la mayoría de los casos, se utiliza LEFT JOIN en su lugar. Sin embargo, hay algunas situaciones en las que RIGHT JOIN puede ser útil, como cuando necesitas mostrar todos los datos de la segunda tabla y solo los datos coincidentes de la primera tabla.
Sintaxis:
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;
Ejemplo:
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderAmount
FROM Orders
RIGHT JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
Resultado:
OrderID | CustomerName | OrderAmount
--------|--------------|------------
1 | Alex | 100
2 | Bob | 200
4 | Chris | 400
NULL | Dave | NULL
14.2.2 UNIÓN COMPLETA (FULL OUTER JOIN)
Cuando se usan SQL para unir tablas, la palabra clave FULL OUTER JOIN puede ser una herramienta útil. Esta palabra clave devuelve todos los registros en ambas tablas izquierda (tabla1) y derecha (tabla2), incluso si no hay coincidencia entre ellos.
Esto significa que incluso si un registro en una tabla no tiene una coincidencia correspondiente en la otra tabla, aún se incluirá en el conjunto de resultados. La palabra clave FULL OUTER JOIN es especialmente útil cuando deseas asegurarte de que todos los datos de ambas tablas estén incluidos en los resultados de la consulta, independientemente de si hay una coincidencia o no.
Al usar esta palabra clave, puedes evitar el riesgo de perder información importante que pueda estar presente en una tabla pero no en la otra.
Sintaxis:
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name = table2.column_name;
Ejemplo:
SELECT Customers.CustomerName, Orders.OrderAmount
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
Resultado:
CustomerName | OrderAmount
-------------|------------
Alex | 100
Bob | 200
Chris | 400
Dave | NULL
Eve | 500
En este ejemplo, la palabra clave FULL OUTER JOIN devuelve todos los registros cuando hay una coincidencia en cualquiera de los registros de la tabla izquierda (Clientes) o derecha (Pedidos). Combina los resultados de ambas uniones externas izquierda y derecha y devuelve todos los registros (coincidentes o no coincidentes).
Ten en cuenta que no todos los sistemas de bases de datos admiten la palabra clave FULL OUTER JOIN. Por ejemplo, MySQL no admite FULL OUTER JOIN, pero puedes lograr el mismo resultado combinando LEFT JOIN y UNION.
14.2.3 UNIÓN y UNION ALL
El operador UNION se utiliza para combinar el conjunto de resultados de dos o más declaraciones SELECT. Cada declaración SELECT dentro de la UNIÓN debe tener el mismo número de columnas, las columnas también deben tener tipos de datos similares y deben estar en el mismo orden.
El operador UNION selecciona solo valores distintos de forma predeterminada. Para permitir valores duplicados, utiliza UNION ALL.
Sintaxis:
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
Para permitir valores duplicados:
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
Ejemplo:
SELECT city FROM Customers
UNION
SELECT city FROM Suppliers
ORDER BY city;
Esta declaración SQL devolvería todas las ciudades distintas de la tabla "Clientes" y la tabla "Proveedores".
Ejemplo con UNION ALL:
SELECT city FROM Customers
UNION ALL
SELECT city FROM Suppliers
ORDER BY city;
Esta declaración SQL devolvería todas las ciudades (también duplicadas) de la tabla "Clientes" y la tabla "Proveedores".
14.2.4 Subconsultas
Las subconsultas (también conocidas como consultas internas o consultas anidadas) son una herramienta para realizar operaciones en múltiples pasos. En otras palabras, es una consulta dentro de otra consulta SQL. Una subconsulta se utiliza para devolver datos que se utilizarán en la consulta principal como una condición para restringir aún más los datos que se van a recuperar.
La subconsulta puede estar anidada dentro de una declaración SELECT, INSERT, UPDATE o DELETE o dentro de otra subconsulta. Una subconsulta se agrega generalmente en la Cláusula WHERE de la Declaración SQL.
Sintaxis:
SELECT column_name(s)
FROM table_name
WHERE column_name operator
(SELECT column_name(s)
FROM table_name
WHERE condition);
Por ejemplo, puedes encontrar los clientes que están ubicados en la misma ciudad que el proveedor 'Exotic Liquid' con la siguiente consulta:
SELECT CustomerName, ContactName, City
FROM Customers
WHERE City =
(SELECT City
FROM Suppliers
WHERE SupplierName = 'Exotic Liquid');
Esto devolverá todos los detalles de los clientes que están ubicados en la misma ciudad que 'Exotic Liquid'.
Las subconsultas pueden ser una herramienta poderosa en tu caja de herramientas de SQL, lo que te permite realizar consultas complejas de manera paso a paso, haciendo que tus consultas sean más legibles y más fáciles de depurar.
En la próxima sección, exploraremos las funciones de agregación en SQL.
14.2 Uniendo Múltiples Tablas
En SQL, las cláusulas JOIN
se utilizan para combinar filas de dos o más tablas en función de una columna relacionada entre ellas. Hay varios tipos de JOIN disponibles en SQL:
- JOIN (INTERNO): Devuelve registros que tienen valores coincidentes en ambas tablas.
- LEFT JOIN (OUTER): Devuelve todos los registros de la tabla izquierda y los registros coincidentes de la tabla derecha.
- RIGHT JOIN (OUTER): Devuelve todos los registros de la tabla derecha y los registros coincidentes de la tabla izquierda.
- FULL JOIN (OUTER): Devuelve todos los registros cuando hay una coincidencia en cualquiera de las tablas izquierda o derecha.
Palabra clave INNER JOIN
La palabra clave INNER JOIN se utiliza para combinar datos de dos tablas diferentes utilizando una columna común. Esto es particularmente útil cuando queremos recuperar datos que existen en ambas tablas. Al usar la palabra clave INNER JOIN, podemos asegurarnos de que solo se devuelvan los registros con valores coincidentes en ambas tablas.
Esto puede ayudarnos a comprender mejor las relaciones entre diferentes piezas de datos y a obtener ideas que de otro modo no habríamos podido ver. Además, la palabra clave INNER JOIN es solo uno de los muchos tipos diferentes de joins que podemos usar para combinar datos de múltiples tablas. Otros tipos de joins incluyen LEFT JOIN, RIGHT JOIN y FULL OUTER JOIN, cada uno de los cuales tiene sus propiedades y casos de uso únicos.
Al comprender los diferentes tipos de joins que están disponibles para nosotros, podemos asegurarnos de estar utilizando la herramienta adecuada para el trabajo y obteniendo el máximo provecho de nuestros datos.
Sintaxis:
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
Ejemplo:
Supongamos que tenemos dos tablas, Orders
y Customers
, con la siguiente estructura:
Orders:
OrderID | CustomerID | OrderAmount
--------|------------|------------
1 | 1 | 100
2 | 2 | 200
3 | 5 | 300
4 | 3 | 400
Clientes:
CustomerID | Name | Country
-----------|-------|---------
1 | Alex | USA
2 | Bob | UK
3 | Chris | France
4 | Dave | Canada
Un INNER JOIN selecciona todas las filas de ambas tablas siempre y cuando haya una coincidencia entre las columnas. Si hay registros en la tabla "Orders" que no tienen entradas coincidentes en la tabla "Customers", esos registros se omitirán del resultado.
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderAmount
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
Resultado:
OrderID | CustomerName | OrderAmount
--------|--------------|------------
1 | Alex | 100
2 | Bob | 200
3 | Chris | 400
14.2.1 LEFT JOIN y RIGHT JOIN
Palabra clave LEFT JOIN
La palabra clave LEFT JOIN es un tipo de join que recupera filas de la tabla izquierda (tabla1) y las filas coincidentes de la tabla derecha (tabla2). Esto significa que si no hay una coincidencia en la tabla derecha, el valor resultante será NULL.
Es importante tener en cuenta que LEFT JOIN es diferente de INNER JOIN, ya que este último solo devuelve filas que tienen datos coincidentes en ambas tablas. LEFT JOIN, por otro lado, seguirá mostrando todas las filas de la tabla izquierda incluso si no hay datos correspondientes en la tabla derecha.
Esto puede ser útil cuando se trabaja con datos que tienen valores faltantes o cuando se desea ver todos los datos de una tabla independientemente de si hay datos coincidentes en la otra tabla. Además, LEFT JOIN se puede combinar con otras declaraciones SQL como WHERE, ORDER BY y GROUP BY para refinar aún más los resultados y obtener la salida deseada.
Sintaxis:
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
Ejemplo:
SELECT Customers.CustomerName, Orders.OrderAmount
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
Resultado:
CustomerName | OrderAmount
-------------|------------
Alex | 100
Bob | 200
Chris | 400
Dave | NULL
Como puedes ver, la palabra clave LEFT JOIN devuelve todos los registros de la tabla izquierda (Clientes) y los registros coincidentes de la tabla derecha (Pedidos). El resultado es NULL en el lado derecho cuando no hay coincidencias.
Palabra clave RIGHT JOIN
La palabra clave RIGHT JOIN se utiliza para combinar datos de dos tablas, tabla1 y tabla2. Este tipo de unión devuelve todas las filas de la tabla2 y las filas coincidentes de la tabla1. Si no hay coincidencia de la tabla1, el resultado será NULL en el lado izquierdo. El RIGHT JOIN se usa a menudo cuando se desea incluir todos los datos de la tabla2 y solo los datos coincidentes de la tabla1.
Por ejemplo, supongamos que tienes dos tablas: una que contiene información sobre empleados (tabla1) y otra que contiene información sobre departamentos (tabla2). Quieres mostrar una lista de todos los departamentos, incluso si no hay empleados en algunos de ellos. El RIGHT JOIN se puede utilizar para obtener todos los departamentos de la tabla2 y solo los datos coincidentes de la tabla1 (los empleados que pertenecen a cada departamento).
Vale la pena señalar que RIGHT JOIN no es un tipo de unión comúnmente utilizado. En la mayoría de los casos, se utiliza LEFT JOIN en su lugar. Sin embargo, hay algunas situaciones en las que RIGHT JOIN puede ser útil, como cuando necesitas mostrar todos los datos de la segunda tabla y solo los datos coincidentes de la primera tabla.
Sintaxis:
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;
Ejemplo:
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderAmount
FROM Orders
RIGHT JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
Resultado:
OrderID | CustomerName | OrderAmount
--------|--------------|------------
1 | Alex | 100
2 | Bob | 200
4 | Chris | 400
NULL | Dave | NULL
14.2.2 UNIÓN COMPLETA (FULL OUTER JOIN)
Cuando se usan SQL para unir tablas, la palabra clave FULL OUTER JOIN puede ser una herramienta útil. Esta palabra clave devuelve todos los registros en ambas tablas izquierda (tabla1) y derecha (tabla2), incluso si no hay coincidencia entre ellos.
Esto significa que incluso si un registro en una tabla no tiene una coincidencia correspondiente en la otra tabla, aún se incluirá en el conjunto de resultados. La palabra clave FULL OUTER JOIN es especialmente útil cuando deseas asegurarte de que todos los datos de ambas tablas estén incluidos en los resultados de la consulta, independientemente de si hay una coincidencia o no.
Al usar esta palabra clave, puedes evitar el riesgo de perder información importante que pueda estar presente en una tabla pero no en la otra.
Sintaxis:
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name = table2.column_name;
Ejemplo:
SELECT Customers.CustomerName, Orders.OrderAmount
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
Resultado:
CustomerName | OrderAmount
-------------|------------
Alex | 100
Bob | 200
Chris | 400
Dave | NULL
Eve | 500
En este ejemplo, la palabra clave FULL OUTER JOIN devuelve todos los registros cuando hay una coincidencia en cualquiera de los registros de la tabla izquierda (Clientes) o derecha (Pedidos). Combina los resultados de ambas uniones externas izquierda y derecha y devuelve todos los registros (coincidentes o no coincidentes).
Ten en cuenta que no todos los sistemas de bases de datos admiten la palabra clave FULL OUTER JOIN. Por ejemplo, MySQL no admite FULL OUTER JOIN, pero puedes lograr el mismo resultado combinando LEFT JOIN y UNION.
14.2.3 UNIÓN y UNION ALL
El operador UNION se utiliza para combinar el conjunto de resultados de dos o más declaraciones SELECT. Cada declaración SELECT dentro de la UNIÓN debe tener el mismo número de columnas, las columnas también deben tener tipos de datos similares y deben estar en el mismo orden.
El operador UNION selecciona solo valores distintos de forma predeterminada. Para permitir valores duplicados, utiliza UNION ALL.
Sintaxis:
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
Para permitir valores duplicados:
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
Ejemplo:
SELECT city FROM Customers
UNION
SELECT city FROM Suppliers
ORDER BY city;
Esta declaración SQL devolvería todas las ciudades distintas de la tabla "Clientes" y la tabla "Proveedores".
Ejemplo con UNION ALL:
SELECT city FROM Customers
UNION ALL
SELECT city FROM Suppliers
ORDER BY city;
Esta declaración SQL devolvería todas las ciudades (también duplicadas) de la tabla "Clientes" y la tabla "Proveedores".
14.2.4 Subconsultas
Las subconsultas (también conocidas como consultas internas o consultas anidadas) son una herramienta para realizar operaciones en múltiples pasos. En otras palabras, es una consulta dentro de otra consulta SQL. Una subconsulta se utiliza para devolver datos que se utilizarán en la consulta principal como una condición para restringir aún más los datos que se van a recuperar.
La subconsulta puede estar anidada dentro de una declaración SELECT, INSERT, UPDATE o DELETE o dentro de otra subconsulta. Una subconsulta se agrega generalmente en la Cláusula WHERE de la Declaración SQL.
Sintaxis:
SELECT column_name(s)
FROM table_name
WHERE column_name operator
(SELECT column_name(s)
FROM table_name
WHERE condition);
Por ejemplo, puedes encontrar los clientes que están ubicados en la misma ciudad que el proveedor 'Exotic Liquid' con la siguiente consulta:
SELECT CustomerName, ContactName, City
FROM Customers
WHERE City =
(SELECT City
FROM Suppliers
WHERE SupplierName = 'Exotic Liquid');
Esto devolverá todos los detalles de los clientes que están ubicados en la misma ciudad que 'Exotic Liquid'.
Las subconsultas pueden ser una herramienta poderosa en tu caja de herramientas de SQL, lo que te permite realizar consultas complejas de manera paso a paso, haciendo que tus consultas sean más legibles y más fáciles de depurar.
En la próxima sección, exploraremos las funciones de agregación en SQL.
14.2 Uniendo Múltiples Tablas
En SQL, las cláusulas JOIN
se utilizan para combinar filas de dos o más tablas en función de una columna relacionada entre ellas. Hay varios tipos de JOIN disponibles en SQL:
- JOIN (INTERNO): Devuelve registros que tienen valores coincidentes en ambas tablas.
- LEFT JOIN (OUTER): Devuelve todos los registros de la tabla izquierda y los registros coincidentes de la tabla derecha.
- RIGHT JOIN (OUTER): Devuelve todos los registros de la tabla derecha y los registros coincidentes de la tabla izquierda.
- FULL JOIN (OUTER): Devuelve todos los registros cuando hay una coincidencia en cualquiera de las tablas izquierda o derecha.
Palabra clave INNER JOIN
La palabra clave INNER JOIN se utiliza para combinar datos de dos tablas diferentes utilizando una columna común. Esto es particularmente útil cuando queremos recuperar datos que existen en ambas tablas. Al usar la palabra clave INNER JOIN, podemos asegurarnos de que solo se devuelvan los registros con valores coincidentes en ambas tablas.
Esto puede ayudarnos a comprender mejor las relaciones entre diferentes piezas de datos y a obtener ideas que de otro modo no habríamos podido ver. Además, la palabra clave INNER JOIN es solo uno de los muchos tipos diferentes de joins que podemos usar para combinar datos de múltiples tablas. Otros tipos de joins incluyen LEFT JOIN, RIGHT JOIN y FULL OUTER JOIN, cada uno de los cuales tiene sus propiedades y casos de uso únicos.
Al comprender los diferentes tipos de joins que están disponibles para nosotros, podemos asegurarnos de estar utilizando la herramienta adecuada para el trabajo y obteniendo el máximo provecho de nuestros datos.
Sintaxis:
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
Ejemplo:
Supongamos que tenemos dos tablas, Orders
y Customers
, con la siguiente estructura:
Orders:
OrderID | CustomerID | OrderAmount
--------|------------|------------
1 | 1 | 100
2 | 2 | 200
3 | 5 | 300
4 | 3 | 400
Clientes:
CustomerID | Name | Country
-----------|-------|---------
1 | Alex | USA
2 | Bob | UK
3 | Chris | France
4 | Dave | Canada
Un INNER JOIN selecciona todas las filas de ambas tablas siempre y cuando haya una coincidencia entre las columnas. Si hay registros en la tabla "Orders" que no tienen entradas coincidentes en la tabla "Customers", esos registros se omitirán del resultado.
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderAmount
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
Resultado:
OrderID | CustomerName | OrderAmount
--------|--------------|------------
1 | Alex | 100
2 | Bob | 200
3 | Chris | 400
14.2.1 LEFT JOIN y RIGHT JOIN
Palabra clave LEFT JOIN
La palabra clave LEFT JOIN es un tipo de join que recupera filas de la tabla izquierda (tabla1) y las filas coincidentes de la tabla derecha (tabla2). Esto significa que si no hay una coincidencia en la tabla derecha, el valor resultante será NULL.
Es importante tener en cuenta que LEFT JOIN es diferente de INNER JOIN, ya que este último solo devuelve filas que tienen datos coincidentes en ambas tablas. LEFT JOIN, por otro lado, seguirá mostrando todas las filas de la tabla izquierda incluso si no hay datos correspondientes en la tabla derecha.
Esto puede ser útil cuando se trabaja con datos que tienen valores faltantes o cuando se desea ver todos los datos de una tabla independientemente de si hay datos coincidentes en la otra tabla. Además, LEFT JOIN se puede combinar con otras declaraciones SQL como WHERE, ORDER BY y GROUP BY para refinar aún más los resultados y obtener la salida deseada.
Sintaxis:
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
Ejemplo:
SELECT Customers.CustomerName, Orders.OrderAmount
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
Resultado:
CustomerName | OrderAmount
-------------|------------
Alex | 100
Bob | 200
Chris | 400
Dave | NULL
Como puedes ver, la palabra clave LEFT JOIN devuelve todos los registros de la tabla izquierda (Clientes) y los registros coincidentes de la tabla derecha (Pedidos). El resultado es NULL en el lado derecho cuando no hay coincidencias.
Palabra clave RIGHT JOIN
La palabra clave RIGHT JOIN se utiliza para combinar datos de dos tablas, tabla1 y tabla2. Este tipo de unión devuelve todas las filas de la tabla2 y las filas coincidentes de la tabla1. Si no hay coincidencia de la tabla1, el resultado será NULL en el lado izquierdo. El RIGHT JOIN se usa a menudo cuando se desea incluir todos los datos de la tabla2 y solo los datos coincidentes de la tabla1.
Por ejemplo, supongamos que tienes dos tablas: una que contiene información sobre empleados (tabla1) y otra que contiene información sobre departamentos (tabla2). Quieres mostrar una lista de todos los departamentos, incluso si no hay empleados en algunos de ellos. El RIGHT JOIN se puede utilizar para obtener todos los departamentos de la tabla2 y solo los datos coincidentes de la tabla1 (los empleados que pertenecen a cada departamento).
Vale la pena señalar que RIGHT JOIN no es un tipo de unión comúnmente utilizado. En la mayoría de los casos, se utiliza LEFT JOIN en su lugar. Sin embargo, hay algunas situaciones en las que RIGHT JOIN puede ser útil, como cuando necesitas mostrar todos los datos de la segunda tabla y solo los datos coincidentes de la primera tabla.
Sintaxis:
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;
Ejemplo:
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderAmount
FROM Orders
RIGHT JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
Resultado:
OrderID | CustomerName | OrderAmount
--------|--------------|------------
1 | Alex | 100
2 | Bob | 200
4 | Chris | 400
NULL | Dave | NULL
14.2.2 UNIÓN COMPLETA (FULL OUTER JOIN)
Cuando se usan SQL para unir tablas, la palabra clave FULL OUTER JOIN puede ser una herramienta útil. Esta palabra clave devuelve todos los registros en ambas tablas izquierda (tabla1) y derecha (tabla2), incluso si no hay coincidencia entre ellos.
Esto significa que incluso si un registro en una tabla no tiene una coincidencia correspondiente en la otra tabla, aún se incluirá en el conjunto de resultados. La palabra clave FULL OUTER JOIN es especialmente útil cuando deseas asegurarte de que todos los datos de ambas tablas estén incluidos en los resultados de la consulta, independientemente de si hay una coincidencia o no.
Al usar esta palabra clave, puedes evitar el riesgo de perder información importante que pueda estar presente en una tabla pero no en la otra.
Sintaxis:
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name = table2.column_name;
Ejemplo:
SELECT Customers.CustomerName, Orders.OrderAmount
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
Resultado:
CustomerName | OrderAmount
-------------|------------
Alex | 100
Bob | 200
Chris | 400
Dave | NULL
Eve | 500
En este ejemplo, la palabra clave FULL OUTER JOIN devuelve todos los registros cuando hay una coincidencia en cualquiera de los registros de la tabla izquierda (Clientes) o derecha (Pedidos). Combina los resultados de ambas uniones externas izquierda y derecha y devuelve todos los registros (coincidentes o no coincidentes).
Ten en cuenta que no todos los sistemas de bases de datos admiten la palabra clave FULL OUTER JOIN. Por ejemplo, MySQL no admite FULL OUTER JOIN, pero puedes lograr el mismo resultado combinando LEFT JOIN y UNION.
14.2.3 UNIÓN y UNION ALL
El operador UNION se utiliza para combinar el conjunto de resultados de dos o más declaraciones SELECT. Cada declaración SELECT dentro de la UNIÓN debe tener el mismo número de columnas, las columnas también deben tener tipos de datos similares y deben estar en el mismo orden.
El operador UNION selecciona solo valores distintos de forma predeterminada. Para permitir valores duplicados, utiliza UNION ALL.
Sintaxis:
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
Para permitir valores duplicados:
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
Ejemplo:
SELECT city FROM Customers
UNION
SELECT city FROM Suppliers
ORDER BY city;
Esta declaración SQL devolvería todas las ciudades distintas de la tabla "Clientes" y la tabla "Proveedores".
Ejemplo con UNION ALL:
SELECT city FROM Customers
UNION ALL
SELECT city FROM Suppliers
ORDER BY city;
Esta declaración SQL devolvería todas las ciudades (también duplicadas) de la tabla "Clientes" y la tabla "Proveedores".
14.2.4 Subconsultas
Las subconsultas (también conocidas como consultas internas o consultas anidadas) son una herramienta para realizar operaciones en múltiples pasos. En otras palabras, es una consulta dentro de otra consulta SQL. Una subconsulta se utiliza para devolver datos que se utilizarán en la consulta principal como una condición para restringir aún más los datos que se van a recuperar.
La subconsulta puede estar anidada dentro de una declaración SELECT, INSERT, UPDATE o DELETE o dentro de otra subconsulta. Una subconsulta se agrega generalmente en la Cláusula WHERE de la Declaración SQL.
Sintaxis:
SELECT column_name(s)
FROM table_name
WHERE column_name operator
(SELECT column_name(s)
FROM table_name
WHERE condition);
Por ejemplo, puedes encontrar los clientes que están ubicados en la misma ciudad que el proveedor 'Exotic Liquid' con la siguiente consulta:
SELECT CustomerName, ContactName, City
FROM Customers
WHERE City =
(SELECT City
FROM Suppliers
WHERE SupplierName = 'Exotic Liquid');
Esto devolverá todos los detalles de los clientes que están ubicados en la misma ciudad que 'Exotic Liquid'.
Las subconsultas pueden ser una herramienta poderosa en tu caja de herramientas de SQL, lo que te permite realizar consultas complejas de manera paso a paso, haciendo que tus consultas sean más legibles y más fáciles de depurar.
En la próxima sección, exploraremos las funciones de agregación en SQL.
14.2 Uniendo Múltiples Tablas
En SQL, las cláusulas JOIN
se utilizan para combinar filas de dos o más tablas en función de una columna relacionada entre ellas. Hay varios tipos de JOIN disponibles en SQL:
- JOIN (INTERNO): Devuelve registros que tienen valores coincidentes en ambas tablas.
- LEFT JOIN (OUTER): Devuelve todos los registros de la tabla izquierda y los registros coincidentes de la tabla derecha.
- RIGHT JOIN (OUTER): Devuelve todos los registros de la tabla derecha y los registros coincidentes de la tabla izquierda.
- FULL JOIN (OUTER): Devuelve todos los registros cuando hay una coincidencia en cualquiera de las tablas izquierda o derecha.
Palabra clave INNER JOIN
La palabra clave INNER JOIN se utiliza para combinar datos de dos tablas diferentes utilizando una columna común. Esto es particularmente útil cuando queremos recuperar datos que existen en ambas tablas. Al usar la palabra clave INNER JOIN, podemos asegurarnos de que solo se devuelvan los registros con valores coincidentes en ambas tablas.
Esto puede ayudarnos a comprender mejor las relaciones entre diferentes piezas de datos y a obtener ideas que de otro modo no habríamos podido ver. Además, la palabra clave INNER JOIN es solo uno de los muchos tipos diferentes de joins que podemos usar para combinar datos de múltiples tablas. Otros tipos de joins incluyen LEFT JOIN, RIGHT JOIN y FULL OUTER JOIN, cada uno de los cuales tiene sus propiedades y casos de uso únicos.
Al comprender los diferentes tipos de joins que están disponibles para nosotros, podemos asegurarnos de estar utilizando la herramienta adecuada para el trabajo y obteniendo el máximo provecho de nuestros datos.
Sintaxis:
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
Ejemplo:
Supongamos que tenemos dos tablas, Orders
y Customers
, con la siguiente estructura:
Orders:
OrderID | CustomerID | OrderAmount
--------|------------|------------
1 | 1 | 100
2 | 2 | 200
3 | 5 | 300
4 | 3 | 400
Clientes:
CustomerID | Name | Country
-----------|-------|---------
1 | Alex | USA
2 | Bob | UK
3 | Chris | France
4 | Dave | Canada
Un INNER JOIN selecciona todas las filas de ambas tablas siempre y cuando haya una coincidencia entre las columnas. Si hay registros en la tabla "Orders" que no tienen entradas coincidentes en la tabla "Customers", esos registros se omitirán del resultado.
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderAmount
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
Resultado:
OrderID | CustomerName | OrderAmount
--------|--------------|------------
1 | Alex | 100
2 | Bob | 200
3 | Chris | 400
14.2.1 LEFT JOIN y RIGHT JOIN
Palabra clave LEFT JOIN
La palabra clave LEFT JOIN es un tipo de join que recupera filas de la tabla izquierda (tabla1) y las filas coincidentes de la tabla derecha (tabla2). Esto significa que si no hay una coincidencia en la tabla derecha, el valor resultante será NULL.
Es importante tener en cuenta que LEFT JOIN es diferente de INNER JOIN, ya que este último solo devuelve filas que tienen datos coincidentes en ambas tablas. LEFT JOIN, por otro lado, seguirá mostrando todas las filas de la tabla izquierda incluso si no hay datos correspondientes en la tabla derecha.
Esto puede ser útil cuando se trabaja con datos que tienen valores faltantes o cuando se desea ver todos los datos de una tabla independientemente de si hay datos coincidentes en la otra tabla. Además, LEFT JOIN se puede combinar con otras declaraciones SQL como WHERE, ORDER BY y GROUP BY para refinar aún más los resultados y obtener la salida deseada.
Sintaxis:
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
Ejemplo:
SELECT Customers.CustomerName, Orders.OrderAmount
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
Resultado:
CustomerName | OrderAmount
-------------|------------
Alex | 100
Bob | 200
Chris | 400
Dave | NULL
Como puedes ver, la palabra clave LEFT JOIN devuelve todos los registros de la tabla izquierda (Clientes) y los registros coincidentes de la tabla derecha (Pedidos). El resultado es NULL en el lado derecho cuando no hay coincidencias.
Palabra clave RIGHT JOIN
La palabra clave RIGHT JOIN se utiliza para combinar datos de dos tablas, tabla1 y tabla2. Este tipo de unión devuelve todas las filas de la tabla2 y las filas coincidentes de la tabla1. Si no hay coincidencia de la tabla1, el resultado será NULL en el lado izquierdo. El RIGHT JOIN se usa a menudo cuando se desea incluir todos los datos de la tabla2 y solo los datos coincidentes de la tabla1.
Por ejemplo, supongamos que tienes dos tablas: una que contiene información sobre empleados (tabla1) y otra que contiene información sobre departamentos (tabla2). Quieres mostrar una lista de todos los departamentos, incluso si no hay empleados en algunos de ellos. El RIGHT JOIN se puede utilizar para obtener todos los departamentos de la tabla2 y solo los datos coincidentes de la tabla1 (los empleados que pertenecen a cada departamento).
Vale la pena señalar que RIGHT JOIN no es un tipo de unión comúnmente utilizado. En la mayoría de los casos, se utiliza LEFT JOIN en su lugar. Sin embargo, hay algunas situaciones en las que RIGHT JOIN puede ser útil, como cuando necesitas mostrar todos los datos de la segunda tabla y solo los datos coincidentes de la primera tabla.
Sintaxis:
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;
Ejemplo:
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderAmount
FROM Orders
RIGHT JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
Resultado:
OrderID | CustomerName | OrderAmount
--------|--------------|------------
1 | Alex | 100
2 | Bob | 200
4 | Chris | 400
NULL | Dave | NULL
14.2.2 UNIÓN COMPLETA (FULL OUTER JOIN)
Cuando se usan SQL para unir tablas, la palabra clave FULL OUTER JOIN puede ser una herramienta útil. Esta palabra clave devuelve todos los registros en ambas tablas izquierda (tabla1) y derecha (tabla2), incluso si no hay coincidencia entre ellos.
Esto significa que incluso si un registro en una tabla no tiene una coincidencia correspondiente en la otra tabla, aún se incluirá en el conjunto de resultados. La palabra clave FULL OUTER JOIN es especialmente útil cuando deseas asegurarte de que todos los datos de ambas tablas estén incluidos en los resultados de la consulta, independientemente de si hay una coincidencia o no.
Al usar esta palabra clave, puedes evitar el riesgo de perder información importante que pueda estar presente en una tabla pero no en la otra.
Sintaxis:
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name = table2.column_name;
Ejemplo:
SELECT Customers.CustomerName, Orders.OrderAmount
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
Resultado:
CustomerName | OrderAmount
-------------|------------
Alex | 100
Bob | 200
Chris | 400
Dave | NULL
Eve | 500
En este ejemplo, la palabra clave FULL OUTER JOIN devuelve todos los registros cuando hay una coincidencia en cualquiera de los registros de la tabla izquierda (Clientes) o derecha (Pedidos). Combina los resultados de ambas uniones externas izquierda y derecha y devuelve todos los registros (coincidentes o no coincidentes).
Ten en cuenta que no todos los sistemas de bases de datos admiten la palabra clave FULL OUTER JOIN. Por ejemplo, MySQL no admite FULL OUTER JOIN, pero puedes lograr el mismo resultado combinando LEFT JOIN y UNION.
14.2.3 UNIÓN y UNION ALL
El operador UNION se utiliza para combinar el conjunto de resultados de dos o más declaraciones SELECT. Cada declaración SELECT dentro de la UNIÓN debe tener el mismo número de columnas, las columnas también deben tener tipos de datos similares y deben estar en el mismo orden.
El operador UNION selecciona solo valores distintos de forma predeterminada. Para permitir valores duplicados, utiliza UNION ALL.
Sintaxis:
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
Para permitir valores duplicados:
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
Ejemplo:
SELECT city FROM Customers
UNION
SELECT city FROM Suppliers
ORDER BY city;
Esta declaración SQL devolvería todas las ciudades distintas de la tabla "Clientes" y la tabla "Proveedores".
Ejemplo con UNION ALL:
SELECT city FROM Customers
UNION ALL
SELECT city FROM Suppliers
ORDER BY city;
Esta declaración SQL devolvería todas las ciudades (también duplicadas) de la tabla "Clientes" y la tabla "Proveedores".
14.2.4 Subconsultas
Las subconsultas (también conocidas como consultas internas o consultas anidadas) son una herramienta para realizar operaciones en múltiples pasos. En otras palabras, es una consulta dentro de otra consulta SQL. Una subconsulta se utiliza para devolver datos que se utilizarán en la consulta principal como una condición para restringir aún más los datos que se van a recuperar.
La subconsulta puede estar anidada dentro de una declaración SELECT, INSERT, UPDATE o DELETE o dentro de otra subconsulta. Una subconsulta se agrega generalmente en la Cláusula WHERE de la Declaración SQL.
Sintaxis:
SELECT column_name(s)
FROM table_name
WHERE column_name operator
(SELECT column_name(s)
FROM table_name
WHERE condition);
Por ejemplo, puedes encontrar los clientes que están ubicados en la misma ciudad que el proveedor 'Exotic Liquid' con la siguiente consulta:
SELECT CustomerName, ContactName, City
FROM Customers
WHERE City =
(SELECT City
FROM Suppliers
WHERE SupplierName = 'Exotic Liquid');
Esto devolverá todos los detalles de los clientes que están ubicados en la misma ciudad que 'Exotic Liquid'.
Las subconsultas pueden ser una herramienta poderosa en tu caja de herramientas de SQL, lo que te permite realizar consultas complejas de manera paso a paso, haciendo que tus consultas sean más legibles y más fáciles de depurar.
En la próxima sección, exploraremos las funciones de agregación en SQL.