sql >> Base de Datos >  >> RDS >> Database

Cómo combinar los resultados de dos consultas en SQL

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

Nota:

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.