Sebastian Yanez

16
ALGEBRA RELACIONAL PARA CONSULTAS SQL [email protected] 2022 Autor: Sebastián Yánez ING.: BLANCA CUJÍ GESTOR DE BASE DE DATOS I

description

Deber

Transcript of Sebastian Yanez

Page 1: Sebastian Yanez

[email protected] 2023Autor:

ING.: BLANCA CUJÍ

GESTOR DE BASE DE DATOS I

Page 2: Sebastian Yanez

ALGEBRA RELACIONAL PARA CONSULTAS SQL

El Algebra Relacional es un lenguaje, que define una serie de operaciones, que se realizan

utilizando 'operadores', cada uno de los cuales puede trabajar sobre uno o varios conjuntos

de datos produciendo como resultado un nuevo conjunto de datos.

El álgebra relacional se inspira en la teoría de conjuntos para especificar consultas en una

base de datos relacional.

Para especificar una consulta en álgebra relacional, es preciso definir uno o más pasos

que sirven para ir construyendo, mediante operaciones de álgebra relacional, una nueva

relación que contenga los datos que responden a la consulta a partir de las relaciones

almacenadas. Los lenguajes basados en el álgebra relacional son procedimentales, dado

que los pasos que forman la consulta describen un procedimiento.

El conjunto de datos resultante de una operación puede a su vez ser utilizado en una

nueva operación, en forma anidada, tal como se hace con las operaciones aritméticas.

Esta propiedad es conocida como 'clausura'.

El lenguaje SQL (Structured Query Language) no es más que una de las más conocidas

implementaciones concretas de las operaciones del álgebra relacional.

Los conjuntos de datos se materializan en la práctica como 'tablas', que contienen 'filas',

con sus atributos representados mediante ‘columnas'.

Existen nueve tipos diferentes de operadores, que son los siguientes:

1- Unión

2- Intersección

3- Diferencia

4- Producto

5- Selección

6- Proyección

7- Reunión

8- División

9- Asignación

Autor: -2 - 2015

2023

Page 3: Sebastian Yanez

1. UNIÓN

La unión es una operación que, a partir de dos relaciones, obtiene una nueva relación

formada por todas las tuplas que están en alguna de las relaciones de partida. La unión es

una operación binaria.

Sólo tiene sentido aplicar la unión a relaciones que tengan tuplas similares.

Opera sobre dos o más tablas, siendo necesario que todas posean la misma estructura,

devolviendo una nueva tabla cuyo contenido es la combinación de los contenidos de todas

y cada una de las tablas originales, descartando las filas repetidas, tal como puede verse

en el siguiente ejemplo:

En la práctica, el comando SQL que se utilizaría para obtener la unión de las tablas A y B

del ejemplo podría ser el siguiente:

SELECT * FROM A UNION SELECT * FROM B

2. INTERSECCIÓN

Autor: -3 - 2015

TABLA A

CODIGO LOCALIDAD

1425 Buenos Aires

2000 Rosario

3000 Santa Fe

TABLA B

CODIGO LOCALIDAD

2000 Rosario

3000 Santa Fe

2128 Arroyo Seco

2121 Perez

A UNION B

CODIGO LOCALIDAD

1425 Buenos Aires

2000 Rosario

3000 Santa Fe

2128 Arroyo Seco

2121 Perez

Page 4: Sebastian Yanez

La intersección es una operación que, a partir de dos relaciones, obtiene una nueva

relación formada por las tuplas que pertenecen a las dos relaciones de partida. La

intersección es una operación binaria

Opera sobre dos o más tablas, siendo necesario que todas posean la misma estructura,

devolviendo una nueva tabla cuyo contenido es las filas comunes a todas las tablas

originales, descartando las filas repetidas, tal como puede verse en el siguiente ejemplo:

La intersección, como la unión, sólo se puede aplicar a relaciones que tengan tuplas

similares. Para poder hacer la intersección de dos relaciones, es preciso, que las

relaciones sean compatibles.

En la práctica, el comando SQL que se utilizaría para obtener la intersección de las tablas

A y B del ejemplo podría ser el siguiente:

SELECT * FROM A INTERSECT SELECT * FROM B

Cabe destacar aquí, que la operación de intersección puede no existir en algunas

implementaciones de SQL, como por ejemplo, la de mySQL versión 5.

3. DIFERENCIA

La diferencia es una operación que, a partir de dos relaciones, obtiene una nueva relación

formada por todas las tuplas que están en la primera relación y, en cambio, no están en la

segunda. La diferencia es una operación binaria

Autor: -4 - 2015

TABLA ACODIGO LOCALIDAD

1425 Buenos Aires

2000 Rosario

3000 Santa Fe

TABLA B

CODIGO LOCALIDAD

2000 Rosario

3000 Santa Fe

2128 Arroyo Seco

2121 Perez

A INTERSECCIÓN B

CODIGO LOCALIDAD

2000 Rosario

3000 Santa Fe

Page 5: Sebastian Yanez

