You are on page 1of 12

EL PRODUCTO CARTESIANO

El producto cartesiano es un tipo de composicin de tablas, aplicando el producto cartesiano


a dos tablas se obtiene una tabla con las columnas de la primera tabla unidas a las columnas
de la segunda tabla, y las filas de la tabla resultante son todas las posibles concatenaciones
de filas de la primera tabla con filas de la segunda tabla.
La sintaxis es la siguiente:

El producto cartesiano se indica poniendo en la FROM las tablas que queremos


componer separadas por comas, podemos obtener as el producto cartesiano de dos,
tres, o ms tablas.
nbtabla puede ser un nombre de tabla o un nombre de consulta. Si todas las tablas
estn en una base de datos externa, aadiremos la clusula IN base datos externa
despus de la ltima tabla. Pero para mejorar el rendimiento y facilitar el uso, se
recomienda utilizar una tabla vinculada en lugar de la clusula IN.
Hay que tener en cuenta que el producto cartesiano obtiene todas las posibles
combinaciones de filas por lo tanto si tenemos dos tablas de 100 registros cada una,
el resultado tendr 100x100 filas, si el producto lo hacemos de estas dos tablas con
una tercera de 20 filas, el resultado tendr 200.000 filas (100x100x20) y estamos
hablando de tablas pequeas. Se ve claramente que el producto cartesiano es una
operacin costosa sobre todo si operamos con ms de dos tablas o con tablas
voluminosas.
Se puede componer una tabla consigo misma, en este caso es obligatorio utilizar un
nombre de alias por lo menos para una de las dos.
Por ejemplo: SELECT * FROM empleados, empleados emp
En este ejemplo obtenemos el producto cartesiano de la tabla de empleados con ella misma.
Todas las posibles combinaciones de empleados con empleados.
Para ver cmo funciona el producto cartesiano cogemos las consultas [existencias cero] y
[pedidos 90] creadas en la pgina anterior, y creamos una consulta que halle el producto
cartesiano de las dos.

SELECT *
FROM [existencias cero],[pedidos 90]
Obtenemos la siguiente tabla:

Se observa que tenemos las dos filas de la primera consulta combinadas con las dos filas de
la segunda.
Esta operacin no es de las ms utilizadas, normalmente cuando queremos componer
dos tablas es para aadir a las filas de una tabla, una fila de la otra tabla, por ejemplo
aadir a los pedidos los datos del cliente correspondiente, o los datos del
representante, esto equivaldra a un producto cartesiano con una seleccin de filas:
SELECT *
FROM pedidos,clientes
WHERE pedidos.clie=clientes.numclie
Combinamos todos los pedidos con todos los clientes pero luego seleccionamos los que
cumplan que el cdigo de cliente de la tabla de pedidos sea igual al cdigo de cliente de la
tabla de clientes, por lo tanto nos quedamos con los pedidos combinados con los datos del
cliente correspondiente.
Las columnas que aparecen en la clusula WHERE de nuestra consulta anterior se
denominan columnas de emparejamiento ya que permiten emparejar las filas de las dos
tablas. Las columnas de emparejamiento no tienen por qu estar incluidas en la lista de
seleccin.
Normalmente emparejamos tablas que estn relacionadas entre s y una de las columnas de
emparejamiento es clave principal, pues en este caso, cuando una de las columnas de
emparejamiento tienen un ndice definido es ms eficiente utilizar otro tipo de composicin,
el INNER JOIN.
EJEMPLO
Ejemplo de producto cartesiano
El producto cartesiano de las relaciones DESPACHOS y EDIFICIOS_EMP del ejemplo se
puede hacer como se indica (es necesario redenominar atributos previamente):
EDIFICIOS(nombreedificio, supmediadesp) := EDICIOS_EMP(edificio,
supmediadesp).
R := EDIFICIOS x DESPACHOS.
Entonces, la relacin R resultante ser:

Conviene sealar que el producto cartesiano es una operacin que raramente se utiliza de
forma explcita, porque el resultado que da no suele ser til para resolver las consultas
habituales.
A pesar de ello, el producto cartesiano se incluye en el lgebra relacional porque es una
operacin primitiva; a partir de la cual se define otra operacin del lgebra, la combinacin,
que se utiliza con mucha frecuencia.
EJEMPLO
Producto cartesiano X

Producto cruz o solo producto

R X S, los esquemas de ambas relaciones se mezclan y unen.

Dados
B C D
A B
2 5 6
1 2
4 7 8
3 4
9 10 11

R
S
A R.B S.B C D

1 2 2 5 6

1 2 4 7 8

1 2 9 10 11

3 4 2 5 6

3 4 4 7 8

3 4 9 10 11

RXS

Producto natural |X|

Es un producto cartesiano donde nos interesan nicamente algunas


tuplas que hacen "match" en algun criterio.

A R.B S.B C D

1 2 2 5 6

1 2 4 7 8

1 2 9 10 11

3 4 2 5 6

3 4 4 7 8

3 4 9 10 11
A B C D

1 2 5 6

3 4 7 8

R |X| S

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 condiciones de emparejamiento unidas por los operadores AND y
OR poniendo 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.

OPERADORES DERIVADOS

Los operadores derivados son aquellos que se pueden expresar siempre en funcin de
operadores primitivos, pero su introduccin tiene por fin la simplificacin de las consultas.
Combinacin o join
La combinacin de dos relaciones respecto de sus columnas d y k es otra relacin constituida
por todos los pares de tuplas concatenadas, tales que, en cada par, las columnas d y k de las
correspondientes tuplas satisfacen la condicin especificada. Si la condicin es de igualdad
se denomina combinacin por igualdad (tambin se denomina equijoin o join).
Los operadores derivados son aquellos que se pueden expresar siempre en funcin de
operadores primitivos, pero su introduccin tiene por fin la simplificacin de las consultas.

DIVISIN (:)
La divisin de dos relaciones es otra relacin cuya extensin estar constituida por las tuplas
que al completarse con las tuplas de la segunda relacin permiten obtener la primera.
Formalmente: Sean dos relaciones con esquemas R y R, la divisin de ambos, denotada R :
R ser una relacin de grado n-n cuyo esquema estar formado por los n-n atributos A -
A es decir: (Ai:Di,...,An-n:Dn-n)
y cuya extensin ser: < vi1,...,vi(n-n) > / < vi(n-n+1),..., vin > r < vi1,...,vi(n-n) , vi(n-
n+1),..., vin >

AUTOR

NOMBRE NACIONALIDAD EDITORIAL

Date C.J. Norteamericana Addison

De Miguel Espaola Rama

Saltor F. Espaola Paraninfo

Ceri S. Italiana Club

Costilla C. Espaola Diaz de Santos

Codd E. Norteamericana Prentice Hall

De Miguel Espaola Addison

AUTOR : EDITORIAL (saber los autores que han publicado en Addison y Rama)

NOMBRE NACIONALIDAD

De Miguel Espaola

EDITORIAL

EDITORIAL

Addison

Rama
Divisin

Sean

A B C D

a b c d

a b e f C D

b c e f c d

e d c d e f

e d e f
S
a b d e

A B

a b

e d

R/S

Ejemplo: Estudiantes que han tomado todos los cursos de "IS"

ID,num ( depto='IS' (estudiante_cursos)) / num(


depto='IS'(cursos))
LA COMBINACIN O REUNIN (join) permite cruzar los valores de tablas relacionadas
La combinacin toma dos relaciones y devuelve una relacin con las tuplas que resultan de
concatenar tuplas de la primera con tuplas de la segunda y despus seleccionar las que
cumplen una condicin de combinacin C.
Una combinacin entre las relaciones R y Q mediante la condicin C se denota como R[C]Q.
Si la condicin es la de igualdad, se denomina combinacin por igualdad (equi_join).
La llamada combinacin natural es una combinacin por igualdad donde se ha eliminado
en la relacin resultante uno de los atributos idnticos. Es el caso ms comn para relaciones
que tienen un atributo comn.

AUTOR

NOMBRE NACIONALIDAD INSTITUCION

Date C.J. Norteamericana Relational Ins.

De Miguel Espaola FIM

Saltor F. Espaola FI de UPB

Ceri S. Italiana Polit.Milan

LIBROS

LIBRO AUTOR EDITORIAL

DB Systems Date C.J. Addison

Basi di Dati Ceri S. Clup

SQL stan. Date C.J. Addison

Diseo BD De Miguel Rama

AUTOR * LIBROS (autor.nombre = libros.autor)

NOMBRE NACIONALIDAD INSTITUCION LIBRO EDITORIAL

Date C.J. Norteamericana Relational Ins. DB Systems Addison

De Miguel Espaola FIM Diseo BD Rama

Date C.J. Norteamericana Relational Ins. SQL stan Addison


Ceri S. Italiana Polit.Milan Basi di Dati Clup
http://www.aulaclic.es/sql/t_3_3.htm
http://www.dataprix.com/514-producto-cartesiano

http://equipo22compu.blogspot.com/2012/06/operadores-derivados.html

https://www.fing.edu.uy/tecnoinf/mvd/cursos/bd2/material/teo/bd2-teorico01.pdf

http://guillerendon.blogspot.com/2012/03/142-operadores-derivados.html

http://ict.udlap.mx/people/carlos/is341/bases04.html

You might also like