SlideShare a Scribd company logo
1 of 10
Download to read offline
Join 1
Join
La sentencia join en SQL permite combinar registros de dos o más tablas en una base de datos relacional. En el
Lenguaje de Consultas Estructurado (SQL) hay tres tipos de JOIN: interno, externo y cruzado.
En casos especiales una tabla puede unirse a sí misma, produciendo una auto-combinación, SELF-JOIN.
Matemáticamente, JOIN es composición relacional, la operación fundamental en el álgebra relacional, y,
generalizando, es una función de composición.
Tablas de ejemplo
Todas las explicaciones que están a continuación usan las siguientes dos tablas para ilustrar el efecto de diferentes
clases de uniones JOIN.
Tabla Empleado
Apellido IDDepartamento
Andrade 31
Jordán 33
Steinberg 33
Róbinson 34
Zolano 34
Gaspar 36
Tabla Departamento
NombreDepartamento IDDepartamento
Ventas 31
Ingeniería 33
Producción 34
Mercadeo 35
La tabla Empleado contiene los apellidos de los empleados junto al número del departamento al que pertenecen,
mientras que la tabla Departamento contiene el nombre de los departamentos de la empresa.
Existen empleados que tienen asignado un número de departamento que no se encuentra en la tabla Departamento
(Gaspar). Igualmente, existen departamentos a los cuales no pertenece ningún empleado (Mercadeo). Esto servirá
para presentar algunos ejemplos más adelante.
Join 2
Combinación interna (INNER JOIN)
Con esta operación se calcula el producto cruzado de todos los registros; así cada registro en la tabla A es combinado
con cada registro de la tabla B; pero sólo permanecen aquellos registros en la tabla combinada que satisfacen las
condiciones que se especifiquen. Este es el tipo de JOIN más utilizado, por lo que es considerado el tipo de
combinación predeterminado.
SQL:2003 especifica dos formas diferentes para expresar estas combinaciones. La primera, conocida como explícita,
usa la palabra JOIN, mientras que la segunda es implícita y usa ',' para separar las tablas a combinar en la sentencia
FROM de la declaración SELECT. Entonces siempre se genera el producto cruzado del cual se seleccionan las
combinaciones que cumplan lo que indica la sentencia WHERE.
Es necesario tener especial cuidado cuando se combinan columnas con valores nulos NULL, ya que el valor nulo no
se combina con otro valor o con otro nulo, excepto cuando se le agregan predicados tales como IS NULL o IS
NOT NULL.
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, éstas no se muestran; es decir,
que si el número de departamento de un empleado no coincide con los números 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 explícita (A) e implícita (B).
A. Ejemplo de la sentencia INNER JOIN explícita:
SELECT Campos
FROM empleado
INNER JOIN departamento
ON empleado.IDDepartamento = departamento.IDDepartamento
B. Ejemplo de la sentencia INNER JOIN implícita:
SELECT Campos
FROM empleado, departamento
WHERE empleado.IDDepartamento = departamento.IDDepartamento
Resultados:
Empleado.Apellido Empleado.IDDepartamento departamento.NombreDepartamento departamento.IDDepartamento
Zolano 34 Producción 34
Jordán 33 Ingeniería 33
Róbinson 34 Producción 34
Steinberg 33 Ingeniería 33
Andrade 31 Ventas 31
El empleado Gaspar y el departamento de Mercadeo no son presentados en los resultados ya que ninguno de éstos
tiene registros correspondientes en la otra tabla. No existe un departamento con número 36 ni existe un empleado
con número de departamento 35.
A la combinación que utiliza comparaciones dentro del predicado JOIN se le llama theta-join.
C. Ejemplo de combinación tipo theta:
SELECT *
FROM empleado
Join 3
INNER JOIN departamento
ON empleado.IDDepartamento < departamento.IDDepartamento
Las operaciones INNER JOIN puede ser clasificadas como de equivalencia, naturales y cruzadas.
De equivalencia (equi-join)
Es una especie de theta-join que usa comparacioneS de igualdad en el predicado JOIN. Cuando se usan operadores,
tales como < o >, no se puede clasificar en este rango.
D. Ejemplo de combinación de equivalencia:
SELECT *
FROM empleado
INNER JOIN departamento
ON empleado.IDDepartamento = departamento.IDDepartamento
La tabla resultante presenta dos columnas llamadas IDDepartamento: una proveniente de la tabla Empleado y otra de
la tabla Departamento.
SQL:2003 no tiene una sintaxis específica para esta clase de combinaciones.
Natural (Natural join)
Es una especialización de la combinación de equivalencia, anteriormente mencionada. En este caso se comparan
todas las columnas que tengan el mismo nombre en ambas tablas. La tabla resultante contiene sólo una columna por
cada par de columnas con el mismo nombre.
E. Ejemplo de combinación natural:
SELECT *
FROM empleado NATURAL JOIN departamento
El resultado es un poco diferente al del ejemplo D, ya que esta vez la columna IDDepartamento se muestra sola una
vez en la tabla resultante.
Empleado.Apellido IDDepartamento Departamento.NombreDepartamento
Zolano 34 Producción
Jordán 33 Ingeniería
Róbinson 34 Producción
Steinberg 33 Ingeniería
Andrade 31 Ventas
El uso de esta sentencia NATURAL puede producir resultados ambiguos y generar problemas si la base de datos
cambia, porque al añadir, quitar o renombrar las columnas puede perder el sentido la sentencia; por esta razón es
preferible expresar el predicado usando las otras expresiones nombradas anteriormente (ejemplos A y B).
Join 4
Cruzada (Cross join)
Presenta el producto cartesiano de todos los registros de las dos tablas.
El código SQL para realizar este producto cartesiano enuncia las tablas que serán combinadas, pero no incluye algún
predicado que filtre el resultado.
F. Ejemplo de combinación cruzada explícita:
SELECT *
FROM empleado CROSS JOIN departamento
G. Ejemplo de combinación cruzada implícita:
SELECT *
FROM empleado, departamento;
Empleado.Apellido Empleado.IDDepartamento Departamento.NombreDepartamento Departamento.IDDepartamento
Andrade 31 Ventas 31
Jordán 33 Ventas 31
Steinberg 33 Ventas 31
Zolano 34 Ventas 31
Róbinson 34 Ventas 31
Gaspar 36 Ventas 31
Andrade 31 Ingeniería 33
Jordán 33 Ingeniería 33
Steinberg 33 Ingeniería 33
Solano 34 Ingeniería 33
Róbinson 34 Ingeniería 33
Gaspar 36 Ingeniería 33
Andrade 31 Producción 34
Jordán 33 Producción 34
Steinberg 33 Producción 34
Solano 34 Producción 34
Róbinson 34 Producción 34
Gaspar 36 Producción 34
Andrade 31 Mercadeo 35
Jordán 33 Mercadeo 35
Steinberg 33 Mercadeo 35
Solano 34 Mercadeo 35
Róbinson 34 Mercadeo 35
Gaspar 36 Mercadeo 35
Esta clase de combinaciones son usadas pocas veces; generalmente se les agregan condiciones de filtrado con la
sentencia WHERE para hallar resultados específicos.
Join 5
Combinación externa (OUTER JOIN)
Mediante esta operación no se requiere que cada registro en las tablas a tratar tenga un registro equivalente en la otra
tabla. El registro es mantenido en la tabla combinada si no existe otro registro que le corresponda.
En SQL:2003 no existe una notación implícita para las combinaciones externas.
Este tipo de operación se subdivide dependiendo de la tabla a la cual se le admitirán los registros que no tienen
correspondencia, ya sean de tabla izquierda, de tabla derecha o combinación completa.
De tabla izquierda (LEFT OUTER JOIN o LEFT JOIN)
El resultado de esta operación siempre contiene todos los registros de la tabla de la izquierda (la primera tabla que se
menciona en la consulta), aun cuando no exista un registro correspondiente en la tabla de la derecha para uno de la
izquierda.
La sentencia LEFT OUTER JOIN retorna la pareja de todos los valores de la tabla izquierda con los valores
de la tabla de la derecha correspondientes, o retorna un valor nulo NULL en caso de no correspondencia.
A diferencia del resultado presentado en los ejemplos A y B (de combinación interna) donde no se mostraba el
empleado cuyo departamento no existía, en el siguiente ejemplo se presentarán los empleados con su respectivo
departamento, e inclusive se presentará el empleado cuyo departamento no existe.
H. Ejemplo de tabla izquierda para la combinación externa:
SELECT *
FROM empleado
LEFT OUTER JOIN departamento
ON empleado.IDDepartamento = departamento.IDDepartamento
Empleado.Apellido Empleado.IDDepartamento Departamento.NombreDepartamento Departamento.IDDepartamento
Jordán 33 Ingeniería 33
Andrade 31 Ventas 31
Róbinson 34 Producción 34
Zolano 34 Producción 34
Gaspar 36 NULL NULL
Steinberg 33 Ingeniería 33
De tabla derecha (RIGHT OUTER JOIN o RIGHT JOIN)
Esta operación es inversa a la anterior; el resultado de esta operación siempre contiene todos los registros de la tabla
de la derecha (la segunda tabla que se menciona en la consulta), aun cuando no exista un registro correspondiente en
la tabla de la izquierda para uno de la derecha.
La sentencia RIGHT OUTER JOIN retorna la pareja de todos los valores de la tabla derecha con los valores
de la tabla de la izquierda correspondientes, o retorna un valor nulo NULL en caso de no correspondencia.
I. Ejemplo de tabla derecha para la combinación externa:
SELECT *
FROM empleado
RIGHT OUTER JOIN departamento
ON empleado.IDDepartamento = departamento.IDDepartamento
Join 6
Empleado.Apellido Empleado.IDDepartamento Departamento.NombreDepartamento Departamento.IDDepartamento
Zolano 34 Producción 34
Jordán 33 Ingeniería 33
Róbinson 34 Producción 34
Steinberg 33 Ingeniería 33
Andrade 31 Ventas 31
NULL NULL Mercadeo 35
En este caso el área de Mercadeo fue presentada en los resultados, aunque aún no hay empleados registrados en
dicha área.
Combinación completa (FULL OUTER JOIN)
Esta operación presenta los resultados de tabla izquierda y tabla derecha aunque no tengan correspondencia en la otra
tabla. La tabla combinada contendrá, entonces, todos los registros de ambas tablas y presentará valores nulos NULLs
para registros sin pareja.
J. Ejemplo de combinación externa completa:
SELECT *
FROM empleado
FULL OUTER JOIN departamento
ON empleado.IDDepartamento = departamento.IDDepartamento
Empleado.Apellido Empleado.IDDepartamento Departamento.NombreDepartamento Departamento.IDDepartamento
Zolano 34 Producción 34
Jordán 33 Ingeniería 33
Róbinson 34 Producción 34
Gaspar 36 NULL NULL
Steinberg 33 Ingeniería 33
Andrade 31 Ventas 31
NULL NULL Mercadeo 35
Como se puede notar, en este caso se encuentra el empleado Gaspar con valor nulo en su área correspondiente, y se
muestra además el departamento de Mercadeo con valor nulo en los empleados de esa área.
Algunos sistemas de bases de datos no soportan esta funcionalidad, pero esta puede ser emulada a través de las
combinaciones de tabla izquierda, tabla derecha y de la sentencia de unión union.
K. El mismo ejemplo puede expresarse así:
SELECT *
FROM empleado
LEFT JOIN departamento
ON empleado.IDDepartamento = departamento.IDDepartamento
UNION
SELECT *
FROM empleado
RIGHT JOIN departamento
Join 7
ON empleado.IDDepartamento = departamento.IDDepartamento
WHERE empleado.IDDepartamento IS NULL
Implementación
La implementación eficiente de combinaciones ha sido un objetivo de mucho trabajo en los sistemas de bases de
datos, pues aunque sean internas o externas, son muy comunes y difíciles de ejecutar eficientemente. La
combinación interna de tablas se puede hacer con propiedad conmutativa y asociativa, así que el usuario sólo crea la
consulta y el sistema de base de datos determina la manera más eficiente de realizar la operación. Esta decision la
toma el optimizador de consultas, que tiene en cuenta dos puntos importantes:
El orden de las combinaciones
como las combinaciones son conmutativas, el orden en el cual son combinadas las tablas no modifica el
resultado final de la consulta. En cambio, sí tiene un gran impacto sobre el costo de la operación, de manera
que elegir el mejor orden de combinaciones es muy importante.
El método de la combinación
dadas dos tablas y una condición de combinación, existen unos cuantos algoritmos que devuelven el resultado
de la combinación. Cuál algoritmo es el más eficiente dependerá de los tamaños de las tablas de entrada, la
cantidad de filas de cada una que satisfacen la condición de combinación y las operaciones requeridas por el
resto de la consulta.
Los diferentes algoritmos tratan de forma diferente a las entradas. A las entradas de una combinación se las llama
respectivamente "operando externo(outer)" y "operando interno(inner)", o bien simplemente izquierdo y derecho. En
el caso de bucles anidados, por ejemplo, la relación interna será completamente recorrida por cada fila de la relación
externa.
Los planes de ejecución que incluyen combinaciones pueden clasificarse en:
Profundo a la izquierda
El operando interno de cada combinación del plan es una tabla base.
Profundo a la derecha
El operando externo de cada combinación del plan es una tabla base.
Denso
Ambas entradas son combinaciones.
Estos nombres derivan de la apariencia de la representación gráfica del plan de ejecución como un árbol, con la
relación externa a la izquierda y la interna a la derecha (por convención).
Algoritmos de combinación
Existen tres algoritmos fundamentales para ejecutar una operación de combinación.
Bucles anidados
Éste es el más simple de los algortimos de combinación. Por cada tupla de la relación externa, se recorre
completamente la relación interna, y toda tupla que verifique la condición de combinación se añade al resultado. El
algoritmo puede ser fácilmente generalizado para cualquier número de relaciones.
Pseudocódigo para la combinación de las relaciones and :
Por cada tupla en R, llamada r:
Por cada tupla en S, llamada s:
Si la tupla <r,s> satisface la condición de combinación
Join 8
Entonces agregar la tupla <r,s> a la salida
La complejidad computacional del algoritmo es de operaciones de entrada/salida, donde y
son la cantidad de tuplas en y respectivamente.
Naturalmente, este algoritmo tiene un desempeño pobre si alguna de las relaciones es muy grande. El desempeño
puede mejorarse si la relación interna tiene un índice sobre las columnas del predicado de combinación.
Existe una variación del algoritmo de bucles anidados, llamada bucles anidados en bloque. Sea . En
lugar de leer las dos relaciones tupla por tupla, se lee la relación en bloques, llenando toda la memoria
disponible, excepto dos páginas. Por cada bloque de se realiza una iteración sobre , leyendo una página por
vez, y por cada página leída de , la tupla de la página es comparada con las del bloque de , y cada par de
tuplas que satisfacen la condición de combinación se agrega a la página de salida.
El algortimo de bucles anidados en bloque tiene una complejidad computacional de operaciones de
entrada/salida, donde es el número de páginas de memoria disponibles y y son el tamaño en páginas de
y de respectivamente. Notar que la complejidad computacional es de operaciones de
entrada/salida si cabe en la memoria disponible.
Combinación por fusión
Si ambas relaciones están ordenadas por los atributos de combinación, la operación es trivial:
1.1. Por cada tupla de la relación externa,
1. Se toma el grupo de tuplas actual de la relación interna; un grupo está formado por un conjunto de tuplas
contiguas con el mismo valor en el atributo de combinación.
2.2. Por cada tupla del grupo interno actual que satisfaga la condición de combinación, se agrega una tupla al
resultado. Una vez agotado el grupo interno, ambas búsquedas, la interna y la externa, pueden avanzar al
siguiente grupo.
Por esta razón muchos optimizadores guardan pista del ordenamiento en los nodos del plan (si uno o ambos
operandos ya están ordenados en función del atributo de combinación, no hace falta otro ordenamiento. De lo
contrario, el sistema de gestión de base de datos deberá realizarlo, generalmente utilizando un ordenamiento externo
para evitar consumir demasiada memoria.
Combinación Hash
Este algoritmo puede ser utilizado para combinaciones "equi-join". El acceso a las tablas a ser combinadas se realiza
construyendo tablas hash sobre los atributos de combinación. La búsqueda en tabla hash es mucho más rápida que a
través de árboles de índice, pero sólo puede realizarse una búsqueda por la condición de igualdad.
Optimización de la combinación
Semi-combinación
Es una optimización técnica para las combinaciones en bases de datos distribuidas. El predicado JOIN es aplicado
en diferentes fases, comenzando con la más temprana. Esto puede reducir el tamaño de los resultados inmediatos que
deben ser intercambiados con nodos remotos, así reduce el tráfico de red entre nodos, esto puede mejorarse con un
filtro Bloom.
Join 9
Enlaces externos
• Sentencia Join en MySQL 5.0
[1]
• Expresiones de tablas en PostgreSQL 8.4 (Inglés)
[2]
• Combinar tablas JOIN
[3]
Referencias
[1] http://dev.mysql.com/doc/refman/5.0/es/join.html
[2] http://www.postgresql.org/docs/8.4/static/queries-table-expressions.html
[3] http://www.programacionweb.net/articulos/articulo/?num=467
Fuentes y contribuyentes del artículo 10
Fuentes y contribuyentes del artículo
Join  Fuente: http://es.wikipedia.org/w/index.php?oldid=74297604  Contribuyentes: Charrua85, Cratón, Ctrl Z, Gacpro, GermanX, HUB, Humitos, Ignacio Icke, Jesusosm, Manuelt15, Nioger,
P4W3R, Pipepupo, Pólux, Rgfernandez, Richieoranch, Santga, Savh, Segedano, UA31, Yachar, 115 ediciones anónimas
Licencia
Creative Commons Attribution-Share Alike 3.0
//creativecommons.org/licenses/by-sa/3.0/

More Related Content

What's hot (18)

Excel+formulas+y+funciones
Excel+formulas+y+funcionesExcel+formulas+y+funciones
Excel+formulas+y+funciones
 
Excel 2007
Excel 2007Excel 2007
Excel 2007
 
Operadores Importancia
Operadores ImportanciaOperadores Importancia
Operadores Importancia
 
Fórmulas y funciones básicas
Fórmulas y funciones básicasFórmulas y funciones básicas
Fórmulas y funciones básicas
 
Formulas y funciones en excel
Formulas y funciones en excelFormulas y funciones en excel
Formulas y funciones en excel
 
excel formulas y funciones
excel formulas y funcionesexcel formulas y funciones
excel formulas y funciones
 
Funciones excel pdf
Funciones excel pdfFunciones excel pdf
Funciones excel pdf
 
Ecxel manual
Ecxel manualEcxel manual
Ecxel manual
 
Fórmulas en microsoft excel
Fórmulas en microsoft excelFórmulas en microsoft excel
Fórmulas en microsoft excel
 
Fórmulas en microsoft excel
Fórmulas en microsoft excelFórmulas en microsoft excel
Fórmulas en microsoft excel
 
PRACTICA DE Excel 2014 1° secundaria
PRACTICA DE Excel   2014   1° secundariaPRACTICA DE Excel   2014   1° secundaria
PRACTICA DE Excel 2014 1° secundaria
 
Frmulas y-funciones-bsicas-en-excel-1220622841221190-9
Frmulas y-funciones-bsicas-en-excel-1220622841221190-9Frmulas y-funciones-bsicas-en-excel-1220622841221190-9
Frmulas y-funciones-bsicas-en-excel-1220622841221190-9
 
Grupo 8
Grupo 8Grupo 8
Grupo 8
 
Excel leccion2
Excel leccion2Excel leccion2
Excel leccion2
 
Teoria funciones Excel
Teoria funciones ExcelTeoria funciones Excel
Teoria funciones Excel
 
Formulas de excel
Formulas de excelFormulas de excel
Formulas de excel
 
Fórmulas en excel
Fórmulas en excelFórmulas en excel
Fórmulas en excel
 
Fórmulas y funciones básicas
Fórmulas y funciones básicasFórmulas y funciones básicas
Fórmulas y funciones básicas
 

Viewers also liked

Unidad 6 Lenguaje Sql 4 (Consultas Dml Avanzado)
Unidad 6 Lenguaje Sql 4 (Consultas Dml Avanzado)Unidad 6 Lenguaje Sql 4 (Consultas Dml Avanzado)
Unidad 6 Lenguaje Sql 4 (Consultas Dml Avanzado)
Sergio Sanchez
 

Viewers also liked (14)

Cap 7. oracle SQL fundamentals
Cap 7. oracle SQL fundamentalsCap 7. oracle SQL fundamentals
Cap 7. oracle SQL fundamentals
 
Join sql
Join sqlJoin sql
Join sql
 
Introducción Procesador Consultas SQL Server - Query Processor
Introducción Procesador Consultas SQL Server - Query ProcessorIntroducción Procesador Consultas SQL Server - Query Processor
Introducción Procesador Consultas SQL Server - Query Processor
 
Join
JoinJoin
Join
 
Taller básico de JOINS, SUBQUERYING, APPLY, CTE
Taller básico de JOINS, SUBQUERYING, APPLY, CTETaller básico de JOINS, SUBQUERYING, APPLY, CTE
Taller básico de JOINS, SUBQUERYING, APPLY, CTE
 
Curso SQL - Leccion 7
Curso SQL - Leccion 7  Curso SQL - Leccion 7
Curso SQL - Leccion 7
 
Unidad 6 Lenguaje Sql 4 (Consultas Dml Avanzado)
Unidad 6 Lenguaje Sql 4 (Consultas Dml Avanzado)Unidad 6 Lenguaje Sql 4 (Consultas Dml Avanzado)
Unidad 6 Lenguaje Sql 4 (Consultas Dml Avanzado)
 
Sql joins
Sql joinsSql joins
Sql joins
 
SQL JOIN
SQL JOINSQL JOIN
SQL JOIN
 
SQL Joins
SQL JoinsSQL Joins
SQL Joins
 
Consultas en sql básico
Consultas en sql básicoConsultas en sql básico
Consultas en sql básico
 
Sql Consultas MáS Complejas
Sql Consultas MáS ComplejasSql Consultas MáS Complejas
Sql Consultas MáS Complejas
 
Consultas base de datos en SQL
Consultas base de datos en SQLConsultas base de datos en SQL
Consultas base de datos en SQL
 
Inner join
Inner joinInner join
Inner join
 

Similar to Join

Tisc 2-expocicion1 hugp calderon alexis chavez grupo 3
Tisc 2-expocicion1 hugp calderon alexis chavez grupo 3Tisc 2-expocicion1 hugp calderon alexis chavez grupo 3
Tisc 2-expocicion1 hugp calderon alexis chavez grupo 3
Alexis Chavez
 
Operadores Matemáticos
Operadores MatemáticosOperadores Matemáticos
Operadores Matemáticos
Juan Carlos
 
Operadores Importancia
Operadores ImportanciaOperadores Importancia
Operadores Importancia
Juan Carlos
 

Similar to Join (20)

Leftyrightjoin
LeftyrightjoinLeftyrightjoin
Leftyrightjoin
 
Guía 04. Consultas MySQL sobre varias tablas. Composición externa - José J Sá...
Guía 04. Consultas MySQL sobre varias tablas. Composición externa - José J Sá...Guía 04. Consultas MySQL sobre varias tablas. Composición externa - José J Sá...
Guía 04. Consultas MySQL sobre varias tablas. Composición externa - José J Sá...
 
Joins
JoinsJoins
Joins
 
Tisc 2-expocicion1 hugp calderon alexis chavez grupo 3
Tisc 2-expocicion1 hugp calderon alexis chavez grupo 3Tisc 2-expocicion1 hugp calderon alexis chavez grupo 3
Tisc 2-expocicion1 hugp calderon alexis chavez grupo 3
 
Tisc 2-expocicion (1)
Tisc 2-expocicion (1)Tisc 2-expocicion (1)
Tisc 2-expocicion (1)
 
Grupo N°3 - Loachamin Cristian y Yungán Cristian
Grupo N°3 - Loachamin Cristian y Yungán Cristian Grupo N°3 - Loachamin Cristian y Yungán Cristian
Grupo N°3 - Loachamin Cristian y Yungán Cristian
 
Los inner join- Giovanna Miramontes 3aps Cecyte bc
Los inner join- Giovanna Miramontes 3aps Cecyte bcLos inner join- Giovanna Miramontes 3aps Cecyte bc
Los inner join- Giovanna Miramontes 3aps Cecyte bc
 
Consultas multitabla clase
Consultas multitabla claseConsultas multitabla clase
Consultas multitabla clase
 
Caso de estudio joins
Caso de estudio joinsCaso de estudio joins
Caso de estudio joins
 
Algebra relacional
Algebra relacionalAlgebra relacional
Algebra relacional
 
Algebra relacional
Algebra relacionalAlgebra relacional
Algebra relacional
 
Tipos de JOIN en SQL.pptx
Tipos de JOIN en SQL.pptxTipos de JOIN en SQL.pptx
Tipos de JOIN en SQL.pptx
 
Teoria sql
Teoria sqlTeoria sql
Teoria sql
 
Operadores Matemáticos
Operadores MatemáticosOperadores Matemáticos
Operadores Matemáticos
 
Operadores Importancia
Operadores ImportanciaOperadores Importancia
Operadores Importancia
 
Relacion entre tablas
Relacion entre tablasRelacion entre tablas
Relacion entre tablas
 
Access i
Access iAccess i
Access i
 
Access i
Access iAccess i
Access i
 
Access i
Access iAccess i
Access i
 
Access i
Access iAccess i
Access i
 

More from Josue Lopez

Teoria de redes 5°
Teoria de redes 5°Teoria de redes 5°
Teoria de redes 5°
Josue Lopez
 
Taller de procesamiento de datos 5°
Taller de procesamiento de datos 5°Taller de procesamiento de datos 5°
Taller de procesamiento de datos 5°
Josue Lopez
 
Sistemas operativos 5°
Sistemas operativos 5°Sistemas operativos 5°
Sistemas operativos 5°
Josue Lopez
 
Programacion por capas
Programacion por capasProgramacion por capas
Programacion por capas
Josue Lopez
 
Plataforma web de servicios multiples 5°
Plataforma web de servicios multiples 5°Plataforma web de servicios multiples 5°
Plataforma web de servicios multiples 5°
Josue Lopez
 
Macroeconomia 5°
Macroeconomia 5°Macroeconomia 5°
Macroeconomia 5°
Josue Lopez
 
Dibujo asistido 3°
Dibujo asistido 3°Dibujo asistido 3°
Dibujo asistido 3°
Josue Lopez
 

More from Josue Lopez (11)

Ejecuciondeinstruccionescomputaciontrabajo 110115214722-phpapp01
Ejecuciondeinstruccionescomputaciontrabajo 110115214722-phpapp01Ejecuciondeinstruccionescomputaciontrabajo 110115214722-phpapp01
Ejecuciondeinstruccionescomputaciontrabajo 110115214722-phpapp01
 
Teoria de redes 5°
Teoria de redes 5°Teoria de redes 5°
Teoria de redes 5°
 
Taller de procesamiento de datos 5°
Taller de procesamiento de datos 5°Taller de procesamiento de datos 5°
Taller de procesamiento de datos 5°
 
Sistemas operativos 5°
Sistemas operativos 5°Sistemas operativos 5°
Sistemas operativos 5°
 
Programacion por capas
Programacion por capasProgramacion por capas
Programacion por capas
 
Plataforma web de servicios multiples 5°
Plataforma web de servicios multiples 5°Plataforma web de servicios multiples 5°
Plataforma web de servicios multiples 5°
 
Macroeconomia 5°
Macroeconomia 5°Macroeconomia 5°
Macroeconomia 5°
 
Java servlet
Java servletJava servlet
Java servlet
 
Ingles 5°
Ingles 5°Ingles 5°
Ingles 5°
 
Dibujo asistido 3°
Dibujo asistido 3°Dibujo asistido 3°
Dibujo asistido 3°
 
Diseño logico 5°
Diseño logico 5°Diseño logico 5°
Diseño logico 5°
 

Join

  • 1. Join 1 Join La sentencia join en SQL permite combinar registros de dos o más tablas en una base de datos relacional. En el Lenguaje de Consultas Estructurado (SQL) hay tres tipos de JOIN: interno, externo y cruzado. En casos especiales una tabla puede unirse a sí misma, produciendo una auto-combinación, SELF-JOIN. Matemáticamente, JOIN es composición relacional, la operación fundamental en el álgebra relacional, y, generalizando, es una función de composición. Tablas de ejemplo Todas las explicaciones que están a continuación usan las siguientes dos tablas para ilustrar el efecto de diferentes clases de uniones JOIN. Tabla Empleado Apellido IDDepartamento Andrade 31 Jordán 33 Steinberg 33 Róbinson 34 Zolano 34 Gaspar 36 Tabla Departamento NombreDepartamento IDDepartamento Ventas 31 Ingeniería 33 Producción 34 Mercadeo 35 La tabla Empleado contiene los apellidos de los empleados junto al número del departamento al que pertenecen, mientras que la tabla Departamento contiene el nombre de los departamentos de la empresa. Existen empleados que tienen asignado un número de departamento que no se encuentra en la tabla Departamento (Gaspar). Igualmente, existen departamentos a los cuales no pertenece ningún empleado (Mercadeo). Esto servirá para presentar algunos ejemplos más adelante.
  • 2. Join 2 Combinación interna (INNER JOIN) Con esta operación se calcula el producto cruzado de todos los registros; así cada registro en la tabla A es combinado con cada registro de la tabla B; pero sólo permanecen aquellos registros en la tabla combinada que satisfacen las condiciones que se especifiquen. Este es el tipo de JOIN más utilizado, por lo que es considerado el tipo de combinación predeterminado. SQL:2003 especifica dos formas diferentes para expresar estas combinaciones. La primera, conocida como explícita, usa la palabra JOIN, mientras que la segunda es implícita y usa ',' para separar las tablas a combinar en la sentencia FROM de la declaración SELECT. Entonces siempre se genera el producto cruzado del cual se seleccionan las combinaciones que cumplan lo que indica la sentencia WHERE. Es necesario tener especial cuidado cuando se combinan columnas con valores nulos NULL, ya que el valor nulo no se combina con otro valor o con otro nulo, excepto cuando se le agregan predicados tales como IS NULL o IS NOT NULL. 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, éstas no se muestran; es decir, que si el número de departamento de un empleado no coincide con los números 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 explícita (A) e implícita (B). A. Ejemplo de la sentencia INNER JOIN explícita: SELECT Campos FROM empleado INNER JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento B. Ejemplo de la sentencia INNER JOIN implícita: SELECT Campos FROM empleado, departamento WHERE empleado.IDDepartamento = departamento.IDDepartamento Resultados: Empleado.Apellido Empleado.IDDepartamento departamento.NombreDepartamento departamento.IDDepartamento Zolano 34 Producción 34 Jordán 33 Ingeniería 33 Róbinson 34 Producción 34 Steinberg 33 Ingeniería 33 Andrade 31 Ventas 31 El empleado Gaspar y el departamento de Mercadeo no son presentados en los resultados ya que ninguno de éstos tiene registros correspondientes en la otra tabla. No existe un departamento con número 36 ni existe un empleado con número de departamento 35. A la combinación que utiliza comparaciones dentro del predicado JOIN se le llama theta-join. C. Ejemplo de combinación tipo theta: SELECT * FROM empleado
  • 3. Join 3 INNER JOIN departamento ON empleado.IDDepartamento < departamento.IDDepartamento Las operaciones INNER JOIN puede ser clasificadas como de equivalencia, naturales y cruzadas. De equivalencia (equi-join) Es una especie de theta-join que usa comparacioneS de igualdad en el predicado JOIN. Cuando se usan operadores, tales como < o >, no se puede clasificar en este rango. D. Ejemplo de combinación de equivalencia: SELECT * FROM empleado INNER JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento La tabla resultante presenta dos columnas llamadas IDDepartamento: una proveniente de la tabla Empleado y otra de la tabla Departamento. SQL:2003 no tiene una sintaxis específica para esta clase de combinaciones. Natural (Natural join) Es una especialización de la combinación de equivalencia, anteriormente mencionada. En este caso se comparan todas las columnas que tengan el mismo nombre en ambas tablas. La tabla resultante contiene sólo una columna por cada par de columnas con el mismo nombre. E. Ejemplo de combinación natural: SELECT * FROM empleado NATURAL JOIN departamento El resultado es un poco diferente al del ejemplo D, ya que esta vez la columna IDDepartamento se muestra sola una vez en la tabla resultante. Empleado.Apellido IDDepartamento Departamento.NombreDepartamento Zolano 34 Producción Jordán 33 Ingeniería Róbinson 34 Producción Steinberg 33 Ingeniería Andrade 31 Ventas El uso de esta sentencia NATURAL puede producir resultados ambiguos y generar problemas si la base de datos cambia, porque al añadir, quitar o renombrar las columnas puede perder el sentido la sentencia; por esta razón es preferible expresar el predicado usando las otras expresiones nombradas anteriormente (ejemplos A y B).
  • 4. Join 4 Cruzada (Cross join) Presenta el producto cartesiano de todos los registros de las dos tablas. El código SQL para realizar este producto cartesiano enuncia las tablas que serán combinadas, pero no incluye algún predicado que filtre el resultado. F. Ejemplo de combinación cruzada explícita: SELECT * FROM empleado CROSS JOIN departamento G. Ejemplo de combinación cruzada implícita: SELECT * FROM empleado, departamento; Empleado.Apellido Empleado.IDDepartamento Departamento.NombreDepartamento Departamento.IDDepartamento Andrade 31 Ventas 31 Jordán 33 Ventas 31 Steinberg 33 Ventas 31 Zolano 34 Ventas 31 Róbinson 34 Ventas 31 Gaspar 36 Ventas 31 Andrade 31 Ingeniería 33 Jordán 33 Ingeniería 33 Steinberg 33 Ingeniería 33 Solano 34 Ingeniería 33 Róbinson 34 Ingeniería 33 Gaspar 36 Ingeniería 33 Andrade 31 Producción 34 Jordán 33 Producción 34 Steinberg 33 Producción 34 Solano 34 Producción 34 Róbinson 34 Producción 34 Gaspar 36 Producción 34 Andrade 31 Mercadeo 35 Jordán 33 Mercadeo 35 Steinberg 33 Mercadeo 35 Solano 34 Mercadeo 35 Róbinson 34 Mercadeo 35 Gaspar 36 Mercadeo 35 Esta clase de combinaciones son usadas pocas veces; generalmente se les agregan condiciones de filtrado con la sentencia WHERE para hallar resultados específicos.
  • 5. Join 5 Combinación externa (OUTER JOIN) Mediante esta operación no se requiere que cada registro en las tablas a tratar tenga un registro equivalente en la otra tabla. El registro es mantenido en la tabla combinada si no existe otro registro que le corresponda. En SQL:2003 no existe una notación implícita para las combinaciones externas. Este tipo de operación se subdivide dependiendo de la tabla a la cual se le admitirán los registros que no tienen correspondencia, ya sean de tabla izquierda, de tabla derecha o combinación completa. De tabla izquierda (LEFT OUTER JOIN o LEFT JOIN) El resultado de esta operación siempre contiene todos los registros de la tabla de la izquierda (la primera tabla que se menciona en la consulta), aun cuando no exista un registro correspondiente en la tabla de la derecha para uno de la izquierda. La sentencia LEFT OUTER JOIN retorna la pareja de todos los valores de la tabla izquierda con los valores de la tabla de la derecha correspondientes, o retorna un valor nulo NULL en caso de no correspondencia. A diferencia del resultado presentado en los ejemplos A y B (de combinación interna) donde no se mostraba el empleado cuyo departamento no existía, en el siguiente ejemplo se presentarán los empleados con su respectivo departamento, e inclusive se presentará el empleado cuyo departamento no existe. H. Ejemplo de tabla izquierda para la combinación externa: SELECT * FROM empleado LEFT OUTER JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento Empleado.Apellido Empleado.IDDepartamento Departamento.NombreDepartamento Departamento.IDDepartamento Jordán 33 Ingeniería 33 Andrade 31 Ventas 31 Róbinson 34 Producción 34 Zolano 34 Producción 34 Gaspar 36 NULL NULL Steinberg 33 Ingeniería 33 De tabla derecha (RIGHT OUTER JOIN o RIGHT JOIN) Esta operación es inversa a la anterior; el resultado de esta operación siempre contiene todos los registros de la tabla de la derecha (la segunda tabla que se menciona en la consulta), aun cuando no exista un registro correspondiente en la tabla de la izquierda para uno de la derecha. La sentencia RIGHT OUTER JOIN retorna la pareja de todos los valores de la tabla derecha con los valores de la tabla de la izquierda correspondientes, o retorna un valor nulo NULL en caso de no correspondencia. I. Ejemplo de tabla derecha para la combinación externa: SELECT * FROM empleado RIGHT OUTER JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento
  • 6. Join 6 Empleado.Apellido Empleado.IDDepartamento Departamento.NombreDepartamento Departamento.IDDepartamento Zolano 34 Producción 34 Jordán 33 Ingeniería 33 Róbinson 34 Producción 34 Steinberg 33 Ingeniería 33 Andrade 31 Ventas 31 NULL NULL Mercadeo 35 En este caso el área de Mercadeo fue presentada en los resultados, aunque aún no hay empleados registrados en dicha área. Combinación completa (FULL OUTER JOIN) Esta operación presenta los resultados de tabla izquierda y tabla derecha aunque no tengan correspondencia en la otra tabla. La tabla combinada contendrá, entonces, todos los registros de ambas tablas y presentará valores nulos NULLs para registros sin pareja. J. Ejemplo de combinación externa completa: SELECT * FROM empleado FULL OUTER JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento Empleado.Apellido Empleado.IDDepartamento Departamento.NombreDepartamento Departamento.IDDepartamento Zolano 34 Producción 34 Jordán 33 Ingeniería 33 Róbinson 34 Producción 34 Gaspar 36 NULL NULL Steinberg 33 Ingeniería 33 Andrade 31 Ventas 31 NULL NULL Mercadeo 35 Como se puede notar, en este caso se encuentra el empleado Gaspar con valor nulo en su área correspondiente, y se muestra además el departamento de Mercadeo con valor nulo en los empleados de esa área. Algunos sistemas de bases de datos no soportan esta funcionalidad, pero esta puede ser emulada a través de las combinaciones de tabla izquierda, tabla derecha y de la sentencia de unión union. K. El mismo ejemplo puede expresarse así: SELECT * FROM empleado LEFT JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento UNION SELECT * FROM empleado RIGHT JOIN departamento
  • 7. Join 7 ON empleado.IDDepartamento = departamento.IDDepartamento WHERE empleado.IDDepartamento IS NULL Implementación La implementación eficiente de combinaciones ha sido un objetivo de mucho trabajo en los sistemas de bases de datos, pues aunque sean internas o externas, son muy comunes y difíciles de ejecutar eficientemente. La combinación interna de tablas se puede hacer con propiedad conmutativa y asociativa, así que el usuario sólo crea la consulta y el sistema de base de datos determina la manera más eficiente de realizar la operación. Esta decision la toma el optimizador de consultas, que tiene en cuenta dos puntos importantes: El orden de las combinaciones como las combinaciones son conmutativas, el orden en el cual son combinadas las tablas no modifica el resultado final de la consulta. En cambio, sí tiene un gran impacto sobre el costo de la operación, de manera que elegir el mejor orden de combinaciones es muy importante. El método de la combinación dadas dos tablas y una condición de combinación, existen unos cuantos algoritmos que devuelven el resultado de la combinación. Cuál algoritmo es el más eficiente dependerá de los tamaños de las tablas de entrada, la cantidad de filas de cada una que satisfacen la condición de combinación y las operaciones requeridas por el resto de la consulta. Los diferentes algoritmos tratan de forma diferente a las entradas. A las entradas de una combinación se las llama respectivamente "operando externo(outer)" y "operando interno(inner)", o bien simplemente izquierdo y derecho. En el caso de bucles anidados, por ejemplo, la relación interna será completamente recorrida por cada fila de la relación externa. Los planes de ejecución que incluyen combinaciones pueden clasificarse en: Profundo a la izquierda El operando interno de cada combinación del plan es una tabla base. Profundo a la derecha El operando externo de cada combinación del plan es una tabla base. Denso Ambas entradas son combinaciones. Estos nombres derivan de la apariencia de la representación gráfica del plan de ejecución como un árbol, con la relación externa a la izquierda y la interna a la derecha (por convención). Algoritmos de combinación Existen tres algoritmos fundamentales para ejecutar una operación de combinación. Bucles anidados Éste es el más simple de los algortimos de combinación. Por cada tupla de la relación externa, se recorre completamente la relación interna, y toda tupla que verifique la condición de combinación se añade al resultado. El algoritmo puede ser fácilmente generalizado para cualquier número de relaciones. Pseudocódigo para la combinación de las relaciones and : Por cada tupla en R, llamada r: Por cada tupla en S, llamada s: Si la tupla <r,s> satisface la condición de combinación
  • 8. Join 8 Entonces agregar la tupla <r,s> a la salida La complejidad computacional del algoritmo es de operaciones de entrada/salida, donde y son la cantidad de tuplas en y respectivamente. Naturalmente, este algoritmo tiene un desempeño pobre si alguna de las relaciones es muy grande. El desempeño puede mejorarse si la relación interna tiene un índice sobre las columnas del predicado de combinación. Existe una variación del algoritmo de bucles anidados, llamada bucles anidados en bloque. Sea . En lugar de leer las dos relaciones tupla por tupla, se lee la relación en bloques, llenando toda la memoria disponible, excepto dos páginas. Por cada bloque de se realiza una iteración sobre , leyendo una página por vez, y por cada página leída de , la tupla de la página es comparada con las del bloque de , y cada par de tuplas que satisfacen la condición de combinación se agrega a la página de salida. El algortimo de bucles anidados en bloque tiene una complejidad computacional de operaciones de entrada/salida, donde es el número de páginas de memoria disponibles y y son el tamaño en páginas de y de respectivamente. Notar que la complejidad computacional es de operaciones de entrada/salida si cabe en la memoria disponible. Combinación por fusión Si ambas relaciones están ordenadas por los atributos de combinación, la operación es trivial: 1.1. Por cada tupla de la relación externa, 1. Se toma el grupo de tuplas actual de la relación interna; un grupo está formado por un conjunto de tuplas contiguas con el mismo valor en el atributo de combinación. 2.2. Por cada tupla del grupo interno actual que satisfaga la condición de combinación, se agrega una tupla al resultado. Una vez agotado el grupo interno, ambas búsquedas, la interna y la externa, pueden avanzar al siguiente grupo. Por esta razón muchos optimizadores guardan pista del ordenamiento en los nodos del plan (si uno o ambos operandos ya están ordenados en función del atributo de combinación, no hace falta otro ordenamiento. De lo contrario, el sistema de gestión de base de datos deberá realizarlo, generalmente utilizando un ordenamiento externo para evitar consumir demasiada memoria. Combinación Hash Este algoritmo puede ser utilizado para combinaciones "equi-join". El acceso a las tablas a ser combinadas se realiza construyendo tablas hash sobre los atributos de combinación. La búsqueda en tabla hash es mucho más rápida que a través de árboles de índice, pero sólo puede realizarse una búsqueda por la condición de igualdad. Optimización de la combinación Semi-combinación Es una optimización técnica para las combinaciones en bases de datos distribuidas. El predicado JOIN es aplicado en diferentes fases, comenzando con la más temprana. Esto puede reducir el tamaño de los resultados inmediatos que deben ser intercambiados con nodos remotos, así reduce el tráfico de red entre nodos, esto puede mejorarse con un filtro Bloom.
  • 9. Join 9 Enlaces externos • Sentencia Join en MySQL 5.0 [1] • Expresiones de tablas en PostgreSQL 8.4 (Inglés) [2] • Combinar tablas JOIN [3] Referencias [1] http://dev.mysql.com/doc/refman/5.0/es/join.html [2] http://www.postgresql.org/docs/8.4/static/queries-table-expressions.html [3] http://www.programacionweb.net/articulos/articulo/?num=467
  • 10. Fuentes y contribuyentes del artículo 10 Fuentes y contribuyentes del artículo Join  Fuente: http://es.wikipedia.org/w/index.php?oldid=74297604  Contribuyentes: Charrua85, Cratón, Ctrl Z, Gacpro, GermanX, HUB, Humitos, Ignacio Icke, Jesusosm, Manuelt15, Nioger, P4W3R, Pipepupo, Pólux, Rgfernandez, Richieoranch, Santga, Savh, Segedano, UA31, Yachar, 115 ediciones anónimas Licencia Creative Commons Attribution-Share Alike 3.0 //creativecommons.org/licenses/by-sa/3.0/