Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
5 ideas (más) interesantes de Swift sacadas de otros lenguajes | GAMBADAS: Pantallas de error con un
poco de carácter (2)
En un anterior post sobre fundamentos de SQL vimos lo básico de crear consultas con la
instrucción SELECT. A continuación vamos a complicar un poco la cosa aprendiendo a
realizar consultas en varias tablas de la base de datos al mismo tiempo.
Es habitual que queramos acceder a datos que se encuentran en más de una tabla y mostrar
información mezclada de todas ellas como resultado de una consulta. Para ello tendremos
que hacer combinaciones de columnas de tablas diferentes.
En SQL es posible hacer esto especi cando más de una tabla en la cláusula FROM de la
instrucción SELECT.
https://www.campusmvp.es/recursos/post/Fundamentos-de-SQL-Consultas-SELECT-multi-tabla-JOIN.aspx 1/10
6/4/2018 Fundamentos de SQL: Consultas SELECT multi-tabla - JOIN
Este último punto es muy importante, ya que si seleccionamos varias tablas y no hacemos
coincidir los valores de las columnas relacionadas, obtendremos una gran duplicidad de las,
realizándose el producto cartesiano entre las las de las diferentes tablas
seleccionadas.
Vamos a ver este importante detalle con un ejemplo simple. Consideremos estas tres
consultas sobre la base de datos Northwind:
La primera instrucción devuelve 91 las (los 91 clientes), la segunda 830 las (los pedidos), y
la tercera 75.530 (que son 830 x 91, es decir, la combinación de todas las las de clientes y
de pedidos).
La otra manera de mostrar información de varias tablas -mucho más habitual y lógica- es
uniendo las de ambas, para ello es necesario que las columnas que se van a unir entre las
dos tablas sean las mismas y contengan los mismos tipos de datos, es decir, mediante una
clave externa.
https://www.campusmvp.es/recursos/post/Fundamentos-de-SQL-Consultas-SELECT-multi-tabla-JOIN.aspx 2/10
6/4/2018 Fundamentos de SQL: Consultas SELECT multi-tabla - JOIN
Las tablas relacionadas se especi can en la cláusula FROM, y además hay que hacer
coincidir los valores que relacionan las columnas de las tablas.
Veamos un ejemplo, que selecciona el número de venta, el código y nombre del cliente y la
fecha de venta en la base de datos Northwind:
Para evitar que se produzca como resultado el producto cartesiano entre las dos tablas,
expresamos el vínculo que se establece entre las dos tablas en la cláusula WHERE. En este
caso relacionamos ambas tablas mediante el identi cador del cliente, clave existente en
ambas. Fíjate en como le hemos otorgado un alias a cada tabla (C y O respectivamente) para
no tener que escribir su nombre completo cada vez que necesitamos usarlas.
Hay que tener en cuenta que si el nombre de una columna existe en más de una de las
tablas indicadas en la cláusula FROM, hay que poner, obligatoriamente, el nombre o
alias de la tabla de la que queremos obtener dicho valor. En caso contrario nos dará un
error de ejecución, indicando que hay un nombre ambiguo.
Hay otra forma adicional, que es más explícita y clara a la hora de realizar este tipo de
combinaciones -y que se incorpora a partir de ANSI SQL-92- que permite utilizar una nueva
cláusula llamada JOIN en la cláusula FROM, cuya sintaxis es el siguiente:En el caso del
ejemplo anterior quedaría de la siguiente forma:
https://www.campusmvp.es/recursos/post/Fundamentos-de-SQL-Consultas-SELECT-multi-tabla-JOIN.aspx 3/10
6/4/2018 Fundamentos de SQL: Consultas SELECT multi-tabla - JOIN
El segundo formato permite distinguir las condiciones que utilizamos para combinar las
tablas y evitar el producto cartesiano, de las condiciones de ltro que tengamos que
establecer.
Veamos un ejemplo como el anterior, pero ahora además necesitamos que el cliente sea de
España o el vendedor sea el número 5.
Es decir, estamos mezclando en el WHERE las uniones de tablas, y las condiciones concretas
de ltro de la consulta, quedando todo mucho más liado.
Sin embargo usando el segundo formato con JOIN, la consulta es mucho más clara:
https://www.campusmvp.es/recursos/post/Fundamentos-de-SQL-Consultas-SELECT-multi-tabla-JOIN.aspx 4/10
6/4/2018 Fundamentos de SQL: Consultas SELECT multi-tabla - JOIN
También podemos utilizar una misma tabla con dos alias diferentes para distinguirlas.
Veamos un ejemplo, supongamos que tenemos una columna sueldo en la tabla de
empleados, y queremos saber los empleados que tienen un sueldo superior al del
empleado 5:
SELECT E1.EmployeeID
FROM Employees E1 JOIN Employees E2 ON E1.Sueldo > E2.Sueldo
WHERE E2.EmployeeID = 5
Con esto hemos aprendido lo básico de trabajar con varias tablas y generar combinaciones
de datos entre éstas.
En un próximo artículo aprenderemos a ver los otros dos tipos de combinaciones que
existen: las combinaciones internas y las externas, así como las combinaciones de
conjuntos de resultados (uniones, intersecciones, etc...).
https://www.campusmvp.es/recursos/post/Fundamentos-de-SQL-Consultas-SELECT-multi-tabla-JOIN.aspx 5/10
6/4/2018 Fundamentos de SQL: Consultas SELECT multi-tabla - JOIN
Publicaciones relacionadas
Comentarios (17) -
Jesus
17/11/2014 15:19:32
Por favor, me gustaría saber como hacer un 'SELECT *' que incluye varias tablas. Existen un mismo
nombre de campo por ejemplo 'codigo' que se encuentra en todas las tablas (No es el 'id'). Pero
cuando ejecuto el query, este campo asume el mismo valor del último registro. Me gustaría que al
hacer el query, cada nombre de campo apareciera con el nombre de la tabla incluido para que se
diferenciaran entre si. Por ejemplo: Antes: codigo=>101, codigo=101.
Después: tabla1.codigo=101, tabla2.codigo=202. Gracias.
campusMVP
02/04/2015 14:59:56
Hola Fabián:
promos.campusmvp.com/.../?cmvpad=SQL-Post05
En el que se explican todos los fundamentos de consultas con SQL y que seguro que te ayuda
https://www.campusmvp.es/recursos/post/Fundamentos-de-SQL-Consultas-SELECT-multi-tabla-JOIN.aspx 6/10
6/4/2018 Fundamentos de SQL: Consultas SELECT multi-tabla - JOIN
Saludos.
Juan Bolivar
15/10/2015 18:00:55
Sugieron que le pongas un alias a cada uno de los atributos que quieres diferenciar. Te lo
resumo en una sentencia:
SELECT Tabla1.codigo AS [Nombre del alias], Tabla2.codigo AS [Nombre del alias] FROM Tabla1,
Tabla2
podrias ponerle un alias a cada uno de los atributos que quieres diferenciar. por ejemplo
SELECT Tabla1.codigo AS [Nombre del alias], Tabla2.codigo AS [Nombre del alias] FROM Tabla1,
Tabla2, no se si es esa la respuesta que buscas
Ivan
29/04/2016 4:54:13
De donde sale el igual? o mas bien como se diria para una expocision que de donde saldria el igual?
Emiliano
02/08/2016 16:05:34
Hola. Muy bueno el manual. Quise poner en práctica lo del último ejemplo, uso SQLServer2014, y no
funciona. Pone que EmployeesID, el que está seguido del SELECT, es un nombre de columna
ambiguo, por lo cual no se ejecuta. ¿Por qué?
Por otro lado no entiendo si el 'JOIN' y 'ON' son los mismo que 'WHERE' y '='. Siendo así por qué
habría de usar JOIN. Eso es lo que no me queda claro, no hay una explicación del por qué usar JOIN,
sino que dice que queda más claro. Gracias. Saludos!
El JOIN es mas claro porque separa las clausulas de UNION de TABLAS de las de ltro de datos.
Antes de SQL-92, todo se ponia en el WHERE, lo cual se entendía bien, pero tenias que tener
cuidado con tantos parentesis.
con la revision SQL-92 en el WHERE solo van los ltros de datos, mientras que para la union de
tablas se usa el JOIN y el ON.
Emiliano
02/08/2016 16:33:48
Hola de nuevo. Acabo de modi car y colocando SELECT E1.EmpleyeeID funciona. Pero sigo sin
entender en qué cambia de usar WHERE a JOIN mas que la simpli cación y comprensión de la
query. Gracias. Saludos.
https://www.campusmvp.es/recursos/post/Fundamentos-de-SQL-Consultas-SELECT-multi-tabla-JOIN.aspx 7/10
6/4/2018 Fundamentos de SQL: Consultas SELECT multi-tabla - JOIN
campusMVP
03/08/2016 9:05:59
Hola Emiliano:
Efectivamente le faltaba indicar con mayor precisión en el "SELECT" el campo exacto que
quieres traer ya que el procesador de SQL no sabe que estás cruzando la tabla consigo misma y
por lo tanto ve dos campos en los resultados con el mismo nombre (EmployeeID) y no sabe a
cuál de los dos te re eres. En este caso son idénticos, así que basta con poner delante el
nombre de la tabla "E1.EmployeeID" o "E2.EmployeeID" valdrían.
Saludos.
javier
27/09/2016 2:33:42
hola, muy bueno el tutorial, estoy realizando unas pruebas con multiples tablas, son 7 y tengo
algunos problemas, quisiera saber si podia contar con tu ayuda para resolverlo, como podria
pasarte las tablas y sus estructuras. Gracias.
Jose Luis
07/11/2016 3:08:25
Saben de algún query para contar el numero total de tablas no relacionadas y las que están libres
de una BD?
diego
22/11/2016 13:21:58
me gusta el pico
Joe
23/07/2017 10:48:38
https://www.campusmvp.es/recursos/post/Fundamentos-de-SQL-Consultas-SELECT-multi-tabla-JOIN.aspx 8/10
6/4/2018 Fundamentos de SQL: Consultas SELECT multi-tabla - JOIN
HOLA, QUISIERA SABER COMO PODRÍA CONSOLIDAR VARIAS TABLAS EN UNA YA QUE ACTUALMENTE
NO HE PODIDO. LAS TABLAS ESTAN CON NOMBRE POR AÑO Y MES (FROM p_recepcion201307 luego
sigue la p_recepcion201308, p_recepcion201309.....hasta p_recepcion201707) y aun no he podido
juntar la informacion de estas tablas en una sola, por favor apoyenme.
MARTIN GUTIERREZ
28/08/2017 20:25:42
Hola Joe, se sobreentiende que las tablas p_recepcionYYYYMM son tablas historicas y que
tienen la misma estructura todas las tablas con los mismos campos.
Solo debes hacer un UNION al SELECT que ya pusiste para una tabla.
Por ejemplo, si quieres unir 5 tablas de 5 meses, haces
SELECT .... FROM p_recepcion201307 UNION
SELECT .... FROM p_recepcion201308 UNION
SELECT .... FROM p_recepcion201309 UNION
SELECT .... FROM p_recepcion201310 UNION
SELECT .... FROM p_recepcion201311
junior
14/02/2018 15:38:56
hola necesito ayuda para una busqueda explico tengo un formulario con un boton buscar y cuadro
de texto. quiero que me muestre al hacer la busqueda por Usuario los datos de ese usuario.
esta es mi tabla:
codigo
usuario
nombre
apellido
departamento
sucursal
windows
licencia
descripcion
Alex Vargas
14/02/2018 15:51:36
https://www.campusmvp.es/recursos/post/Fundamentos-de-SQL-Consultas-SELECT-multi-tabla-JOIN.aspx 10/10