Documente Academic
Documente Profesional
Documente Cultură
Produccin y Servicios
Escuela Profesional de
Ingeniera Industrial
Integrantes:
DOCENTE:
Ing. Edwin Estremadoyro
Arequipa Per
2017
NDICE
SQL - JOIN ................................................................................................................................................... 3
JOIN ............................................................................................................................................................ 4
LEFT JOIN .................................................................................................................................................... 5
RIGTH JOIN ................................................................................................................................................. 5
INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN ................................................................................. 7
Otros ejemplos ......................................................................................................................................... 10
SQL - JOIN
La sentencia SQL JOIN se utiliza para relacionar varias tablas, veremos algunos ejemplos
bsicos de distintos tipos de JOIN.
La sentencia JOIN (unir, combinar) de SQL permite combinar registros de una o ms tablas en
una base de datos relacional. En el Lenguaje de Consultas Estructurado (SQL) hay tres tipos
de JOIN: interno, externo y cruzado. El estndar ANSI del SQL especifica cinco tipos
de JOIN : INNER , LEFT OUTER , RIGHT OUTER , FULL OUTER y CROSS . Una tabla
Tabla clientes:
Tabla acciones:
Las dos tablas contienen el campo cid (client id) que es el que nos permitir realizar
coincidencias entre ambas tablas con join.
Hay clientes que no tienen acciones (jose) y otros que tienen ms de una especie (jesus).
El ltimo registro de la tabla acciones (aid=4) tiene un cid 5, si miramos la tabla cliente, no
existe un cliente con cid=5.
JOIN
El JOIN nos permitir obtener un listado de los campos que tienen coincidencias en ambas
tablas.
LEFT JOIN
La sentencia LEFT JOIN nos dar el resultado anterior mas los campos de la tabla clientes que
no tienen coincidencias.
Osea un listado de todos los clientes, con sus tenencias y en el caso que no tengan acciones
aparecer NULL (como es el caso de jose).
mysql> select nombre, telefono, accion, cantidad from clientes left join acciones on
clientes.cid=acciones.cid;
+--------+----------+--------+----------+
| nombre | telefono | accion | cantidad |
+--------+----------+--------+----------+
| jose | 111 | NULL | NULL |
| maria | 222 | REDHAT | 10 |
| manuel | 333 | NULL | NULL |
| jesus | 4444 | NOVELL | 20 |
| jesus | 4444 | SUN | 30 |
+--------+----------+--------+----------+
5 rows in set (0.00 sec)
RIGTH JOIN
La sentencia RIGHT JOIN combina los valores de la primera tabla con los valores de la
segunda tabla. Siempre devolver las filas de la segunda tabla, incluso aunque no cumplan la
condicin.
En algunas bases de datos, la sentencia RIGHT JOIN es igual a RIGHT OUTER JOIN
dep departamento
1 ADMINISTRACION
2 INFORMATICA
3 COMERCIAL
COMERCIAL
Aunque no exista ninguna persona del departamento 'COMERCIAL' (3), esta fila aparecer con
las otras columnas en blanco
Aqu se listarn todas las tenencias de acciones, tengan o no cliente, las que no tengan cliente se
vern como NULL (como es el caso de aid=4)
mysql> select nombre, telefono, accion, cantidad from clientes right join acciones on
clientes.cid=acciones.cid;
+--------+----------+--------+----------+
| nombre | telefono | accion | cantidad |
+--------+----------+--------+----------+
| maria | 222 | REDHAT | 10 |
| jesus | 4444 | NOVELL | 20 |
| jesus | 4444 | SUN | 30 |
| NULL | NULL | FORD | 100 |
+--------+----------+--------+----------+
4 rows in set (0.00 sec)
INNER JOIN
Con esta operacin cada registro en la tabla A es combinado con los correspondientes de la
tabla B que satisfagan las condiciones que se especifiquen en el predicado del JOIN. Cualquier
registro de la tabla A o de la tabla B que no tenga uno correspondiente en la otra tabla es
excluido, y solo aparecern los que tengan correspondencia en la otra tabla. Este es el tipo
de JOIN ms utilizado, por lo que es considerado el tipo de combinacin predeterminado.
Como ejemplo, la siguiente consulta toma todos los registros de la tabla Empleado y encuentra
todas las combinaciones en la tabla Departamento. La sentencia JOIN compara los valores en la
columna IDDepartamento en ambas tablas. Cuando no existe esta correspondencia entre
algunas combinaciones, estas no se muestran; es decir, que si el nmero de departamento de un
empleado no coincide con los nmeros de departamento de la tabla Departamento, no se
mostrar el empleado con su respectivo departamento en la tabla resultante.
Las dos consultas siguientes son similares y se realizan de manera explcita (A) e implcita (B).
SELECT *
FROM empleado
INNER JOIN departamento
ON empleado.IDDepartamento = departamento.IDDepartamento
SELECT *
FROM empleado, departamento
WHERE empleado.IDDepartamento = departamento.IDDepartamento
Resultados:
Empleado Departamento
Zolano 34 Produccin 34
Jordn 33 Ingeniera 33
Rbinson 34 Produccin 34
Steinberg 33 Ingeniera 33
Andrade 31 Ventas 31
Theta Join
A la combinacin que utiliza comparaciones dentro del predicado JOIN se le llama theta-join.
Se pueden hacer comparaciones de <, <=, =, <>, >= y >.
SELECT *
FROM empleado
INNER JOIN departamento
ON empleado.IDDepartamento < departamento.IDDepartamento
Las operaciones INNER JOIN puede ser clasificadas como de igualdad, naturales y cruzadas.
Equi-join
Es una variedad del theta-join que usa comparaciones de igualdad en el predicado JOIN.
Cuando se usan otros operadores de comparacin no se puede clasificar en este rango.
Ejemplo de combinacin de igualdad:
SELECT *
FROM empleado
INNER JOIN departamento
ON empleado.IDDepartamento = departamento.IDDepartamento
Natural join
SELECT *
FROM empleado NATURAL JOIN departamento
El resultado es un poco diferente al del ejemplo de la tabla anterior, ya que esta vez la columna
IDDepartamento se muestra sola una vez en la tabla resultante.
Zolano 34 Produccin
Jordn 33 Ingeniera
Rbinson 34 Produccin
Steinberg 33 Ingeniera
Andrade 31 Ventas
El uso de esta sentencia NATURAL puede producir resultados ambiguos y generar problemas
si la base de datos cambia, porque al aadir, quitar o renombrar las columnas puede perder el
sentido la sentencia; por esta razn es preferible expresar el predicado usando las otras
expresiones nombradas anteriormente.
Con esta operacin cada registro en la tabla A es combinado con los correspondientes de la
tabla B que satisfagan las condiciones que se especifiquen en el predicado del JOIN. Cualquier
registro de la tabla A o de la tabla B que no tenga uno correspondiente en la otra tabla es
excluido, y solo aparecern los que tengan correspondencia en la otra tabla. Este es el tipo
de JOIN ms utilizado, por lo que es considerado el tipo de combinacin predeterminado.
Las dos consultas siguientes son similares y se realizan de manera explcita (A) e implcita (B).
SELECT *
FROM empleado
INNER JOIN departamento
ON empleado.IDDepartamento = departamento.IDDepartamento
SELECT *
FROM empleado, departamento
WHERE empleado.IDDepartamento = departamento.IDDepartamento
Otros ejemplos
Supongamos que queremos obtener todos los clientes que no tienen acciones.
Un LEFT JOIN no da los cliente que tienen y que no tienen acciones, para obtener solo los que
no tienen acciones agregamos al LEFT JOIN un WHERE accion is NULL
mysql> select nombre, telefono, accion, cantidad from clientes left join acciones on
clientes.cid=acciones.cid where accion is null;
+--------+----------+--------+----------+
| nombre | telefono | accion | cantidad |
+--------+----------+--------+----------+
| jose | 111 | NULL | NULL |
| manuel | 333 | NULL | NULL |
+--------+----------+--------+----------+
2 rows in set (0.00 sec)
Para obtener aquellas tenencias de acciones que no tienen clientes, es similar al RIGHT JOIN
pero le agregamos un WHERE nombre is NULL
mysql> select nombre, telefono, accion, cantidad from clientes right join acciones on
clientes.cid=acciones.cid where nombre is null;
+--------+----------+--------+----------+
| nombre | telefono | accion | cantidad |
+--------+----------+--------+----------+
| NULL | NULL | FORD | 100 |
+--------+----------+--------+----------+
1 row in set (0.00 sec)