El Producto Cartesiano

EL PRODUCTO CARTESIANO El producto cartesiano es un tipo de composición de tablas, aplicando el producto cartesiano a d

Views 88 Downloads 0 File size 851KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

EL PRODUCTO CARTESIANO

El producto cartesiano es un tipo de composición 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 más tablas. nbtabla puede ser un nombre de tabla o un nombre de consulta. Si todas las tablas están en una base de datos externa, añadiremos la cláusula IN base datos externa después de la última tabla. Pero para mejorar el rendimiento y facilitar el uso, se recomienda utilizar una tabla vinculada en lugar de la cláusula 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 pequeñas. Se ve claramente que el producto cartesiano es una operación costosa sobre todo si operamos con más 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 cómo funciona el producto cartesiano cogemos las consultas [existencias cero] y [pedidos 90] creadas en la página 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 operación no es de las más utilizadas, normalmente cuando queremos componer dos tablas es para añadir a las filas de una tabla, una fila de la otra tabla, por ejemplo añadir a los pedidos los datos del cliente correspondiente, o los datos del representante, esto equivaldría a un producto cartesiano con una selección 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 código de cliente de la tabla de pedidos sea igual al código 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 cláusula 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 selección. Normalmente emparejamos tablas que están 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 más eficiente utilizar otro tipo de composición, 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).

supmediadesp)

:=

EDICIOS_EMP(edificio,

R := EDIFICIOS x DESPACHOS. Entonces, la relación R resultante será:

Conviene señalar que el producto cartesiano es una operación que raramente se utiliza de forma explícita, 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 operación primitiva; a partir de la cual se define otra operación del álgebra, la combinación, 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

A

B

1

2

3

4

B

C

D

2

5

6

4

7

8

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 composición de tablas, permite emparejar filas de distintas tablas de forma más 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 condición de emparejamiento, para cada fila de una de las tablas busca directamente en la otra tabla las filas que cumplen la condición, con lo cual se emparejan sólo 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 cláusula 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 numéricos deben ser de tipos similares. Por ejemplo, se puede combinar campos AutoNumérico y Long puesto que son tipos similares, sin embargo, no se puede combinar campos de tipo Simple y Doble. Además las columnas no pueden ser de tipo Memo ni OLE. comp representa cualquier operador de comparación ( =, , =, o ) y se utiliza para establecer la condición de emparejamiento.

Se pueden definir varias condiciones de emparejamiento unidas por los operadores AND y OR poniendo cada condición entre paréntesis. Ejemplo: SELECT * FROM pedidos INNER JOIN productos ON (pedidos.fab = productos.idfab) AND (pedidos.producto = productos.idproducto) Se pueden combinar más 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, también 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 función de operadores primitivos, pero su introducción tiene por fin la simplificación de las consultas.  Combinación o join La combinación de dos relaciones respecto de sus columnas d y k es otra relación constituida por todos los pares de tuplas concatenadas, tales que, en cada par, las columnas d y k de las correspondientes tuplas satisfacen la condición especificada. Si la condición es de igualdad se denomina combinación por igualdad (también se denomina equijoin o join). Los operadores derivados son aquellos que se pueden expresar siempre en función de operadores primitivos, pero su introducción tiene por fin la simplificación de las consultas. DIVISIÓN (:) La división de dos relaciones es otra relación cuya extensión estará constituida por las tuplas que al completarse con las tuplas de la segunda relación permiten obtener la primera.

Formalmente: Sean dos relaciones con esquemas R y R’, la división de ambos, denotada R : R’ será una relación 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 extensión será: < vi1,...,vi(n-n’) > / < vi(n-n’+1),..., vin >  r’  < vi1,...,vi(n-n’) , vi(nn’+1),..., vin >  AUTOR NOMBRE

NACIONALIDAD

EDITORIAL

Date C.J.

Norteamericana

Addison

De Miguel

Española

Rama

Saltor F.

Española

Paraninfo

Ceri S.

Italiana

Club

Costilla C.

Española

Diaz de Santos

Codd E.

Norteamericana

Prentice Hall

De Miguel

Española

Addison

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

NACIONALIDAD

De Miguel

Española

EDITORIAL EDITORIAL Addison Rama

División

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

a

b

d

e

S

R

A

B

a

b

e

d

R/S Ejemplo: Estudiantes que han tomado todos los cursos de "IS" ID,num ( depto='IS' (estudiante_cursos)) / depto='IS'(cursos))

num(

LA COMBINACIÓN O REUNIÓN (join) permite cruzar los valores de tablas relacionadas La combinación toma dos relaciones y devuelve una relación con las tuplas que resultan de concatenar tuplas de la primera con tuplas de la segunda y después seleccionar las que cumplen una condición de combinación C. Una combinación entre las relaciones R y Q mediante la condición C se denota como R[C]Q. Si la condición es la de igualdad, se denomina combinación por igualdad (equi_join). La llamada combinación natural es una combinación por igualdad donde se ha eliminado en la relación resultante uno de los atributos idénticos. Es el caso más común para relaciones que tienen un atributo común. AUTOR NOMBRE

NACIONALIDAD

INSTITUCION

Date C.J.

Norteamericana

Relational Ins.

De Miguel

Española

FIM

Saltor F.

Española

FI de UPB

Ceri S.

Italiana

Polit.Milan

LIBRO

AUTOR

EDITORIAL

DB Systems

Date C.J.

Addison

Basi di Dati

Ceri S.

Clup

SQL stan.

Date C.J.

Addison

Diseño BD

De Miguel

Rama

LIBROS

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

NACIONALIDAD INSTITUCION LIBRO

EDITORIAL

Date C.J.

Norteamericana

Relational Ins.

DB Systems

Addison

De Miguel

Española

FIM

Diseño 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