0% encontró este documento útil (0 votos)
15 vistas7 páginas

12 SQL Server - Union

Cargado por

tellov29
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
15 vistas7 páginas

12 SQL Server - Union

Cargado por

tellov29
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

SQL UNION

Concatena los resultados de dos consultas en un único conjunto de resultados. Puede controlar si en el
conjunto de resultados se incluyen filas duplicadas:

 UNION ALL: incluye duplicados.


 UNION: se excluyen los duplicados.

Una operación de UNION es distinta de una operación de JOIN :

 Una operación de UNION concatena conjuntos de resultados de dos consultas. Pero una operación
de UNION no crea filas individuales de columnas obtenidas de dos tablas.
 Una operación de JOIN compara las columnas de dos tablas para crear filas de resultados
compuestas de columnas de las dos tablas.

A continuación, se muestran las reglas básicas para combinar los conjuntos de resultados de dos consultas
con UNION:

 El número y el orden de las columnas debe ser el mismo en todas las consultas.
 Los tipos de datos deben ser compatibles.

OPERADORES
Hay cuatro operadores básicos de conjuntos en SQL Server:

 UNION
 UNION ALL
 EXCEPT
 INTERSECT

SINTAXIS:
La sintaxis para los operadores UNION vs UNION ALL en SQL es la siguiente:

SELECT Column1, Column2, … ColumnN


FROM <table>
[WHERE conditions]
[GROUP BY Column(s]]
[HAVING condition(s)]
UNION
SELECT Column1, Column2, … ColumnN
FROM table
[WHERE condition(s)];
ORDER BY Column1,Column2…

REGLAS:
Hay algunas reglas que se aplican a todos los operadores establecidos:

1. Las expresiones en cada fila o el número de columnas que se definen en cada consulta deben tener
el mismo orden
2. Los conjuntos de filas de instrucciones SQL posteriores deben coincidir con el tipo de datos de la
primera consulta
3. Los paréntesis pueden construir otros operadores de conjuntos en la misma instrucción.
4. Es posible tener una cláusula ORDER BY, pero esa debería ser la última instrucción del SQL
5. Las cláusulas GROUP BY y HAVING se pueden aplicar a la consulta individual

NOTA:
1. Todos estos operadores Set eliminan duplicados, excepto el operador Union All
2. Los nombres de las columnas de salida se refieren desde la primera consulta, es decir, cuando
ejecutamos las instrucciones SELECT con cualquiera de los operadores Set y el conjunto de
resultados de cada una de las consultas puede tener diferentes nombres de columna, por lo que el

1
resultado de la instrucción SELECT hace referencia a los nombres de columna ejecutada en la
primera consulta en dicha operación.
3. Es importante mencionar que SQL JOIN se usa con mayor frecuencia para combinar columnas de
varias tablas relacionadas, mientras que los operadores SET combinan filas de varias tablas.
4. Cuando los tipos de expresión son iguales, pero difieren en precisión, escala o longitud, el resultado
que se obtiene y se determina se logra en base a las mismas reglas para combinar expresiones

UNIÓN
El operador de Unión combina los resultados de dos o más consultas dando lugar a la creación de un único
conjunto de resultados que incluye todas las filas que pertenecen a todas las consultas en la Unión. En esta
operación, combina dos consultas más y elimina los duplicados.

SELECT columna1, columna2, … FROM tabla1


UNION
SELECT columna1, columna2, … FROM tabla2;

Por ejemplo, la tabla ‘A’ tiene 1,2 y 3 y la tabla ‘B’ tiene 3,4,5. Entonces la UNION, es:

(
SELECT 1 ID
UNION
SELECT 2
UNION
SELECT 3
)
UNION
(
SELECT 3
UNION
SELECT 4
UNION
SELECT 5
);

En la salida de datos, puede ver una lista distinta de los registros de los dos conjuntos de resultados

UNION TOTAL (UNION ALL)