Opera sobre dos tablas, siendo necesario que ambas posean la misma estructura,

devolviendo una nueva tabla cuyo contenido es las filas que figuran en la primer tabla y no

en la otra, tal como puede verse en el siguiente ejemplo:

En la práctica, el comando SQL que se utilizaría para

obtener la diferencia entre las tablas A y B del ejemplo podría

ser el siguiente:

SELECT * FROM A EXCEPT SELECT * FROM B

La operación de diferencia puede no existir en algunas implementaciones de SQL, como

por ejemplo, la de mySQL versión 5.

Autor: -5 - 2015

TABLA A

CODIGO LOCALIDAD

1425 Buenos Aires

2000 Rosario

3000 Santa Fe

TABLA B

CODIGO LOCALIDAD

2000 Rosario

3000 Santa Fe

2128 Arroyo Seco

2121 Perez

A DIFERENCIA B

CODIGO LOCALIDAD

1425 Buenos Aires

Page 6: Sebastian Yanez

4. PRODUCTO

Es una operación que, a partir de dos relaciones, obtiene una nueva relación formada por

todas las tuplas que resultan de concatenar tuplas de la primera relación con tuplas de la

segunda. El producto es una operación binaria.

Opera sobre dos tablas, efectuando un producto cartesiano del contenido de las mismas,

no siendo necesario que ambas posean la misma estructura, y devolviendo una nueva

tabla cuyo contenido es todas las posibles combinaciones de las filas de una de ambas

tablas, tal como puede verse en el siguiente ejemplo:

Si se quiere calcular el producto de dos relaciones que tienen algún

nombre de atributo común, sólo hace falta redenominar

previamente los atributos adecuados de una de las dos relaciones.

En la práctica, el comando SQL que se utilizaría para obtener el producto de las tablas A y

B del ejemplo podría ser el siguiente:

SELECT * FROM A, B

5. SELECCIÓN

Autor: -6 - 2015

TABLA A

W X

1 23

78 32

67 5

A * B

W X Y Z

1 2

3

15 320

1 2

3

7 5

78 3

2

15 320

78 3

2

7 5

67 5 15 320

67 5 7 5

TABLA B

Y Z

15 320

7 5

Page 7: Sebastian Yanez

Podemos ver la selección como una operación que sirve para elegir algunas tuplas de una

relación y eliminar el resto. Más concretamente, la selección es una operación que, a partir

de una relación, obtiene una nueva relación formada por todas las tuplas de la relación de

partida que cumplen una condición de selección especificada. La selección es una

operación unaria.

Las cláusulas que forman una condición de selección se conectan con los siguientes

operadores booleanos: “y” ( ) y “o” ( ).∧ ∨

Opera sobre una o más tablas, no siendo necesario que éstas posean la misma estructura,

y devolviendo una nueva tabla cuyo contenido es todas las filas de las tablas indicadas que

satisfacen una cierta condición, tal como puede verse en el siguiente ejemplo:

TABLA AX Y1 23

78 3267 515 3207 5

En la práctica, el comando SQL que se utilizaría para obtener la selección del ejemplo

podría ser el siguiente:

SELECT * FROM A WHERE X<50

6. PROYECCIÓN

Podemos considerar la proyección como una operación que sirve para elegir algunos

atributos de una relación y eliminar el resto. Más concretamente, la proyección es una

operación que, a partir de una relación, obtiene una nueva relación formada por todas las

(sub)tuplas de la relación de partida que resultan de eliminar unos atributos especificados.

La proyección es una operación unaria.

Opera sobre una o más tablas, no siendo necesario que éstas posean la misma estructura,

y devolviendo una nueva tabla cuyo contenido es todas las filas de las tablas indicadas que

satisfacen una cierta condición, tal como sucede con la selección, sólo que la proyección

permite indicar cuáles columnas se desea obtener en el resultado, tal como puede verse

en el siguiente ejemplo:

Autor: -7 - 2015

SELECCIÓN CON X<50X Y1 23

15 3207 5

Page 8: Sebastian Yanez

TABLA A

X Y Z

1 23 11

78 32 321

67 5 33

15 320 5

7 5 212

En la práctica, el comando SQL que se utilizaría para obtener la proyección del ejemplo

podría ser el siguiente:

SELECT X, Z FROM A WHERE X<50

7. REUNIÓN

Opera sobre dos o más tablas, que poseen estructuras diferentes, y devolviendo una

nueva tabla cuyo contenido es un conjunto de filas con las columnas deseadas

provenientes de las diferentes tablas, en el que las filas de las diferentes tablas en juego

son relacionadas mediante alguna condición, tal como puede verse en el siguiente

ejemplo:

En la práctica, el comando SQL que se utilizaría para obtener el

producto de las tablas A y B del ejemplo podría ser el siguiente:

SELECT A.W, B.Y FROM A JOIN B ON (A.V=B.X AND Z>10)

8. DIVISIÓN

Autor: -8 - 2015

PROYECCIÓN DE X y Z CON X<50

