Consultas de Unión Internas

Las vinculaciones entre tablas se realizan mediante la cláusula INNER que combina registros de dos tablas siempre que haya concordancia de valores en un campo común.

9. Consultas de Unión Internas

Las vinculaciones entre tablas se realizan mediante la cláusula INNER que combina registros de dos tablas siempre
que haya concordancia de valores en un campo común. Su sintaxis es:

SELECT campos FROM tb1 INNER JOIN tb2
ON tb1.campo1 comp tb2.campo2

En donde:

tb1, tb2:
Son los nombres de las tablas desde las que se combinan los registros.

campo1,
campo2
: Son los nombres de los campos que se combinan. Si no
son numéricos, los campos deben ser del mismo tipo de datos y contener
el mismo tipo de datos, pero no tienen que tener el mismo nombre.

comp: Es
cualquier operador de comparación relacional
: =, <, >, <=, >=, o <>.

Se puede utilizar una operación INNER JOIN en cualquier cláusula FROM. Esto crea una combinación
por equivalencia, conocida también como unión interna. Las combinaciones
Equi son las más comunes; éstas combinan los registros de dos
tablas siempre que haya concordancia de valores en un campo común a ambas
tablas. Se puede utilizar INNER JOIN
con las tablas Departamentos y Empleados para seleccionar todos los
empleados de cada departamento. Por el contrario, para seleccionar todos los
departamentos (incluso si alguno de ellos no tiene ningún empleado asignado)
se emplea LEFT JOIN o todos los
empleados (incluso si alguno no está asignado
a ningún departamento), en este caso RIGHT
JOIN
.

Si se intenta combinar campos que contengan
datos Memo u Objeto OLE, se produce
un error. Se pueden combinar dos campos numéricos cualesquiera, incluso
si son de diferente tipo de datos. Por ejemplo, puede combinar un campo Numérico
para el que la propiedad Size
de su objeto Field está establecida como Entero, y un campo Contador.

El ejemplo siguiente muestra cómo
podría combinar las tablas Categorías y Productos basándose
en el campo IDCategoria:

SELECT Nombre_Categoría, NombreProducto
FROM Categorias INNER JOIN Productos
ON Categorias.IDCategoria = Productos.IDCategoria;

En el ejemplo anterior, IDCategoria es el campo combinado, pero no está incluido en la salida de la consulta
ya que no está incluido en la instrucción SELECT.
Para incluir el campo combinado, incluir el nombre del campo en la instrucción SELECT, en este caso, Categorias.IDCategoria.

También se pueden enlazar varias
cláusulas ON en una instrucción JOIN, utilizando la sintaxis
siguiente:

SELECT campos
FROM tabla1 INNER JOIN tabla2
ON tb1.campo1 comp tb2.campo1 AND
ON tb1.campo2 comp tb2.campo2) OR
ON tb1.campo3 comp tb2.campo3)];

También puede anidar instrucciones
JOIN utilizando la siguiente sintaxis:

SELECT campos
FROM tb1 INNER JOIN
(tb2 INNER JOIN [( ]tb3
[INNER JOIN [( ]tablax [INNER JOIN ...)]
ON tb3.campo3 comp tbx.campox)]
ON tb2.campo2 comp tb3.campo3)
ON tb1.campo1 comp tb2.campo2;

Un LEFT
JOIN
o un RIGHT JOIN
puede anidarse dentro de un INNER JOIN,
pero un INNER JOIN no puede anidarse
dentro de un LEFT JOIN o un RIGHT
JOIN
.

Ejemplo:

SELECT DISTINCTROW Sum([Precio unidad]
* [Cantidad]) AS [Ventas],
[Nombre] & " " & [Apellidos] AS [Nombre completo] FROM
[Detalles de pedidos],
Pedidos, Empleados, Pedidos INNER JOIN [Detalles de pedidos] ON Pedidos.
[ID de pedido] = [Detalles de pedidos].[ID de pedido], Empleados INNER JOIN
Pedidos ON Empleados.[ID de empleado] = Pedidos.[ID de empleado] GROUP BY
[Nombre] & " " & [Apellidos];

Crea dos combinaciones equivalentes: una
entre las tablas Detalles de pedidos y Pedidos, y la otra
entre las tablas Pedidos y Empleados. Esto es necesario ya que la tabla
Empleados no contiene datos de ventas y la tabla Detalles
de pedidos no contiene datos de los empleados. La consulta produce una lista
de empleados y sus ventas totales.

