Álgebra Relacional
Álgebra Relacional
- Conj. de operaciones de ALTO NIVEL que permiten manejar los datos de una DB relacional.
- Funciona en base a OPERADORES sobre RELACIONES
- Sea f un operador relacional, y r1 una relación, si:
f(r1) = r2; entonces r2 es una relación. - Propiedad de clausura:
Relación 1
Relación 2
Operador
Operación: RESTRICCION
Devuelve una relación conteniendo las tuplas que cumplen con una determinada condición
Operación: RESTRICCION
SQL: select * from <relacion> where <condicion>
- Encabezado resultante idéntico al encabezado de entrada. (opera sobre filas)
- La condición es una expresion booleana.
σp(R)
p: condición
R: relación
Operación: RESTRICCION
SQL: select * from tab_alumnos where edad<25
| id | nombre | edad |
|---|---|---|
| 1 | John | 20 |
| 2 | Deby | 28 |
| 3 | Karen | 22 |
| 4 | Diana | 14 |
| 5 | Carl | 27 |
| id | nombre | edad |
|---|---|---|
| 1 | John | 20 |
| 3 | Karen | 22 |
| 4 | Diana | 14 |
Ej:
σedad<25(tab_alumnos)
Operación: PROYECCION
Devuelve una relación conteniendo todas las (sub)tuplas que quedan en una determinada relación luego de quitar determinados atributos
Operación: PROYECCIÓN
SQL: select distinct <atr_1,...atr_n> from <relacion>
- Devuelve la misma relación sólo dejando los atributos elegidos. (opera sobre columnas).
- Formalmente hablando, quita todos los resultados repetidos.
ΠA1...An(R)
A1...An: atributos
R: relación
Operación: RESTRICCION
SQL: select distinct compania from tab_cliente
| id | nombre | compania |
|---|---|---|
| 1 | John | Claro |
| 2 | Deby | Claro |
| 3 | Karen | Movistar |
| 4 | Diana | Claro |
| 5 | Carl | Personal |
| compania |
|---|
| Claro |
| Movistar |
| Personal |
ej: Πcompania(tab_cliente)
Operación: PRODUCTO CARTESIANO
Devuelve una relación equivalente a la combinación de todas las tuplas de dos relaciones
x
Operación: PROD. Cartesiano
SQL: select * from <relacion_1> <relacion_2>
- Si R1 tiene n tuplas con a1 atributos, y R2 tiene m tuplas con a2 atributos. La relación resultante tiene n*m tuplas y a1+a2 atributos.
- Es raro usarse en la prática pero tiene significado teórico.
R1 x R2
R1 y R2 : relaciones
Operación: Prod.Cartesiano
SQL:
select * from user, celular
| id_pers | nombre |
|---|---|
| 1 | John |
| 2 | Deby |
| 3 | Karen |
ej: user x celular
| id_cel | marca | camara |
|---|---|---|
| 1 | Samsung | 5mpx |
| 2 | Nokia | 8mpx |
| id_pers | nombre | id_cel | marca | camara |
|---|---|---|---|---|
| 1 | John | 1 | Samsung | 5mpx |
| 2 | Deby | 1 | Samsung | 5mpx |
| 3 | Karen | 1 | Samsung | 5mpx |
| 1 | John | 2 | Nokia | 8mpx |
| 2 | Deby | 2 | Nokia | 8mpx |
| 3 | Karen | 2 | Nokia | 8mpx |
Operación: REUnión Natural
reunión de dos relaciones en la que sólo quedan los casos que relacionan las claves foráneas
⋈
Operación: REUNIÓN Natural
MySQL: select * from <relacion_1> natural join <relacion_2>
- Si R1 tiene a1 atributos y R2 tiene a2 atributos. La relación resultante tiene a1+a2-1 atributos.
- Si no tiene atributos en común (o clave foránea) entonces R1 ⋈ R2 = R1 x R2.
- Es la operación más usada.
R1 ⋈ R2 =
ΠA(σt(R1 x R2))
R1 y R2: relaciones
t: condición de igualdad.
A: todos los atributos menos la clave duplicada
Operación: REUnión Natural
MySQL: select * from usuario natural join celular
| id_pers | nombre | cel |
|---|---|---|
| 1 | John | 1 |
| 2 | Deby | 2 |
| 3 | Karen | 5 |
ej: user ⋈ celular
| id_cel | marca |
|---|---|
| 1 | Samsung |
| 2 | Nokia |
| 3 | Huaweii |
| 4 | LG |
| 5 | Motorola |
| id_pers | nombre | cel | marca |
|---|---|---|---|
| 1 | John | 1 | Samsung |
| 2 | Deby | 2 | Nokia |
| 3 | Karen | 5 | Motorola |
⋈
select distinct id_pers, nombre, cel, marca from usuario, celular where usuario.id_pers = celular.id_celOperaciónes de conjuntos:
union
Obtiene una relación con todas las tuplas que están en una, en otra, o en ambas relaciones.
∪
Operación: UNIÓN
SQL: <relacion_1> union <relacion_2>
- Es equivalente al concepto de Union de la teoría de conjuntos.
- Los esquemas de las relaciones deben ser compatibles: deben poseer igual cantidad y nombres de atributos, y los atributos correspondientes deben estar definidos sobre dominios compatibles.
R1 ∪ R2
R1 y R2: relaciones
Operación: Unión
SQL: select * from profesor union select * from ex_profesor
ej: profesor ∪ ex_profesor
∪
| id_prof | nombre | materia |
|---|---|---|
| 1 | Milfrid | Geografía |
| 2 | Mohamed | Biología |
| id_ex | nombre | cátedra |
|---|---|---|
| 7 | Janna | Literatura |
| 8 | Gerardo | Física |
| 2 | Mohamed | Biología |
| id_prof | nombre | materia |
|---|---|---|
| 1 | Milfrid | Geografía |
| 2 | Mohamed | Biología |
| id_ex | nombre | materia |
|---|---|---|
| 7 | Janna | Literatura |
| 8 | Gerardo | Física |
Operaciónes de conjuntos:
Diferencia
Obtiene una relación con todas las tuplas que están en una y que no están en la segunda.
_
Operación: Diferencia
SQL: <relacion_1> minus <relacion_2>
- Es equivalente al concepto de Diferencia de la teoría de conjuntos.
- Los esquemas de las relaciones deben ser compatibles.
- ¡No es conmutativa!
R1 - R2
R1 y R2: relaciones
MySQL:
select distinct <atr> from <relacion_1>
where <atr> not in (select <atr> from <relacion_2>)Operación: Diferencia
MySQL: select * from profesor where id_prof not in ( select id_ex from ex_profesor )
ej: profesor - ex_profesor
_
| id_prof | nombre | materia |
|---|---|---|
| 1 | Milfrid | Geografía |
| 2 | Mohamed | Biología |
| id_ex | nombre | cátedra |
|---|---|---|
| 7 | Janna | Literatura |
| 8 | Gerardo | Física |
| 2 | Mohamed | Biología |
| id_prof | nombre | materia |
|---|---|---|
| 1 | Milfrid | Geografía |
Operación: Diferencia
MySQL: select * from ex_profesor where id_ex not in ( select id_prof from profesor )
ej: ex_profesor - profesor
_
| id_prof | nombre | materia |
|---|---|---|
| 1 | Milfrid | Geografía |
| 2 | Mohamed | Biología |
| id_ex | nombre | cátedra |
|---|---|---|
| 7 | Janna | Literatura |
| 8 | Gerardo | Física |
| 2 | Mohamed | Biología |
| id_ex | nombre | cátedra |
|---|---|---|
| 7 | Janna | Literatura |
| 8 | Gerardo | Física |
Operaciónes de conjuntos:
Intersección
Obtiene una relación con solo las tuplas que están en ambas relaciones entrantes.
∩
Operación: INTERSECCION
SQL: <relacion_1> intersect <relacion_2>
- Es equivalente al concepto de intersección de la teoría de conjuntos.
- Los esquemas de las relaciones deben ser compatibles.
R1 ∩ R2
R1 y R2: relaciones
MySQL:
select * from <rel1> where <id1> in ( select <id2> from <rel2> )= R1 - (R1 - R2)
Operación: Intersección
MySQL: select * from profesor where id_prof in ( select id_ex from ex_profesor )
ej: profesor ∩ ex_profesor
∩
| id_prof | nombre | materia |
|---|---|---|
| 1 | Milfrid | Geografía |
| 2 | Mohamed | Biología |
| id_ex | nombre | cátedra |
|---|---|---|
| 7 | Janna | Literatura |
| 8 | Gerardo | Física |
| 2 | Mohamed | Biología |
| id_prof | nombre | materia |
|---|---|---|
| 2 | Mohamed | Biología |
Algebra Relacional
By Tato Salvi
Algebra Relacional
- 462