Problema:
Le gustaría mostrar datos de columnas dadas (de un tipo de datos similar) de dos tablas en SQL.
Ejemplo:
Hay dos tablas en nuestra base de datos:employee
y customer
.
El employee
la tabla contiene datos en las siguientes columnas:id , primer_nombre , apellido y edad .
id | nombre | apellido | edad |
---|---|---|---|
1 | Tom | Molinero | 22 |
2 | Juan | Smith | 26 |
3 | Lisa | Williams | 30 |
4 | Carlos | Davis | 21 |
5 | James | Moore | 22 |
El customer
la tabla contiene datos en las siguientes columnas:id , primer_nombre , apellido y edad .
id | nombre | apellido | edad |
---|---|---|---|
1 | Milán | Smith | 45 |
2 | Carlos | Davis | 21 |
3 | Marcar | Patrocinador | 19 |
En un conjunto de resultados, mostremos el nombre, el apellido y la edad de todas las personas en la base de datos, tanto empleados como clientes.
Solución 1:
Usaremos UNION ALL
para unir datos de columnas en dos tablas.
Esta es la consulta que escribirías:
SELECT first_name, last_name, age FROM employee UNION ALL SELECT first_name, last_name, age FROM customer;
Aquí está el resultado:
nombre | apellido | edad |
---|---|---|
Tom | Molinero | 22 |
Juan | Smith | 26 |
Lisa | Williams | 30 |
Carlos | Davis | 21 |
James | Moore | 28 |
Milán | Smith | 45 |
Carlos | Davis | 21 |
Marcar | Patrocinador | 19 |
Discusión:
Utilice la cláusula UNION ALL para unir datos de columnas en dos o más tablas. En nuestro ejemplo, unimos datos del employee
y customer
mesas. A la izquierda de la palabra clave UNION ALL, coloque la primera instrucción SELECT para obtener datos de la primera tabla (en nuestro ejemplo, la tabla employee
). A la derecha, use otra instrucción SELECT para obtener datos de la segunda tabla (en nuestro ejemplo, customer
).
Recuerde que los datos seleccionados en ambas tablas deben ser del mismo tipo de datos en cada columna. Por ejemplo, si la primera columna del primer SELECT es un tipo de datos de cadena, la primera columna del segundo SELECT también debe ser un tipo de datos de cadena. Si la segunda columna de la primera sentencia SELECT es un número entero, la segunda columna de la segunda tabla también debe ser de tipo entero.
En la primera consulta, seleccionamos edad (la edad del empleado, que es un tipo de dato entero) para la tercera columna. Por lo tanto, la tercera columna del segundo SELECT también es un valor entero; es la edad del cliente.
Las segundas columnas en ambas declaraciones SELECT son del mismo tipo de datos. Sin embargo, si los valores son los mismos en ambas tablas, se mostrarán varias veces; por ejemplo, 'Charles Davis 21' se muestra dos veces en el conjunto de resultados.
¿Qué sucede si no desea múltiples registros idénticos en la tabla de resultados? En este caso, use UNION
. Es similar a UNION ALL
, pero elimina los registros duplicados. Mira el siguiente ejemplo.
Solución 2:
Aquí está la consulta que evita registros duplicados:
SELECT first_name, last_name FROM employee UNION SELECT first_name, last_name FROM customer;
Este es el resultado de la consulta anterior:
nombre | apellido |
---|---|
Marcar | Patrocinador |
James | Moore |
Juan | Smith |
Carlos | Davis |
Milán | Smith |
Tomás | Molinero |
Lisa | Williams |
UNION ALL
es más rápido que UNION
, pero UNION
elimina las filas duplicadas. La elección depende de los datos de resultado que necesitemos.