El operador UNION combina los resultados de dos o más consultas en un único conjunto de resultados los
mismos que incluyen todas las filas que pertenecen a todas las consultas en la Unión. En términos simples,
combina los dos o más conjuntos de filas y mantiene los duplicados.

SELECT columna1, columna2, … FROM tabla1


UNION ALL
SELECT columna1, columna2, … FROM tabla2;
Por ejemplo, la tabla ‘A’ tiene 1,2 y 3 y la tabla ‘B’ tiene 3,4,5. El equivalente SQL de los datos anteriores se
proporciona a continuación
2
(
SELECT 1 ID
UNION
SELECT 2
UNION
SELECT 3
)
UNION ALL
(
SELECT 3
UNION
SELECT 4
UNION
SELECT 5
);

En la salida, puede ver todas las filas que también incluyen registros repetidos.

Conclusión:

INTERSECT
El operador intersect mantiene las filas que son comunes a todas las consultas.
La representación SQL de las tablas anteriores.

(
SELECT 1 ID
UNION
SELECT 2
UNION
SELECT 3
)
INTERSECT
3
(
SELECT 3
UNION
SELECT 4
UNION
SELECT 5
);

La fila ‘3’ es común entre los dos conjuntos de resultados.

EXCEPT O EXCLUSIÓN
El operador EXCEPT enumera las filas en el primero que no están en el segundo.
La representación SQL de las tablas anteriores con el operador EXCEPT se proporciona a continuación

(
SELECT 1 [Non-Common from only A ]
UNION
SELECT 2
UNION
SELECT 3
)
EXCEPT
(
SELECT 3 B
UNION
SELECT 4
UNION
SELECT 5
);

Enumere las filas no comunes del primer conjunto o grupo de datos.

NOTA: Es muy fácil visualizar un operador de conjunto utilizando para tal fin un diagrama de Venn, donde
cada una de las tablas está representada por formas que se cruzan. Las intersecciones de las formas,
donde se superponen las tablas, son las filas donde se cumple una condición.

RESUMEN
Use UNION ALL si sabe que los conjuntos de resultados de múltiples consultas no se superponen o también
los mismos generan duplicados y adicionalmente recuerde que, si necesita usar paréntesis, puede hacerlo.
También puede pivotar y transformar la salida.

Sin embargo, usted solo debe asegurarse de que sus tipos de datos coincidan y si necesita hacer un
ORDER BY, hágalo al final después de que haya ejecutado todas esas consultas establecidas. Por
naturaleza, cuando se trata de Union vs Union All. UNION ALL es más rápido que Union; ya que los
operadores de la Unión incurren en mayores gastos generales adicionales para eliminar duplicados.

4
PROBLEMAS RESUELTOS
PROB 01:
Un supermercado almacena en una tabla denominada "proveedores" los datos de las compañías que le
proveen de mercaderías; en una tabla llamada "clientes", los datos de los comercios que le compran y
en otra tabla "empleados" los datos de los empleados.

1- Elimine las tablas si existen:


if object_id('clientes') is not null
drop table clientes;
if object_id('proveedores') is not null
drop table proveedores;
if object_id('empleados') is not null
drop table empleados;
if object_id('pasajeros') is not null
drop table pasajeros;

2- Cree las tablas:


create table proveedores(
codigo int identity,
nombre varchar (30),
domicilio varchar(30),
primary key(codigo)
);
create table clientes(
codigo int identity,
nombre varchar (30),
domicilio varchar(30),
primary key(codigo)
);
create table empleados(
documento char(8) not null,
nombre varchar(20),
apellidos varchar(20),
domicilio varchar(30),
cuenta INT
primary key(documento)
);

3- Ingrese algunos registros:


