Anda di halaman 1dari 4

Uniones con tres tablas

Ejemplos demostrativos

a)

1. select *
2. from pedidos inner join clientes on
pedidos.id_cliente=clientes.id_cliente
3. inner join clientes_sr on pedidos.id_cliente=clientes_sr.id_cliente
4. where realizado='1'
5. group by pedidos.id_pedido
6. order by fecha, hora;

b)

1. (SELECT *
2. FROM pedidos P1 INNER JOIN clientes C
3. ON P1.id_cliente = C.id_cliente
4. WHERE realizado = '1'
5. GROUP BY P1.id_pedido)
6.
7. UNION
8.
9. (SELECT *
10. FROM pedidos P2 INNER JOIN clientes_sr CS
11. ON P2.id_cliente = CS.id_cliente
12. WHERE realizado = '1'
13. GROUP BY P2.id_pedido)
14. ORDER BY fecha, hora;

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.


Consulta SQL a ms de dos tablas con
JOIN
Por Inyaka el 30 de Agosto de 2009 con 279,651 visitas

PHP, MySQL y Servidor Otros tutoriales por Inyaka.

Aprende ms all de este tutorial en los Cursos de Bases de Datos de Platzi.

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:

Anda mungkin juga menyukai