SELECT DISTINCT tabla1.campo1, tabla2.campo2 as nuevonombre, tabla3.campo3 FROM tabla1, tabla2, tabla3 WHERE tabla1.campo1=tabla3.campo1 ORDER BY tabla2.campo2
Muchas veces necesitamos seleccionar información de diversas tablas para poder trabajar, pero como nos gusta ahorrar código pasamos de hacer varias querys, si podemos utilizar sólo una.
En el ejemplo de arriba muestro cómo utilizar un select de distintas tablas. Cosas a tener en cuenta:
- Siempre tenemos que indicar antes del nombre del campo, el nombre de la tabla en la que se encuentra, separados por un punto. Ejemplo: tabla1.campo1
- En el FROM deberán estar todas las tablas utilizadas.
- Podemos asignar campos que no tengamos seleccionados para mostrar en el WHERE.
- También podemos ordenar por campos de diversas tablas.
- DISTINCT elimina las filas duplicadas, se puede dar el caso al trabajar con varias tablas.
- Si tenemos nombres de campos iguales en diferentes tablas, podemos cambiarles el nombre asignarle un nombre más corto para utilizarlas en nuestra query (no se cambiará en la bbdd) utilizando as. Ejemplo: tabla2.campo2 as nuevonombre
Advierto: Trabajar con muchas tablas y campos en la misma query puede causar problemas de cordura
Actualizado 08/01/2009: Mirar los comentarios! Hay más información útil!
Twittea esto Guardalo en Delicious Compartelo en Facebook








