Los datos expuestos en este blog, son solo de índole informativo. Por favor realiza siempre una copia de seguridad antes de realizar cualquier cambio en tu proyecto.
SQL: UNION ALL operador
Este tutorial de SQL explica cómo usar SQL UNION TODO operador Con sintaxis y ejemplos.
describir
El operador SQL UNION ALL se usa para combinar los conjuntos de resultados de 2 o más declaraciones SELECT. No elimina las filas duplicadas entre varias declaraciones SELECT (devuelve todas las filas).
Cada declaración SELECT en UNION ALL debe tener la misma cantidad de campos en un conjunto de resultados con tipos de datos similares.
¿Cuál es la diferencia entre UNION y UNION ALL?
- UNION elimina las filas duplicadas.
- UNIÓN TODOS puede No Eliminar líneas duplicadas.
sintaxis
La sintaxis del operador UNION ALL en SQL es:
SELECT expression1, expression2, ... expression_n FROM tables [WHERE conditions] UNION ALL SELECT expression1, expression2, ... expression_n FROM tables [WHERE conditions];
parámetro o parámetro
expresión1, expresión2, expresión_n La columna o el cálculo que desea recuperar. tabla La tabla de la que desea recuperar registros. Debe aparecer al menos una tabla en la cláusula FROM. La condición WHERE es opcional. Para seleccionar las condiciones que debe cumplir un registro.
notas
- Debe haber el mismo número de expresiones en ambas instrucciones SELECT
- Las expresiones correspondientes en la instrucción SELECT deben tener el mismo tipo de datos. Por ejemplo: expresión1 debe ser del mismo tipo de datos en la primera y segunda instrucción SELECT.
- Véase también operador UNION.
Ejemplo: un solo campo con el mismo nombre
Veamos cómo usar el operador SQL UNION ALL que devuelve un campo. En este ejemplo simple, los campos en las dos declaraciones SELECT tendrán el mismo nombre y tipo de datos.
Por ejemplo:
SELECT supplier_id FROM suppliers UNION ALL SELECT supplier_id FROM orders ORDER BY supplier_id;
Este ejemplo de SQL UNION ALL devolverá id_proveedor varias veces en el conjunto de resultados si aparece el mismo valor en las tablas de proveedores y pedidos. Operador SQL UNION ALL No Eliminar duplicados. Si desea eliminar duplicados, intente usar el operador UNION.
Ahora, exploremos este ejemplo más a fondo con algunos datos.
Si su tabla de proveedores se completa con los siguientes registros:
Identificación del proveedor | Nombre del proveedor |
---|---|
1000 | microsoft |
2000 | Oráculo |
3000 | manzana |
4000 | Samsung |
La tabla Pedidos se completa con los siguientes registros:
Solicitar ID | fecha de orden | Identificación del proveedor |
---|---|---|
1 | 2015-08-01 | 2000 |
2 | 2015-08-01 | 6000 |
3 | 2015-08-02 | 7000 |
4 | 2015-08-03 | 8000 |
y ejecutó la siguiente instrucción UNION ALL:
SELECT supplier_id FROM suppliers UNION ALL SELECT supplier_id FROM orders ORDER BY supplier_id;
Obtendrá los siguientes resultados:
Identificación del proveedor |
---|
1000 |
2000 |
2000 |
3000 |
4000 |
6000 |
7000 |
8000 |
Como puede ver en este ejemplo, UNION ALL tomó todos los valores de ID de proveedor de las tablas de proveedores y pedidos y devolvió un conjunto de resultados combinados. Como puede ver, el valor de ID de proveedor 2000 aparece dos veces en el conjunto de resultados sin eliminar ningún duplicado.
Ejemplo: diferentes nombres de campo
Las columnas correspondientes en cada declaración SELECT no tienen que tener el mismo nombre, pero deben ser del mismo tipo de datos correspondiente.
Se vuelve un poco complicado cuando no tiene los mismos nombres de columna entre las declaraciones SELECT, especialmente cuando desea usar la cláusula ORDER BY para ordenar los resultados de la consulta.
Veamos cómo usar el operador UNION ALL con diferentes nombres de columna y ordenar los resultados de la consulta.
Por ejemplo:
SELECT supplier_id, supplier_name FROM suppliers WHERE supplier_id > 2000 UNION ALL SELECT company_id, company_name FROM companies WHERE company_id > 1000 ORDER BY 1;
En este ejemplo de SQL UNION ALL, debido a que los nombres de columna son diferentes entre las dos declaraciones SELECT, es más ventajoso referirse a las columnas en la cláusula ORDER BY por su posición en el conjunto de resultados.En este ejemplo, hemos ordenado los resultados por ID de proveedor/ID de empresa en orden ascendente, como en ORDER BY 1
Los campos Supplier_id / company_id están en la posición 1 en el conjunto de resultados.
Ahora, exploremos más este ejemplo con los datos.
Si su tabla de proveedores se completa con los siguientes registros:
Identificación del proveedor | Nombre del proveedor |
---|---|
1000 | microsoft |
2000 | Oráculo |
3000 | manzana |
4000 | Samsung |
y llene la tabla de la compañía con los siguientes registros:
ID de la compañía | nombre de empresa |
---|---|
1000 | microsoft |
3000 | manzana |
7000 | sony |
8000 | IBM |
y ejecutó la siguiente instrucción UNION ALL:
SELECT supplier_id, supplier_name FROM suppliers WHERE supplier_id > 2000 UNION ALL SELECT company_id, company_name FROM companies WHERE company_id > 1000 ORDER BY 1;
Obtendrá los siguientes resultados:
Identificación del proveedor | Nombre del proveedor |
---|---|
3000 | manzana |
3000 | manzana |
4000 | Samsung |
7000 | sony |
8000 | IBM |
En primer lugar, observe que el registro con id_proveedor 3000 aparece dos veces en el conjunto de resultados porque la consulta UNION ALL devuelve todas las filas y no elimina los duplicados.
En segundo lugar, observe que los encabezados de las columnas en el conjunto de resultados se denominan id_proveedor y nombre_proveedor. Esto se debe a que estos son los nombres de columna utilizados en la primera instrucción SELECT en UNION ALL.
Si lo desea, puede crear un alias para las columnas de la siguiente manera:
SELECT supplier_id AS ID_Value, supplier_name AS Name_Value FROM suppliers WHERE supplier_id > 2000 UNION ALL SELECT company_id AS ID_Value, company_name AS Name_Value FROM companies WHERE company_id > 1000 ORDER BY 1;
Los encabezados de columna en el resultado ahora tendrán un alias para ID_Value de la primera columna y Name_Value de la segunda columna.
ID_Valor | nombre_valor |
---|---|
3000 | manzana |
3000 | manzana |
4000 | Samsung |
7000 | sony |
8000 | IBM |