Si empleamos la cláusula INNER en la consulta se seleccionarán sólo aquellos registros de la
tabla de la que hayamos escrito a la izquierda de INNER
JOIN
que contengan al menos un registro de la tabla que hayamos
escrito a la derecha. Para solucionar esto tenemos dos cláusulas que
sustituyen a la palabra clave INNER,
estas cláusulas son LEFT y
RIGHT. LEFT toma todos los registros de la tabla de la izquierda aunque no tengan ningún
registro en la tabla de la izquierda. RIGHT realiza la misma operación pero al contrario, toma todos los registros
de la tabla de la derecha aunque no tenga ningún registro en la tabla
de la izquierda.

Siguiente capítulo: Consultas
de Unión Externas

banner

  1. Introducción
  2. Consultas
    de Selección
  3. Criterios
    de Selección
  4. Agrupamiento
    de Registros y Funciones Agregadas
  5. Consultas
    de Actualización
  6. Tipos
    de Datos
  7. SubConsultas
  8. Consultas
    y Referencias Cruzadas
  9. Consultas
    de Unión Interna
  10. Consultas
    de Unión Externas
  11. Estructuras
    de las Tablas
  12. Consultas
    con Parámetros
  13. Acceso
    a las Bases de Datos Externas
  14. Omitir los permisos de ejecución
  15. La
    Cláusula Procedure
  16. Anexos
Claudio Casares
Redactor del tutorial de SQL
angelo bertolotti
19/12/2006

:D

BRENDA
22/01/2007

Gracias por la imformacion, sabes recien estoy utilizando y me parece sencillo, lo que aun no encuento como relacionar 2 tablas de una misma base de datos

angelestradamx
20/02/2007

:)

Luis Dominguez
5/09/2007

esta excelente la pagina, no habia encontrado otra pagina mas completa que esta .

atte. Luis

Rocio Paulina
20/09/2007

No encontre toda la informacion que deseaba, pero lo que encontre esta muy bien explicado con los ejemplos. Y a los que se creen muy fregones que hagan su propio tutorial y haber que opinamos. Que no?!

Macr
26/09/2007

Excelente informacion, me ha servido aunque no encontre o explican como buscar registros que NO estan dentro de otra tabla, al comparar. Gracias

cesar
19/02/2008

eselent pagina encontre todo lo que buscaba menos un ejemplo de una tabla en donde aplique una consulta d seleccion con sus clausulas gracias………

esto no sirve de nada…. pero gracias

OLGA ESPINOZA
31/05/2009

la información es muy buena y me fue muy util, muchas gracias por compartirla.

Krlos
5/08/2009

La verdad que no entendi nada. Seria mucho mejor que publicaran una ejemplo atraves de un demo tomando al base de datos Neptuno.
gracias y saludos

gracias por el manual jojo

Hola, muchas gracias por el manual, tengo una consulta espero me la puedan contestar:

Estoy trabajando en VB6 con bases de datos en access conexion mediante ADODC, y lo que quiero es mostrar en un datagrid los registros de una tabla1 que no estan en otra tabla2, en otras palabras hacer una diferencia de tablas, pero ya he probado de todo, con la sentencia MINUS, EXCEPT con INNER Join, con todo y ya no se que mas hacer, de repente esta mal mi sintaxis no lo sé, porfavor ayuda!!!
Ah, no quiero hacerlo con Bucles recorriendo todo el Recordset pq mi BD tiene mas 14000 registros lo cual me pondria bien lento el programa por eso supuse mejor hacerlo por SQL.

Osea en una tabla tengo todos los productos (tabla1), en la otra tengo los productos que voy leyendo (con una lectora de codigos de barras) (tabla2), voy leyendo con la lectora y se copian a esa tabla, ahora lo que quiero es que en un datagrid, me aparezcan los productos que me faltan aun no se han leido, me explico bien? ojala que si.

Ya tengo toda la estructura solo me falta la consulta SQL para ponerla en el recordset del Dgrid.

De antemano muchas gracias.

Nancy
29/03/2010

gracias esta bien la informacion (*)

Carlos Baeza
31/03/2010

muy buen aporte, es muy bueno los ejemplos, me han servido muchisimo lo recomiendo.

255