Diferencia entre UNION y UNION ALL

19/04/2008 - 01:11 por Viviana Johnson | Informe spam
Hola grupo. Haber si alguien me puede sacar de la ignorancia en la que he
vivido desde que aprendi SQL. Yo siempre había usado para unir tablas en los
view UNION sin el ALL, pero en estos días estaba haciendo un view donde ocupe
el UNION (sin ALL) y me di cuenta que si no le incluyo el ALL no me incluye
el total de registros de las dos tablas que trato de unir, ¿Alguien sabe que
criterio ocupa SQL para no incluir todos los registros de ambas tablas cuando
se unen mediante UNION sin el ALL?

Saludos y gracias de antemando

Vivis :-)

Preguntas similare

Leer las respuestas

#1 Carlos M. Calvelo
19/04/2008 - 01:22 | Informe spam
On 19 apr, 01:11, Viviana Johnson
wrote:
Hola grupo. Haber si alguien me puede sacar de la ignorancia en la que he
vivido desde que aprendi SQL. Yo siempre había usado para unir tablas en los
view UNION sin el ALL, pero en estos días estaba haciendo un view donde ocupe
el UNION (sin ALL) y me di cuenta que si no le incluyo el ALL no me incluye
el total de registros de las dos tablas que trato de unir, ¿Alguien sabe que
criterio ocupa SQL para no incluir todos los registros de ambas tablas cuando
se unen mediante UNION sin el ALL?

Saludos y gracias de antemando

Vivis :-)



Hola Vivis,

En el resultado de UNION los registros repetidos
desaparecen y con el UNION ALL no.


La unión como esta defida para conjuntos:

{a, b, c} UNION {c, d, e} es {a, b, c, d, e}


Con el union all:

{a, b, c} UNION ALL {c, d, e} es {a, b, c, c, d, e}

Lo importarte aquí es darse cuenta que el resultado
del UNION ALL no es un conjunto.

Saludos,
Carlos
Respuesta Responder a este mensaje
#2 Viviana Johnson
19/04/2008 - 19:49 | Informe spam
¿Pero a que nivel de campos es que hace la comparación para eliminar los
registros repetidos, a nivel de los campos que utilizo en el SELECT ó a nivel
de todos los campos que comprende el registro?


Viviana
Respuesta Responder a este mensaje
#3 Maxi Accotto
19/04/2008 - 21:00 | Informe spam
Viviana, en principio te recomendaria empezar a estudiar un poco ANSI y
sentencias basicas de SQL ya que ahi estan bien explicadas las diferencias.

Aca te paso un ejemplo para que puedas ver el funcionamiento y aclarar
alguna duda que te haya quedado

CREATE TABLE #TEST (ID INT , VALOR INT)
GO

INSERT INTO #TEST VALUES (1,100)
INSERT INTO #TEST VALUES (1,100)
INSERT INTO #TEST VALUES (1,200)


SELECT * FROM #TEST
UNION
SELECT * FROM #TEST

SELECT * FROM #TEST
UNION ALL
SELECT * FROM #TEST



Microsoft MVP SQLServer
www.sqltotalconsulting.com
-

"Viviana Johnson" escribió en el
mensaje de noticias:
¿Pero a que nivel de campos es que hace la comparación para eliminar los
registros repetidos, a nivel de los campos que utilizo en el SELECT ó a
nivel
de todos los campos que comprende el registro?


Viviana
Respuesta Responder a este mensaje
#4 Carlos M. Calvelo
19/04/2008 - 21:12 | Informe spam
Hola Viviana,

On 19 apr, 19:49, Viviana Johnson
wrote:
¿Pero a que nivel de campos es que hace la comparación para eliminar los
registros repetidos, a nivel de los campos que utilizo en el SELECT ó a nivel
de todos los campos que comprende el registro?




Las columnas que utilizas en los selects de la unión determinan lo
que es un registro en 'el resultado' de la unión. Piensa que este
resultado también es una tabla; una tabla derivada, eso si, pero una
tabla. Registros repetidos *en este resultado* son los se eliminan.

Si ese no es el efecto deseado quizás tendrías que añadir alguna(s)
columna(s) más a los selects en la unión de tal manera que no sea
lógicamente posible que aparezcan repetidos en el resultado. Para
así poder diferenciar entre registros que de otra forma hubieran
sido totalmente iguales.

Saludos,
Carlos
Respuesta Responder a este mensaje
#5 Viviana Johnson
22/04/2008 - 04:19 | Informe spam
Gracias Carlos, mis dudas han quedado resultas :-)
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida