Sei sulla pagina 1di 8

Join

Select (campos)
From A Inner Join B Select (campos)
On A.Clave = B.Clave From A Cross Join B
2 Combinacin interna (INNER
A B A B JOIN)

A B A B

Select (campos) Joins Select (campos)

del SQL
From A Left Join B From A Right Join B
On A.Clave = B.Clave On A.Clave = B.Clave

A B A B

Select (campos)
From A Left Join B
On A.Clave = B.Clave
Where B.Clave is Null
A B A B
Select (campos)
From A Right Join B
On A.Clave = B.Clave
Where A.Clave is Null A B
Select (campos) Select (campos)
From A Full Join B From A Right Join B
On A.Clave = B.Clave On A.Clave = B.Clave
Where (A.Clave is Null) Or (B.Clave is Null)

Joins del SQL y sus representaciones como diagramas de Venn

Diagrama de Venn representando el Inner Join, entre las tablas


A y B, de una sentencia SQL
La sentencia JOIN (unir, combinar) de SQL permite
combinar registros de una o ms tablas en una base de da-
tos relacional. En el Lenguaje de Consultas Estructurado Con esta operacin cada registro en la tabla A es combi-
(SQL) hay tres tipos de JOIN: interno, externo y cruza- nado con los correspondientes de la tabla B que satisfagan
do. El estndar ANSI del SQL especica cinco tipos de las condiciones que se especiquen en el predicado del
JOIN: INNER, LEFT OUTER, RIGHT OUTER, FULL JOIN. Cualquier registro de la tabla A o de la tabla B que
OUTER y CROSS. Una tabla puede unirse a s misma, no tenga uno correspondiente en la otra tabla es excluido,
produciendo una auto-combinacin, SELF-JOIN. y solo aparecern los que tengan correspondencia en la
otra tabla. Este es el tipo de JOIN ms utilizado, por lo
Matemticamente, JOIN es composicin relacional, la que es considerado el tipo de combinacin predetermina-
operacin fundamental en el lgebra relacional, y, gene- do.
ralizando, es una funcin de composicin.
SQL:2003 especica dos formas diferentes para expresar
estas combinaciones. La primera, conocida como explci-
ta, usa la palabra JOIN junto con las condiciones despus
de la palabra reservada ON. La segunda es implcita y usa
la comas para separar las tablas a combinar en la senten-
1 Tablas de ejemplo cia FROM, y se usa la sentencia WHERE para estable-
cer las condiciones, la cual entonces es obligatoria para
el INNER JOIN pues de lo contrario la sentencia sera un
Todas las explicaciones que estn a continuacin usan las CROSS JOIN (ver ms abajo).
siguientes dos tablas para ilustrar el efecto de diferentes Es necesario tener especial cuidado cuando se combinan
clases de uniones JOIN. columnas con valores nulos NULL, ya que el valor nulo
La tabla Empleado contiene los apellidos de los emplea- no se combina con otro valor o con otro nulo, excepto
dos junto al nmero del departamento al que pertenecen, cuando se le agregan predicados tales como IS NULL o
mientras que la tabla Departamento contiene los nombres IS NOT NULL.
de los departamentos de la empresa. Como ejemplo, la siguiente consulta toma todos los re-
Existen empleados que tienen asignado un nmero de de- gistros de la tabla Empleado y encuentra todas las com-
partamento que no se encuentra en la tabla Departamento binaciones en la tabla Departamento. La sentencia JOIN
(Gaspar). Igualmente, existen departamentos a los cuales compara los valores en la columna IDDepartamento en
no pertenece ningn empleado (Mercadeo). Esto servir ambas tablas. Cuando no existe esta correspondencia en-
para presentar algunos ejemplos ms adelante. tre algunas combinaciones, stas no se muestran; es de-

1
2 3 COMBINACIN EXTERNA (OUTER JOIN)

cir, que si el nmero de departamento de un empleado no Natural join Es una especializacin de la combina-
coincide con los nmeros de departamento de la tabla De- cin de igualdad, anteriormente mencionada. En este ca-
partamento, no se mostrar el empleado con su respectivo so se comparan todas las columnas que tengan el mismo
departamento en la tabla resultante. nombre en ambas tablas. La tabla resultante contiene s-
Las dos consultas siguientes son similares y se realizan de lo una columna por cada par de columnas con el mismo
manera explcita (A) e implcita (B). nombre.
Ejemplo de combinacin natural:
Ejemplo de la sentencia INNER JOIN explcita:
SELECT * FROM empleado INNER JOIN departa- SELECT * FROM empleado NATURAL JOIN depar-
mento ON empleado.IDDepartamento = departamen- tamento
to.IDDepartamento
El resultado es un poco diferente al del ejemplo de la tabla
Ejemplo de la sentencia INNER JOIN implcita: anterior, ya que esta vez la columna IDDepartamento se
muestra sola una vez en la tabla resultante.
SELECT * FROM empleado, departamento WHE-
RE empleado.IDDepartamento = departamen- El uso de esta sentencia NATURAL puede producir re-
to.IDDepartamento sultados 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
Resultados: razn es preferible expresar el predicado usando las otras
El empleado Gaspar y el departamento de Mercadeo no expresiones nombradas anteriormente.
son presentados en los resultados ya que ninguno de stos
tiene registros correspondientes en la otra tabla. No existe
un departamento con nmero 36 ni existe un empleado 3 Combinacin externa (OUTER
con nmero de departamento 35.
JOIN)

2.0.1 Theta Join Mediante esta operacin no se requiere que un registro en


una tabla tenga un registro relacionado en la otra tabla. El
registro es mantenido en la tabla combinada aunque no
A la combinacin que utiliza comparaciones dentro del
exista el correspondiente en la otra tabla.
predicado JOIN se le llama theta-join. Se pueden hacer
comparaciones de <, <=, =, <>, >= y >. Existen tres tipos de combinaciones externas, el Left Join,
el Right Join y el Full Join, donde se toman todos los re-
Ejemplo de combinacin tipo theta:
gistros de la tabla de la izquierda, o todos los de la tabla
SELECT * FROM empleado INNER JOIN departa- derecha, o todos los registros respectivamente.
mento ON empleado.IDDepartamento < departamen-
to.IDDepartamento
3.1 LEFT JOIN
Las operaciones INNER JOIN puede ser clasicadas como
de igualdad, naturales y cruzadas.

Equi-join Es una variedad del theta-join que usa com-


paraciones de igualdad en el predicado JOIN. Cuando se
usan otros operadores de comparacin no se puede clasi-
car en este rango.
Ejemplo de combinacin de igualdad:
A B
SELECT * FROM empleado INNER JOIN departa-
mento ON empleado.IDDepartamento = departamen-
to.IDDepartamento

Diagrama de Venn representando el Left Join, entre las tablas A


La tabla resultante presenta dos columnas llamadas ID- y B, de una sentencia SQL
Departamento: una proveniente de la tabla Empleado y
otra de la tabla Departamento. El resultado de esta operacin siempre contiene todos los
SQL:2003 no tiene una sintaxis especca para esta clase registros de la tabla de la izquierda (la primera tabla que se
de combinaciones. menciona en la consulta), independientemente de si existe
3.2 RIGHT OUTER JOIN o RIGHT JOIN 3

un registro correspondiente en la tabla de la derecha. 3.2 RIGHT OUTER JOIN o RIGHT JOIN

La sentencia LEFT JOIN retorna la pareja de


todos los valores de la tabla izquierda con los
valores de la tabla de la derecha correspondien-
tes, si los hay, o retorna un valor nulo NULL
en los campos de la tabla derecha cuando no
haya correspondencia.

A diferencia del resultado presentado en los ejemplos de


A B
combinacin interna donde no se mostraba el empleado
cuyo departamento no exista, en el siguiente ejemplo se
presentarn los empleados con su respectivo departamen-
to, y adicionalmente se presenta un empleado cuyo depar-
tamento no existe. Diagrama de Venn representando el Right Join, entre las tablas
El empleado que no tiene departamento se encuentra en el A y B, de una sentencia SQL
rea amarilla del diagrama de la derecha, mientras que los
empleados con departamento estn en el rea anaranjada, Esta operacin es una imagen reeja de la anterior; el re-
en la interseccin de A y B. sultado de esta operacin siempre contiene todos los re-
gistros de la tabla de la derecha (la segunda tabla que se
Ejemplo de left join para la combinacin externa:
menciona en la consulta), independientemente de si existe
SELECT * FROM empleado LEFT OUTER JOIN o no un registro correspondiente en la tabla de la izquier-
departamento ON empleado.IDDepartamento = depar- da.
tamento.IDDepartamento
La sentencia RIGHT OUTER JOIN retorna
todos los valores de la tabla derecha con los va-
lores de la tabla de la izquierda correspondien-
3.1.1 LEFT JOIN excluyendo la interseccin tes, si los hay, o retorna un valor nulo NULL
en los campos de la tabla izquierda cuando no
haya correspondencia.

En el diagrama de la derecha, los departamentos que no


tienen empleados estn en el rea verde mientras que los
departamentos con empleados estn en el rea anaranja-

A B
da, en la interseccin de A y B.
Ejemplo de right join para la combinacin externa:
SELECT * FROM empleado RIGHT OUTER JOIN
departamento ON empleado.IDDepartamento = depar-
tamento.IDDepartamento

En este caso el rea de Mercadeo fue presentada en los


Diagrama de Venn representando el Left Join, entre las tablas A resultados, aunque an no hay empleados registrados en
y B, agregando una condicin donde las claves de B son nulas
dicha rea.

Si se quieren mostrar solo los registros de la primera tabla


que no tengan correspondientes en la segunda, se puede 3.2.1 RIGHT JOIN excluyendo la interseccin
agregar la condicin adecuada en la clusula WHERE. Es-
to nos dar los empleados que no estn asignados a nin-
Si se quieren mostrar solo los registros de la tabla de De-
gn departamento, que en el diagrama de la derecha se
partamento que no tengan correspondientes en la tabla de
representan en amarillo. Empleado, se puede agregar la condicin adecuada en la
SELECT * FROM empleado LEFT OUTER JOIN clusula WHERE. Esto nos dar los departamentos que no
departamento ON empleado.IDDepartamento = tengan asignados ningn empleado. En el diagrama de la
departamento.IDDepartamento WHERE departamen- derecha, esto se representa en verde.
to.IDDepartamento IS NULL SELECT * FROM empleado RIGHT OUTER JOIN
departamento ON empleado.IDDepartamento =
4 3 COMBINACIN EXTERNA (OUTER JOIN)

do.IDDepartamento IS NULL

A B
3.4 Combinacin completa (FULL OUTER
JOIN)

Diagrama de Venn representando el Right Join, entre las tablas


A y B, agregando una condicin donde las claves de A son nulas
A B
departamento.IDDepartamento WHERE emplea-
do.IDDepartamento IS NULL

3.3 Equivalencia entre LEFT JOIN y Diagrama de Venn representando el Full Join, entre las tablas A
RIGHT JOIN y B, de una sentencia SQL

Esta operacin presenta los resultados de tabla izquierda


y tabla derecha aunque alguna 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.

B A En el diagrama de la derecha, el rea anaranjada repre-


senta los empleados que estn asociados a un departa-
mento, el rea amarilla son los empleados que no estn
en ningn departamento, y el rea verde son los departa-
mentos que no tienen empleados.
Ejemplo de combinacin externa completa:
SELECT * FROM empleado FULL OUTER JOIN
Left Join equivalente al Right Join anterior departamento ON empleado.IDDepartamento = depar-
tamento.IDDepartamento
Hay una total equivalencia entre las sentencias que usan
LEFT JOIN y las que usan RIGHT JOIN. Todo lo que
se puede hacer con uno se puede hacer con el otro. Cam- Como se puede notar, en este caso se encuentra el em-
biando la perspectiva de cul es la tabla izquierda y cul pleado Gaspar con valor nulo en su rea correspondiente,
es la tabla derecha, y teniendo cuidado con las condicio- y se muestra adems el departamento de Mercadeo con
valor nulo en los empleados de esa rea.
nes, se puede hacer la sentencia equivalente.
Por ejemplo, hagamos el RIGHT JOIN anterior pero esta Algunos sistemas de bases de datos no soportan esta fun-
vez usando LEFT JOIN. En el RIGHT JOIN anterior se cionalidad, pero esta puede ser emulada a travs de las
consideraba la tabla Empleado a la izquierda y la tabla de combinaciones de tabla izquierda, tabla derecha y de la
Departamento a la derecha. Para hacer un LEFT JOIN sentencia de unin union.
equivalente cambiamos de perspectiva y volteamos las El mismo ejemplo puede expresarse as:
tablas. Consideremos ahora la tabla de Departamento a la
SELECT * FROM empleado LEFT JOIN depar-
izquierda y la tabla de Empleado a la derecha. Podemos
tamento ON empleado.IDDepartamento = departa-
obtener exactamente el mismo resultado con la sentencia
mento.IDDepartamento UNION SELECT * FROM
siguiente: empleado RIGHT JOIN departamento ON emplea-
SELECT * FROM departamento LEFT OUTER do.IDDepartamento = departamento.IDDepartamento
JOIN empleado ON departamento.IDDepartamento WHERE empleado.IDDepartamento IS NULL
= empleado.IDDepartamento WHERE emplea-
5

3.4.1 FULL JOIN excluyendo la interseccin El cdigo SQL para realizar este producto cartesiano
enuncia las tablas que sern combinadas, pero no incluye
algn predicado que ltre el resultado.
Ejemplo de combinacin cruzada explcita:
SELECT * FROM empleado CROSS JOIN departa-
mento

A B Ejemplo de combinacin cruzada implcita:


SELECT * FROM empleado, departamento;

Esta clase de combinaciones son usadas pocas veces; ge-


neralmente se les agregan condiciones de ltrado con la
sentencia WHERE para hallar resultados especcos.
Diagrama de Venn representando el Full Join, entre las tablas A
y B, agregando condiciones donde la clave de A o la de B son
nulas 5 Implementacin
Si se quieren mostrar solo los registros de las tablas que La implementacin eciente de combinaciones ha sido
no tengan correspondencia en la otra, se pueden agregar un objetivo de mucho trabajo en los sistemas de bases
las condiciones adecuadas en la clusula WHERE. de datos, pues aunque sean internas o externas, son muy
En el diagrama de la derecha, el rea amarilla representa comunes y difciles de ejecutar ecientemente. La com-
los empleados que no estn asignados a ningn departa- binacin interna de tablas se puede hacer con propiedad
mento, mientras que el rea verde representa los departa- conmutativa y asociativa, as que el usuario slo crea la
mentos que no tienen empleados. consulta y el sistema de base de datos determina la ma-
nera ms eciente de realizar la operacin. Esta decision
SELECT * FROM empleado FULL OUTER JOIN la toma el optimizador de consultas, que tiene en cuenta
departamento ON empleado.IDDepartamento = dos puntos importantes:
departamento.IDDepartamento WHERE (emplea-
do.IDDepartamento IS NULL) OR (departamen- El orden de las combinaciones como las combinacio-
to.IDDepartamento is NULL) nes son conmutativas, el orden en el cual son com-
binadas las tablas no modica el resultado nal de
la consulta. En cambio, s tiene un gran impacto so-
bre el costo de la operacin, de manera que elegir el
4 Cruzada (Cross join) mejor orden de combinaciones es muy importante.
El mtodo de la combinacin dadas dos tablas y una
condicin de combinacin, existen unos cuantos
algoritmos que devuelven el resultado de la combi-
nacin. Cul algoritmo es el ms eciente depender
de los tamaos de las tablas de entrada, la cantidad
de las de cada una que satisfacen la condicin de
combinacin y las operaciones requeridas por el res-

A B to de la consulta.

Los diferentes algoritmos tratan de forma diferente a las


entradas. A las entradas de una combinacin 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 relacin
interna ser completamente recorrida por cada la de la
Representacin como producto cartesiano del Cross Join, entre
las tablas A y B, de una sentencia SQL relacin externa.
Los planes de ejecucin que incluyen combinaciones pue-
El CROSS JOIN presenta el producto cartesiano de los den clasicarse en:
registros de las dos tablas. La tabla resultante tendr todos
los registros de la tabla izquierda combinados con cada Profundo a la izquierda El operando interno de cada
uno de los registros de la tabla derecha. combinacin del plan es una tabla base.
6 7 ENLACES EXTERNOS

Profundo a la derecha El operando externo de cada 5.1.2 Combinacin por fusin


combinacin del plan es una tabla base.
Si ambas relaciones estn ordenadas por los atributos de
combinacin, la operacin es trivial:
Denso Ambas entradas son combinaciones.

1. Por cada tupla de la relacin externa,


Estos nombres derivan de la apariencia de la representa-
cin grca del plan de ejecucin como un rbol, con la (a) Se toma el grupo de tuplas actual de la relacin
relacin externa a la izquierda y la interna a la derecha interna; un grupo est formado por un conjun-
(por convencin). to de tuplas contiguas con el mismo valor en el
atributo de combinacin.
(b) Por cada tupla del grupo interno actual que sa-
tisfaga la condicin de combinacin, se agrega
5.1 Algoritmos de combinacin una tupla al resultado. Una vez agotado el gru-
po interno, ambas bsquedas, la interna y la
Existen tres algoritmos fundamentales para ejecutar una externa, pueden avanzar al siguiente grupo.
operacin de combinacin.
Por esta razn muchos optimizadores guardan pista del
ordenamiento en los nodos del plan (si uno o ambos ope-
5.1.1 Bucles anidados randos ya estn ordenados en funcin del atributo de com-
binacin, no hace falta otro ordenamiento. De lo contra-
ste es el ms simple de los algortimos de combinacin. rio, el sistema de gestin de base de datos deber reali-
Por cada tupla de la relacin externa, se recorre comple- zarlo, generalmente utilizando un ordenamiento externo
tamente la relacin interna, y toda tupla que verique la para evitar consumir demasiada memoria.
condicin de combinacin se aade al resultado. El algo-
ritmo puede ser fcilmente generalizado para cualquier
5.1.3 Combinacin Hash
nmero de relaciones.
Pseudocdigo para la combinacin de las relaciones R Este algoritmo puede ser utilizado para combinaciones
and S : equi-join. El acceso a las tablas a ser combinadas se
Por cada tupla en R, llamada r: Por cada tupla en S, lla- realiza construyendo tablas hash sobre los atributos de
mada s: Si la tupla <r,s> satisface la condicin de combi- combinacin. La bsqueda en tabla hash es mucho ms
nacin Entonces agregar la tupla <r,s> a la salida rpida que a travs de rboles de ndice, pero slo puede
realizarse una bsqueda por la condicin de igualdad.
La complejidad computacional del algoritmo es de
O(|R||S|) operaciones de entrada/salida, donde |R| y |S|
son la cantidad de tuplas en R y S respectivamente. 5.2 Optimizacin de la combinacin
Naturalmente, este algoritmo tiene un desempeo pobre
si alguna de las relaciones es muy grande. El desempe- 5.2.1 Semi-combinacin
o puede mejorarse si la relacin interna tiene un ndice
sobre las columnas del predicado de combinacin. Es una optimizacin tcnica para las combinaciones en
bases de datos distribuidas. El predicado JOIN es aplica-
Existe una variacin del algoritmo de bucles anidados, lla- do en diferentes fases, comenzando con la ms temprana.
mada bucles anidados en bloque. Sea |R| < |S| . En lugar Esto puede reducir el tamao de los resultados inmedia-
de leer las dos relaciones tupla por tupla, se lee la relacin tos que deben ser intercambiados con nodos remotos, as
R en bloques, llenando toda la memoria disponible, ex- reduce el trco de red entre nodos, esto puede mejorarse
cepto dos pginas. Por cada bloque de R se realiza una con un ltro Bloom.
iteracin sobre S , leyendo una pgina por vez, y por cada
pgina leda de S , la tupla de la pgina es comparada con
las del bloque de R , y cada par de tuplas que satisfacen la
condicin de combinacin se agrega a la pgina de salida.
6 Vase tambin
El algortimo de bucles anidados en bloque tiene una com-
SQL
plejidad computacional de O( PM r Ps
) operaciones de en-
trada/salida, donde M es el nmero de pginas de memo-
ria disponibles y Pr y Ps son el tamao en pginas de R y
de S respectivamente. Notar que la complejidad compu- 7 Enlaces externos
tacional es de O(Pr + Ps ) operaciones de entrada/salida
si R cabe en la memoria disponible. Sentencia Join en MySQL 5.0
7

Expresiones de tablas en PostgreSQL 8.4 (Ingls)

Combinar tablas JOIN


Curso de SQL (JOIN)
8 8 ORIGEN DEL TEXTO Y LAS IMGENES, COLABORADORES Y LICENCIAS

8 Origen del texto y las imgenes, colaboradores y licencias


8.1 Texto
Join Fuente: https://es.wikipedia.org/wiki/Join?oldid=96932096 Colaboradores: Pipepupo, BOTijo, GermanX, CEM-bot, Chabacano,
Cratn, Mpeinadopa, JAnDbot, Segedano, Nioger, Venturimi, Plux, VolkovBot, Lucien leGrey, Muro Bot, Jesusosm, Rgfernandez, SieBot,
Ctrl Z, Humitos, HUB, Ener6, UA31, AVBOT, Arjuno3, Amirobot, Yachar, P4W3R, Undermyesh, Gacpro, DSisyphBot, Manuelt15, Xq-
bot, Charrua85, Panderine!, DixonDBot, PatruBOT, KamikazeBot, Savh, KLBot2, Elvisor, Santga, Balles2601, Richieoranch y Annimos:
88

8.2 Imgenes
Archivo:Joins_del_SQL.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/c/c9/Joins_del_SQL.svg Licencia: CC BY-SA
4.0 Colaboradores: Trabajo propio Artista original: GermanX
Archivo:SQL_Join_-_01b_A_Left_Join_B.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/d/dc/SQL_Join_-_01b_A_
Left_Join_B.svg Licencia: CC BY-SA 4.0 Colaboradores: Trabajo propio Artista original: GermanX
Archivo:SQL_Join_-_02_A_Left_Join_B_Where_B.key_=_null.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/a/a1/
SQL_Join_-_02_A_Left_Join_B_Where_B.key_%3D_null.svg Licencia: CC BY-SA 4.0 Colaboradores: Trabajo propio Artista original:
GermanX
Archivo:SQL_Join_-_03b_A_Right_Join_B.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/8/89/SQL_Join_-_03b_
A_Right_Join_B.svg Licencia: CC BY-SA 4.0 Colaboradores: Trabajo propio Artista original: GermanX
Archivo:SQL_Join_-_04.5_Left_Join_equivalente_a_Right_Join.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/8/
87/SQL_Join_-_04.5_Left_Join_equivalente_a_Right_Join.svg Licencia: CC BY-SA 4.0 Colaboradores: Trabajo propio Artista original:
GermanX
Archivo:SQL_Join_-_04_A_Right_Join_B_Where_A.key_=_null.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/2/
27/SQL_Join_-_04_A_Right_Join_B_Where_A.key_%3D_null.svg Licencia: CC BY-SA 4.0 Colaboradores: Trabajo propio Artista ori-
ginal: GermanX
Archivo:SQL_Join_-_05b_A_Full_Join_B.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/3/3d/SQL_Join_-_05b_A_
Full_Join_B.svg Licencia: CC BY-SA 4.0 Colaboradores: Trabajo propio Artista original: GermanX
Archivo:SQL_Join_-_06b_A_Full_Join_B_Where_A.key_=_null_Or_B.key_=_null.svg Fuente: https://upload.wikimedia.org/
wikipedia/commons/1/1d/SQL_Join_-_06b_A_Full_Join_B_Where_A.key_%3D_null_Or_B.key_%3D_null.svg Licencia: CC BY-SA
4.0 Colaboradores: Trabajo propio Artista original: GermanX
Archivo:SQL_Join_-_07_A_Inner_Join_B.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/1/18/SQL_Join_-_07_A_
Inner_Join_B.svg Licencia: CC BY-SA 4.0 Colaboradores: Trabajo propio Artista original: GermanX
Archivo:SQL_Join_-_08_A_Cross_Join_B.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/8/82/SQL_Join_-_08_A_
Cross_Join_B.svg Licencia: CC BY-SA 4.0 Colaboradores: Trabajo propio Artista original: GermanX

8.3 Licencia del contenido


Creative Commons Attribution-Share Alike 3.0

Potrebbero piacerti anche