insert into proveedores values('Bebida cola','Colon 123');
insert into proveedores values('Carnes Unica','Caseros 222');
insert into proveedores values('Lacteos Blanca','San Martin 987');
insert into clientes values('Supermercado Lopez','Avellaneda 34');
insert into clientes values('Almacen Anita','Colon 987');
insert into clientes values('Garcia Juan','Sucre 345');
insert into empleados values('23333333','Federico','Lopez','Colon 987');
insert into empleados values('28888888','Ana','Marquez','Sucre 333');
insert into empleados values('30111111','Luis','Perez','Caseros 956');

4- El supermercado quiere enviar una tarjeta de salutación a todos los proveedores, clientes y
empleados y necesita el nombre y domicilio de todos ellos. Emplee el operador "union" para obtener
dicha información de las tres tablas.

5- Agregue una columna con un literal para indicar si es un proveedor, un cliente o un empleado y
ordene por dicha columna.

PROB 02
5
El operador "union" combina el resultado de dos o más instrucciones "select" en un único resultado.

Se usa cuando los datos que se quieren obtener pertenecen a distintas tablas y no se puede acceder a ellos
con una sola consulta.

Es necesario que las tablas referenciadas tengan tipos de datos similares, la misma cantidad de campos y
el mismo orden de campos en la lista de selección de cada consulta. No se incluyen las filas duplicadas en
el resultado, a menos que coloque la opción "all".

Se deben especificar los nombres de los campos en la primera instrucción "select".

Puede emplear la cláusula "order by".

Puede dividir una consulta compleja en varias consultas "select" y luego emplear el operador "union" para
combinarlas.

Una academia de enseñanza almacena los datos de los alumnos en una tabla llamada "alumnos" y los
datos de los profesores en otra denominada "profesores".
La academia necesita el nombre y domicilio de profesores y alumnos para enviarles una tarjeta de
invitación.

Para obtener los datos necesarios de ambas tablas en una sola consulta necesitamos realizar una unión:

select nombre, domicilio from alumnos


union
select nombre, domicilio from profesores;

El primer "select" devuelve el nombre y domicilio de todos los alumnos; el segundo, el nombre y domicilio de
todos los profesores.

Los encabezados del resultado de una unión son los que se especifican en el primer "select".

Servidor de SQL Server instalado en forma local.


Ingresemos el siguiente lote de comandos en el SQL Server Management Studio:

if object_id('alumnos') is not null


drop table alumnos;
if object_id('profesores') is not null
drop table profesores;

create table profesores(


documento varchar(8) not null,
nombre varchar (30),
domicilio varchar(30),
primary key(documento)
);
create table alumnos(
documento varchar(8) not null,
nombre varchar (30),
domicilio varchar(30),
primary key(documento)
);

go

insert into alumnos values('30000000','Juan Perez','Colon 123');


insert into alumnos values('30111111','Marta Morales','Caseros 222');
insert into alumnos values('30222222','Laura Torres','San Martin 987');
insert into alumnos values('30333333','Mariano Juarez','Avellaneda 34');
insert into alumnos values('23333333','Federico Lopez','Colon 987');
insert into profesores values('22222222','Susana Molina','Sucre 345');

6
insert into profesores values('23333333','Federico Lopez','Colon 987');

-- Nombre y domicilio de profesores y alumnos


select nombre, domicilio from alumnos
union
select nombre, domicilio from profesores;

-- Mostrar las filas duplicadas de ambas tablas


-- (existe un profesor que también está presente en la tabla "alumnos")
select nombre, domicilio from alumnos
union all
select nombre, domicilio from profesores;

-- Ordenamos por domicilio:


select nombre, domicilio from alumnos
union
select nombre, domicilio from profesores
order by domicilio;

-- agregar una columna extra a la consulta con el encabezado "condicion"


-- en la que aparezca el literal "profesor" o "alumno" según si la persona
-- es uno u otro:

select nombre, domicilio, 'alumno' as condicion from alumnos


union
select nombre, domicilio,'profesor' from profesores
order by condicion;

Tenemos como resultado:

SQL Server Management Studio union

También podría gustarte