elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  Duda T-Sql
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda T-Sql  (Leído 2,408 veces)
criskapunk

Desconectado Desconectado

Mensajes: 277



Ver Perfil
Duda T-Sql
« 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


En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: Duda T-Sql
« Respuesta #1 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


En línea

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

Desconectado Desconectado

Mensajes: 277



Ver Perfil
Re: Duda T-Sql
« Respuesta #2 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
En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: Duda T-Sql
« Respuesta #3 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
En línea

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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pequeña duda con un comando batch (NUEVA DUDA RELACIONADA)
Scripting
revenge1252 9 9,738 Último mensaje 13 Febrero 2008, 21:41 pm
por revenge1252
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines