Sie sind auf Seite 1von 9

El INNER JOIN

El INNER JOIN es otro tipo de composicin de tablas, permite emparejar filas de distintas
tablas de forma ms eficiente que con el producto cartesiano cuando una de las columnas
de emparejamiento est indexada. Ya que en vez de hacer el producto cartesiano completo y
luego seleccionar la filas que cumplen la condicin de emparejamiento, para cada fila de una
de las tablas busca directamente en la otra tabla las filas que cumplen la condicin, con lo
cual se emparejan slo las filas que luego aparecen en el resultado.

La sintaxis es la siguiente:

Ejemplo:
SELECT *
FROM pedidos INNER JOIN clientes ON pedidos.clie = clientes.numclie
tabla1 y tabla2 son especificaciones de tabla (nombre de tabla con alias o no, nombre de
consulta guardada), de las tablas cuyos registros se van a combinar.
Pueden ser las dos la misma tabla, en este caso es obligatorio definir al menos
un alias de tabla.
col1, col2 son las columnas de emparejamiento.
Observar que dentro de la clusula ON los nombres de columna deben ser nombres
cualificados (llevan delante el nombre de la tabla y un punto).
Las columnas de emparejamiento deben contener la misma clase de datos, las dos de
tipo texto, de tipo fecha etc... los campos numricos deben ser de tipos similares. Por ejemplo,
se puede combinar campos AutoNumrico y Long puesto que son tipos similares, sin embargo,
no se puede combinar campos de tipo Simple y Doble. Adems las columnas no pueden ser
de tipo Memo ni OLE.
comp representa cualquier operador de comparacin ( =, <, >, <=, >=, o <> ) y se utiliza
para establecer la condicin de emparejamiento.
Se
pueden
definir varias
operadores AND y OR poniendo

condiciones de
emparejamiento unidas por
los
cada
condicin
entre parntesis.
Ejemplo:

SELECT
*
FROM pedidos INNER JOIN productos ON (pedidos.fab = productos.idfab) AND
(pedidos.producto = productos.idproducto)
Se pueden combinar ms de dos tablas
En este caso hay que sustituir en la sintaxis una tabla por un INNER JOIN completo.
Por ejemplo:

SELECT *
FROM (pedidos INNER JOIN clientes ON pedidos.clie = clientes.numclie) INNER JOIN
empleados ON pedidos.rep = empleados.numemp
En vez de tabla1 hemos escrito un INNER JOIN completo, tambin podemos escribir:
SELECT *
FROM clientes INNER JOIN (pedidos INNER JOIN empleados ON pedidos.rep =
empleados.numemp) ON pedidos.clie = clientes.numclie
En este caso hemos sustituido tabla2 por un INNER JOIN completo.

Otro
SELECT *
FROM pedidos INNER JOIN clientes
ON pedidos.id_cliente = clientes.id_cliente
INNER JOIN clientes_sr
ON pedidos.id_cliente = clientes_sr.id_cliente
WHERE realizado = '1'
GROUP BY pedidos.id_pedido
ORDER BY fecha, hora;

Consulta SQL a ms de dos tablas con


JOIN
Por Inyaka el 30 de Agosto de 2009 con 147,624 visitas

PHP, MySQL y Servidor Otros tutoriales por Inyaka.

Muchas veces es necesario consultar a mas de una tabla y debemos aprender a


poder obtener los resultados correctos de la manera mas eficiente y sencilla, para
lo cual vamos a usar las siguientes tablas, sacadas de un sistema de gestin de
bodegas que estamos preparando para la logstica en islas claber

Tablas que usaremos


Usaremos 3 tablas en este ejemplo donde la tabla us2bod nos servir para
relacionar las tablas bodegas y usuarios varios a varios

Creando las consultas


Conozco 2 formas de usar JOIN deben existir otras mas pero hasta ahora con
estas me basta, uso INNER JOIN cuando quiero que solo lo resultados incluidos

en el JOIN aparezcan en los resultados y LEFT JOIN cuando quiero que todos los
resultados aparezcan independiente de si estn o no incluidos en el JOIN, ahora
vamos a hacernos algunas preguntas para poder poner en practica estos
conceptos.
Consejo importante :

El uso de * en el SELECT es muy practico a la hora de desarrollar una consulta, pero


es fatal para el rendimiento de esta cuando esta en produccin, por varios factores,
entre ellos que el resultado que arroja la consulta es mucho mas grande de lo que
realmente se necesita y que al no saber el nombre de los campos que usara, el motor
(mysql en mi caso) debe previamente consultar el nombre de todos los campos de la
tabla, en tablas grandes con mas de 60 campos esto es fatal, muy fatal
Atento a la forma abreviada de poner alias a las tablas

Consulta con uso de INNER JOIN:


Primero vamos a ver quien tiene acceso a que bodega con el uso de INNER JOIN
Cdigo :

SELECT
u.us_nombre usuario,
b.bod_nombre bodega
FROM us2bod ub
INNER JOIN usuarios u ON ub.us_id =

u.us_id

INNER JOIN bodegas b ON ub.bod_id =

b.bod_id

Esto dar como resultado

Consulta con uso de LEFT JOIN:


Ahora vamos a ver a los usuarios que NO tienen bodegas asociadas, para lo cual
preguntaremos que usuarios no se pudo asociar a alguna bodega
Cdigo :

SELECT
u.us_nombre usuario
FROM

usuarios u

LEFT JOIN us2bod ub ON u.us_id = ub.us_id


WHERE

ub.u2b_id IS NULL

Lo cual nos dar:

Espero que esto les sirva y les saque de mas un apuro (o lo metas en mas de uno
si van a la bodega que tengo en casa).
Cristalab y Mejorando.la te traen el Curso Profesional de Node.js y Javascript.
Online, avanzado, con diploma de certificacin y clases en vivo.
Envia un comentario (44)

MySQL 5.1, descarga MySQL, instala y crea una base de datos

Cmo hacer un login de usuarios en PHP

Calcular el tiempo de respuesta de una consulta SQL en PHP

Anterior
12

Por martina el 25 de Abril de 2012

jajajaja

Por Flowers el 26 de Julio de 2012

Gracias!! me sirvio .. saludos!!

Por Pako el 27 de Julio de 2012

Vaya por fin ayuda clara y sin tantos enrredos, me salvaste, muchas gracias

Por Ricardo el 30 de Agosto de 2012

Gran ayuda! Ni te imaginas cuanto, muchas gracias por compartir tus conocimientos y tan bien
explicado

Por jesus matos el 29 de Enero de 2013

excelente aporte por fin sin tantos enredos

Por oscarlosan el 21 de Marzo de 2013

si aadimos una tabla ms, por ejemplo idiomas, tendremos:


lo anterior:
---------------usuarios (id, )
bodegas(id, )
us2bod(id, idUsuario, idBodega).
ms 2 tablas(pq es una relacin n:m al igual que la anterior):
------------------------------------------------------------------idiomas(id,)
us2idi(id, idUsuario, iIdioma)
Los usuarios pueden hablar ms de un idioma y lgicamente un determinado idioma puede ser
hablado por varios usuarios.
Entonces sin necesitamos saber los usuario con sus bodegas e idiomas, habra que:
1) realizarlo en la misma consulta (1 consulta en total)
2) realizar otra consulta idntica a la anterior (es decir dos consultas en total)
que es ms productivo para una aplicacin en PHP? es decir con cual gano ms velocidad.
En el caso de que se pudiera hacer en una una sola consulta, como sera la consulta en SQL?

un saludo y gracias.

Das könnte Ihnen auch gefallen