enero 7th, 2010 at 17:40 pm
Y para facilitarnos (o complicarnos
) más la vida, se pueden modificar los nombres de las tablas, para hacer las sentencias más cortas.
Me explico, en vez de tener que poner en el select el nombre de la tabla antes del campo (SELECT tabla1.campo, tabla2.otrocampo), podemos acortarlo en el FROM, cuando seleccionamos las tablas de las que recogeremos los datos.
Y para no liarlo más, pongo el mismo ejemplo que el post, pero reducido
SELECT DISTINCT t1.campo1, t2.campo2 as nuevonombre, t3.campo3
FROM tabla1 t1, tabla2 t2, tabla3 t3
WHERE t1.campo1=t3.campo1
ORDER BY t2.campo2
Así mejor, ¿no?
enero 7th, 2010 at 17:43 pm
Hola Alwaison!
¿Dices que se pueden renombrar las tablas al añadirlas al FROM?
¡Genial! Muchas gracias por el dato, no lo sabía!
enero 7th, 2010 at 18:58 pm
Pues si, se pueden renombrar las tablas en el FROM
Otra cosa, cuando dices: Siempre tenemos que indicar antes del nombre del campo, el nombre de la tabla en la que se encuentra, separados por un punto.
Eso no es del todo cierto… si los nombres de los campos no coinciden, no es necesario indicar el nombre de la tabla, aunque para una mejor comprension del la sentecia, yo siempre los pongo, eso si, acortados como te decia antes….
Aunque quizas, si solo estamos trabajando con una tabla, tampoco es necesario. Eso ya queda al gusto del consumidor
enero 7th, 2010 at 19:03 pm
Cuento con que trabajamos con varias tablas, por eso indico lo de poner el nombre de la correspondiente a cada campo antes, una forma de no liarnos
enero 7th, 2010 at 20:31 pm
Yo me aclaro mejor cuando renombro los campos como
t1.campo1 as nombre
sinó termino por liarme.
La consulta sería equivalente a algo así?
SELECT DISTINCT t1.campo1, t2.campo2 as nuevonombre
FROM tabla1 as t1 join tabla2 as t2 on
t1.campo1 = t2.campo1
ORDER BY t2.campo2
Yo es que en el SQL ando un poco pez
enero 8th, 2010 at 10:01 am
Y no solo podemos utilizar la sentencia AS en los nombres de los campos, sino también en los nombres de las tablas. Esto es algo que nos viene igualmente muy bien si el nombre de la tabla es muy largo y/o lioso.
@Alwaison y @José Rico ya lo han tratado muy bien en el primer caso, pero el segundo no difiere mucho:
SELECT a.nombre, b.direccion
FROM nombre_largo_tabla_1 AS a, nombre_largo_tabla_2 AS b
WHERE a.id=b.id
ORDER BY a.id
Y además, si unimos los dos casos nos quedaría:
SELECT a.nombre AS name, b.direccion AS address
FROM nombre_largo_tabla_1 AS a, nombre_largo_tabla_2 AS b
WHERE a.id=b.id
ORDER BY a.id
enero 8th, 2010 at 10:06 am
Sois unos cracks chicos, yo creo que con el comentario de Santi hemos terminado de resolver nuestras dudas ¡Gracias!
enero 18th, 2010 at 10:36 am
Vale, ahora lo mismo pero con distintas BBDD.
Saludos!
febrero 8th, 2010 at 21:10 pm
Saludos.
Le comento que existe un error de concepto. No estas cambiando el nombre a ningun campo, solo se esta otorgando un nombre o identificación diferente a nivel de la vista resultante de vuestra consulta.
Darle un nuevo nombre a una columna de datos solo seria valido si estuvieramos creando una consulta para la creación y alimentación (con data existente en otras tablas) de una nueva tabla.
Saludos a todos! esta muy buena la pagina.
junio 14th, 2010 at 11:03 am
Buenas, en primer lugar enhorabuena por estos post que son muy buenos, en segundo lugar os expongo un problemilla que tengo, estoy haciendo una consulta en access y cuando genero la sentencia sql:
“SELECT TABLA_AL.ID, TABLA_AL.NOM_FICH, TABLA_AL.FEC_FIC, TABLA_AL.PROVCORTA, TABLA_AL.NIE, TABLA_AL.CIF, TABLA_AL.NIF, TABLA_CA.ID, TABLA_CA.NOM_FICH, TABLA_CA.FEC_FIC, TABLA_CA.PROVCORTA, TABLA_CA.NIE, TABLA_CA.CIF, TABLA_CA.NIF, TABLA_CO.ID, TABLA_CO.NOM_FICH, TABLA_CO.FEC_FIC, TABLA_CO.PROVCORTA, TABLA_CO.NIE, TABLA_CO.CIF, TABLA_CO.NIF, TABLA_GRA.ID, TABLA_GRA.NOM_FICH, TABLA_GRA.FEC_FIC, TABLA_GRA.PROVCORTA, TABLA_GRA.NIE, TABLA_GRA.CIF, TABLA_GRA.NIF, TABLA_HU.ID, TABLA_HU.NOM_FICH, TABLA_HU.FEC_FIC, TABLA_HU.PROVCORTA, TABLA_HU.NIE, TABLA_HU.CIF, TABLA_HU.NIF, TABLA_JA.ID, TABLA_JA.NOM_FICH, TABLA_JA.FEC_FIC, TABLA_JA.PROVCORTA, TABLA_JA.NIE, TABLA_JA.CIF, TABLA_JA.NIF, TABLA_MA.ID, TABLA_MA.NOM_FICH, TABLA_MA.FEC_FIC, TABLA_MA.PROVCORTA, TABLA_MA.NIE, TABLA_MA.CIF, TABLA_MA.NIF, TABLA_SE.ID, TABLA_SE.NOM_FICH, TABLA_SE.FEC_FIC, TABLA_SE.PROVCORTA, TABLA_SE.NIE, TABLA_SE.CIF, TABLA_SE.NIF
FROM TABLA_AL, TABLA_CA, TABLA_CO, TABLA_GRA, TABLA_HU, TABLA_JA, TABLA_MA, TABLA_SE ”
No me muestra los datos de las tablas, son 8 tablas, una por cada provincia de andalucía, y sólo quiero que me muestre 7 campos, los mismos 7 campos de cada una de las tablas. ¿Saben que estoy haciendo mal?
Gracias por adelantado..
junio 16th, 2010 at 21:30 pm
Hola chicos!
Leonardo gracias por la aclaración, ya está rectificado en el post, si que es verdad que daba a entender que cambiaría el nombre en la base de datos.
Joaquin, esos campos son los únicos de las tablas? puedes ahorrar código escribiendo * en lugar de los nombres de las tablas para indicar que seleccionas todos los campos. En principio veo la estructura bien, lo que no entiendo es por qué haces una query para 7 tablas juntas cuando no relacionas ningún campo, no podrías hacerlas por separado? No soy muy experta, pero puede que sea por eso por lo que falle, yo de tí iría probando que funcionasen cada una por separado.
Un saludo!