Duda T-Sql

Iniciado por criskapunk, 14 Junio 2011, 17:02 PM

0 Miembros y 1 Visitante están viendo este tema.

criskapunk

Buenas chicos,

Estoy haciendo unas practicas con sql server y me surgio una duda.

Tengo dos tablas, la primera llamada usuario con dos campos (id_nombre y nombre) y la segunda llamada edades con campos id_nombre y edad.

Quiero hacer una consulta usando ambas tablas, de manera que me devuelva el nombre y edad de las personas cuya edad sea igual a 20.

Tengo los siguientes codigos:

Código (sql) [Seleccionar]
select usuario.nombre, edades.edad from usuario, edades where edades.edad = 20

Ese me devuelve TODOS los registros (con el campo edad con valor 20, aunque en la tabla original no fuese asi) y me repite todos los registros 3 veces. Podrian explicarme por que hace eso?

Si utilizo el siguiente codigo me da el mismo resultado que el anterior, solo que no lo repite:

Código (sql) [Seleccionar]
select distinct usuario.nombre, edades.edad from usuario, edades where edades.edad = 20

Del libro que estoy leyendo saque lo siguiente:

Código (sql) [Seleccionar]
select usuario.nombre, edades.edad from usuario, edades where edades.edad = 20 and usuario.id_nombre = edades.id_nombre

Podrian explicarme cual es la funcion de la condicion que viene despues del and? Y por que no es necesario el distinct?

Un saludo y gracias! :D

Novlucker

Te voy a dar la respuesta a medias, pero la solución la encuentras googleando :P
El por que se repiten es dado que estas obteniendo el producto cartesiano de las tablas

A tu segunda pregunta, el AND en segunda instancia (que esta relacionado con tu primera pregunta) es para establecer el campo que relaciona ambas tablas, sino debes de pensar que SQL no sabe por donde relacionarlas :)

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

criskapunk

Muchas gracias Novlucker por tu respuesta.

Estuve googleando bastante tiempo antes de preguntar, pero como recien empiezo con esto de las bases de datos todavia me cuesta entender un poco :P

Me quedaron dos dudas nomas.

Código (sql) [Seleccionar]
SELECT DISTINCT usuario.nombre, edades.edad FROM usuario, edades WHERE edades.edad = 20

Por que si hago eso me devuelve los registros, pero con valor 20 TODOS?

Y por que en la ultima consulta (La que devuelve los valores correctos), no es necesario usar la instruccion distinct?

Un saludo y gracias :D

Novlucker

Por lo que te he puesto primero de todo, por el producto cartesiano. Si no estableces cual es el punto en el que las tablas deben de juntarse, el motor de base de datos no puede adivinar, y en su lugar junta todas con todas.

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein