Subconsultas any - some - all

09/10/2009 - 17:44 por Julio Glez | Informe spam
Buenos días,

No entiendo al 100% las subconsultas ANY(SOME) y ALL. Alguien me podría dar
un ejemplo sencillo ya que donde he buscado no son muy claros.

Muchas gracias.

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
09/10/2009 - 19:06 | Informe spam
Julio,

ANY / SOME - algun
ALL - todos

declare @t1 table (c1 int);
declare @t2 table (c1 int);

insert into @t1 values(1);
insert into @t1 values(2);

insert into @t2 values(2);
insert into @t2 values(3);

select *
from @t1
where c1 = any (select c1 from @t2);

select *
from @t1 as T1
where exists (select T2.c1 from @t2 as T2 where T2.c1 = T1.c1);

select *
from @t1
where c1 = all (select c1 from @t2);

select *
from @t1 as T1
where not exists (select T2.c1 from @t2 as T2 where T2.c1 <> T1.c1);
GO


AMB


"Julio Glez" wrote:

Buenos das,

No entiendo al 100% las subconsultas ANY(SOME) y ALL. Alguien me podra dar
un ejemplo sencillo ya que donde he buscado no son muy claros.

Muchas gracias.

Respuesta Responder a este mensaje
#2 Julio Glez
10/10/2009 - 00:07 | Informe spam
Ok, me queda claro, ahora si hago esto porque no me regresa ningún valor ??

si tengo las mismas tablas y estos datos,

insert into @t1 values(1);
insert into @t1 values(2);
insert into @t1 values(2);
insert into @t1 values(3);

insert into @t2 values(1);
insert into @t2 values(2);
insert into @t2 values(2);
insert into @t2 values(2);

y hago esta consulta

select *
from @t1
where c1 > any (select c1 from @t2);

porque me regresa

c1
2
2
3


"Alejandro Mesa" escribió en el
mensaje de noticias:
Julio,

ANY / SOME - algun
ALL - todos

declare @t1 table (c1 int);
declare @t2 table (c1 int);

insert into @t1 values(1);
insert into @t1 values(2);

insert into @t2 values(2);
insert into @t2 values(3);

select *
from @t1
where c1 = any (select c1 from @t2);

select *
from @t1 as T1
where exists (select T2.c1 from @t2 as T2 where T2.c1 = T1.c1);

@t2
select *
from @t1
where c1 = all (select c1 from @t2);

select *
from @t1 as T1
where not exists (select T2.c1 from @t2 as T2 where T2.c1 <> T1.c1);
GO


AMB


"Julio Glez" wrote:

Buenos das,

No entiendo al 100% las subconsultas ANY(SOME) y ALL. Alguien me podra
dar
un ejemplo sencillo ya que donde he buscado no son muy claros.

Muchas gracias.

Respuesta Responder a este mensaje
#3 Julio Glez
10/10/2009 - 00:18 | Informe spam
Ok, después de hacer ejemplo en base al tuyo, creo entender que regresa 2 y
3 porque el 2 es mayor a cualquier registro de la tabla T2 que en este caso
el valor T1.c1(2) > a cualquier registro de T2.c1(1), así mismo me regresa 3
porque T1.c1(3) > a cualquier registro de T2.c1(2)

Si estoy mal agradecería que me corrigieras por favor.

Saludos.

"Julio Glez" escribió en el mensaje de
noticias:
Ok, me queda claro, ahora si hago esto porque no me regresa ningún valor
??

si tengo las mismas tablas y estos datos,

insert into @t1 values(1);
insert into @t1 values(2);
insert into @t1 values(2);
insert into @t1 values(3);

insert into @t2 values(1);
insert into @t2 values(2);
insert into @t2 values(2);
insert into @t2 values(2);

y hago esta consulta

select *
from @t1
where c1 > any (select c1 from @t2);

porque me regresa

c1
2
2
3


"Alejandro Mesa" escribió en el
mensaje de noticias:
Julio,

ANY / SOME - algun
ALL - todos

declare @t1 table (c1 int);
declare @t2 table (c1 int);

insert into @t1 values(1);
insert into @t1 values(2);

insert into @t2 values(2);
insert into @t2 values(3);

select *
from @t1
where c1 = any (select c1 from @t2);

select *
from @t1 as T1
where exists (select T2.c1 from @t2 as T2 where T2.c1 = T1.c1);

@t2
select *
from @t1
where c1 = all (select c1 from @t2);

select *
from @t1 as T1
where not exists (select T2.c1 from @t2 as T2 where T2.c1 <> T1.c1);
GO


AMB


"Julio Glez" wrote:

Buenos das,

No entiendo al 100% las subconsultas ANY(SOME) y ALL. Alguien me podra
dar
un ejemplo sencillo ya que donde he buscado no son muy claros.

Muchas gracias.

Respuesta Responder a este mensaje
#4 Carlos M. Calvelo
10/10/2009 - 00:28 | Informe spam
Hola Julio,

On Fri, 9 Oct 2009 16:07:32 -0600, Julio Glez wrote:

Ok, me queda claro, ahora si hago esto porque no me regresa ningún valor ??




No se entiende esto. Como que no te devuelve ningún valor?


si tengo las mismas tablas y estos datos,

insert into @t1 values(1);
insert into @t1 values(2);
insert into @t1 values(2);
insert into @t1 values(3);

insert into @t2 values(1);
insert into @t2 values(2);
insert into @t2 values(2);
insert into @t2 values(2);

y hago esta consulta

select *
from @t1
where c1 > any (select c1 from @t2);

porque me regresa

c1
2
2
3




Si traducimos la consulta a lenguaje natural estás pidiendo todos los
registros en @t1 para los que c1 es mayor que al menos uno de los valores
de c1 en @t2. Eso se cumple para todos los registros en @t1 menos el que
tiene un 1 en la columna c1.

Dicho de otra forma, la consulta dice: Dame todos los valores en @t1 que
son mayores que 1.

Saludos,
Carlos
Respuesta Responder a este mensaje
#5 Carlos M. Calvelo
10/10/2009 - 00:44 | Informe spam
Hola Julio,

On Fri, 9 Oct 2009 16:18:06 -0600, Julio Glez wrote:

Ok, después de hacer ejemplo en base al tuyo, creo entender que regresa 2 y
3 porque el 2 es mayor a cualquier registro de la tabla T2 que en este caso
el valor T1.c1(2) > a cualquier registro de T2.c1(1), así mismo me regresa 3
porque T1.c1(3) > a cualquier registro de T2.c1(2)

Si estoy mal agradecería que me corrigieras por favor.



Vas bien!
A mi me parece mas expresivo el decir 'mayor que al menos un' que decir
'cualquier'

Utilizando tu notación:

T1.c1(2) > T2.c1(1)
T1.c1(3) > T2.c1(1) y T1.c1(3) > T2.c1(2)

Pero para T1.c1(1) no se encuentran registros en T2 para los que
T1.c1(1) > T2.c1(c1)

Saludos,
Carlos
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida