Relación 1
Relación 2
Operador
Devuelve una relación conteniendo las tuplas que cumplen con una determinada condición
SQL: select * from <relacion> where <condicion>
σp(R)
p: condición
R: relación
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)
Devuelve una relación conteniendo todas las (sub)tuplas que quedan en una determinada relación luego de quitar determinados atributos
SQL: select distinct <atr_1,...atr_n> from <relacion>
ΠA1...An(R)
A1...An: atributos
R: relación
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)
Devuelve una relación equivalente a la combinación de todas las tuplas de dos relaciones
SQL: select * from <relacion_1> <relacion_2>
R1 x R2
R1 y R2 : relaciones
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 |
reunión de dos relaciones en la que sólo quedan los casos que relacionan las claves foráneas
MySQL: select * from <relacion_1> natural join <relacion_2>
R1 ⋈ R2 =
ΠA(σt(R1 x R2))
R1 y R2: relaciones
t: condición de igualdad.
A: todos los atributos menos la clave duplicada
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_celObtiene una relación con todas las tuplas que están en una, en otra, o en ambas relaciones.
SQL: <relacion_1> union <relacion_2>
R1 ∪ R2
R1 y R2: relaciones
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 |
Obtiene una relación con todas las tuplas que están en una y que no están en la segunda.
SQL: <relacion_1> minus <relacion_2>
R1 - R2
R1 y R2: relaciones
MySQL:
select distinct <atr> from <relacion_1>
where <atr> not in (select <atr> from <relacion_2>)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 |
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 |
Obtiene una relación con solo las tuplas que están en ambas relaciones entrantes.
SQL: <relacion_1> intersect <relacion_2>
R1 ∩ R2
R1 y R2: relaciones
MySQL:
select * from <rel1> where <id1> in ( select <id2> from <rel2> )= R1 - (R1 - R2)
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 |