Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: criskapunk en 14 Junio 2011, 17:02 pm



Título: Duda T-Sql
Publicado por: criskapunk en 14 Junio 2011, 17:02 pm
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
  1. 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
  1. SELECT DISTINCT usuario.nombre, edades.edad FROM usuario, edades WHERE edades.edad = 20

Del libro que estoy leyendo saque lo siguiente:

Código
  1. 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


Título: Re: Duda T-Sql
Publicado por: Novlucker en 15 Junio 2011, 02:55 am
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


Título: Re: Duda T-Sql
Publicado por: criskapunk en 15 Junio 2011, 14:59 pm
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
  1. 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


Título: Re: Duda T-Sql
Publicado por: Novlucker en 16 Junio 2011, 06:29 am
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