X Z

1 11

15 5

7 212

TABLA B

X Y Z

5 15 320

7

8

37 5

1 33 3

7

8

5 404

REUNIÓN DE A y B

TOMANDO W e Y

CON X=V y Z>10

W Y

32 5

TABLA A

V W

1 23

78 32

67 5

Page 9: Sebastian Yanez

Opera sobre dos tablas. Si se divide una tabla B por una tabla A, se obtiene una nueva

tabla cuyas columnas serán aquellas de la tabla B que no existen en la tabla A, y cuyas

filas serán tales que cumplan con estar relacionadas con todas y cada una de las filas de la

tabla A. Este caso es más difícil de visualizar, pero se puede entender analizando en

detalle el siguiente ejemplo:

La columna INDICE es la única de la tabla B que no existe en la tabla A, y el valor 15% es

el único valor de la misma que aparece en filas que se relacionan con todas las filas de la

tabla A, es decir, las filas en las que CODIGO toma los valores 1425, 2000 y 3000, que son

todos los que aparecen en la tabla A.

En mySQL versión 5 no existe una implementación directa del operador de división, por lo

que, al igual que en los otros casos en que no existe un operador en forma directa, se lo

debe implementar combinando condiciones y otros operadores que sí están disponibles.

En el caso del ejemplo, podría usarse:

SELECT DISTINCT X.indice FROM bb X WHERE NOT EXISTS ( SELECT Y.codigo FROM aa Y WHERE NOT EXISTS ( SELECT Z.codigo FROM bb Z WHERE Z.codigo=Y.codigo AND Z.indice=X.indice ) )

Autor: -9 - 2015

TABLA A

CODIGO

1425

2000

3000

TABLA B

CODIGO INDICE

1425 15%

2000 27%

3000 33%

2128 45%

2121 13%

2000 15%

3000 15%

B DIVIDIDA POR A

INDICE 15%

Page 10: Sebastian Yanez

9. ASIGNACIÓN

Opera sobre una única tabla, y se utiliza para asignar valores a algunas columnas de

algunas filas de la misma, tal como se muestra en el siguiente ejemplo:

TABLA A

CODIGO INDICE1425 15%2000 27%3000 33%2128 45%2121 13%2000 15%3000 15%

En este ejemplo, mediante una operación de

asignación se modifica la tabla fijando un valor igual a '100%' para la columna INDICE, en

las filas en las que el valor de la columna CODIGO es mayor que 2000.

En el caso del ejemplo, podría usarse la sentencia:

UPDATE A SET indice='100%' WHERE codigo>2000

Secuencias de operaciones del álgebra relacional

En muchos casos, para formular una consulta en álgebra relacional es preciso utilizar

varias operaciones, que se aplican en un cierto orden.

Para hacerlo, hay dos posibilidades:

1) Utilizar una sola expresión del álgebra que incluya todas las operaciones con los

paréntesis necesarios para indicar el orden de aplicación.

Autor: -10 - 2015

TABLA A MODIFICADA

CODIGO INDICE

1425 15%

2000 27%

3000 100%

2128 100%

2121 100%

2000 15%

3000 100%

Page 11: Sebastian Yanez

2) Descomponer la expresión en varios pasos donde cada paso aplique una sola operación

y obtenga una relación intermedia que se pueda utilizar en los pasos subsiguientes.

APORTE PERSONAL

Se puede deducir que estas operaciones son de mucha importancia ya que estos nos sirven para realizar consultas muy detalladas para que nos den como resultado los datos que el usuario requiere.

Aquí les compartiré una imagen que nos indica de donde sale cada uno de los código para consultas:

UNIÓN

Es la recolección de todos los datos que se tiene de dos o más tablas además se la aplican a las tuplas que tengas relaciones similares.

Sintaxis:

Select * fromt1 unión

Select * fromt2

Ejemplo:

use fche;

select fecha_hora_inicio_uso from uso union select nombre_equipo from equipos;

Autor: -11 - 2015

Page 12: Sebastian Yanez

INTERSECCIÓN

Es la colección de los datos que están en ambas tuplas y esta devuelve una nueva tupla con todos los datos que estaban en las tablas, pero en mysql la intersección no existe y

Sintaxis:

Select * from ta

Inner join tb on ta.campo = tb.campo

Ejemplo:

use fche;

select cod_sem

from semestre

inner join estudiantes on semestre.cod_sem = estudiantes.cod_sem_pert;

Bibliografía

http://site.ebrary.com/lib/utasp/reader.action?docID=11046864

http://site.ebrary.com/lib/utasp/reader.action?docID=10433887

http://site.ebrary.com/lib/utasp/reader.action?docID=10741625

Autor: -12 - 2015

Page 13: Sebastian Yanez

http://site.ebrary.com/lib/utasp/reader.action?docID=10732589

http://www.scielo.org.co/scielo.php?script=sci_arttext&pid=S0123-30332013000200012&lang=pt

Autor: -13 - 2015