CONVERSION DE ALGEBRA RELACIONAL A SQL Toda expresión en lenguaje SQL está basado en la lógica del algebra relacional. Para explicar la traducción de algebra relacional a lenguaje SQl se utilizan las siguientes tablas.
ESPECIMEN CODIGOESPECIMEN
CODIGOANIMAL (FK)
NOMBREESPECIMEN
1
2
Paloma de castilla
2
2
Paloma Blanca
3
3
León Blanco
4
3
León Real
ANIMAL CODIGOANIMAL
CODIGOGRUPO (FK)
NOMBRECIENTIFICO
1
1
Lepisosteus osseus Peje Lagarto
2
2
Passer domesticus
Gorrion
3
1
Panthera leo
Leon
4
2
Columbido
Paloma
GRUPO CODIGOGRUPO
NOMBREGRUPO Lagarto
1 2
Aves
3
Mamíferos
4
Peces
NOMBRECOMUN
SELECCIÓN σ La selección Sigma en el álgebra relacional corresponde a la sentencia SELECT del lenguaje SQL, seleccionando todas las tuplas que cumplan con el predicado. . El predicado definido en la selección corresponde a la sentencia WHERE del lenguaje SQL. Ejemplo: Para la expresión en álgebra relacional
σ{NOMBRECOMUN =
'Peje Lagarto'}(ANIMAL)
Se realiza una selección de la tabla ANIMAL donde el predicado es que el atributo NOMBRECOMUN sea igual a Peje Lagarto. La traducción de la expresión de álgebra relacional a lenguaje SQL es: SELECT * FROM ZOOLOGICO WHERE NOMBRECOMUN = 'Peje Lagarto'
El resultado de la consulta es el siguiente:
PROYECCION Π La proyección corresponde a seleccionar atributos específicos de una tabla, sin importar cuantas tuplas existan, la proyección mostrara todas las tuplas, pero solamente mostrara los atributos especificados en la proyección. La proyección equivale a realizar un SELECT de atributos específicos en lenguaje SQL. Ejemplo: Para la expresión del algebra relacional: Π{CODIGOANIMAL,NOMBRECIENTIFICO}(ANIMAL)
Se selecciona de la tabla ANIMAL los atributos “CODIGOANIMAL” Y “NOMBRECIENTIFICO”. Al traducir esta expresión al lenguaje SQL obtenemos: SELECT CODIGOANIMAL, NOMBRECIENTIFICO FROM ANIMAL
El resultado de la consulta es el siguiente:
PRODUCTO CARTESIANO × El producto cartesiano realiza un producto entre las tuplas de una tabla y las tuplas de una segunda tabla. Esto equivale a utilizar la sentencia SELECT del lenguaje SQL en dos tablas distintas. Ejemplo: Al tener la siguiente expresión en algebra relacional. ANIMAL × GRUPO
La traducción de esta expresión a algebra relacional es la siguiente: SELECT * FROM ANIMAL, GRUPO El resultado de la consulta es el siguiente:
Por cada tupla de la tabla GRUPO, se repiten todas las tuplas de la tabla ANIMAL
RENOMBRAMIENTO ρ El renombramiento ρ es utilizado para darle un nombre a una expresión en algebra relacional, o para renombrar atributos de una tabla. El renombramiento en lenguaje SQL equivale a utilizar el comando de alias ‘AS’ para poder cambiar el nombre de atributos o tablas. Ejemplo: Para la siguiente expresión: ρ ANIMAL (CA,CG,NCI,NCO) (ANIMAL) Se renombran los atributos de la tabla ANIMAL, código de animal pasa a llamarse CA, Código de grupo pasa a llamarse CG, el nombre científico pasa a llamarse NCI y el nombre común pasa a llamarse NCO. SELECT CODIGOANIMAL AS CA, CODIGOGRUPO AS CG, NOMBRECIENTIFICO AS NCI, NOMBRECOMUN AS NCO FROM ANIMAL
El renombramiento se aplica a la consulta, la tabla original aún existe con su nombre original en sus atributos.
UNION “U” Tal como lo dice es la Unión de dos relaciones compatibles.
Las reglas para el lenguaje SQL son las mismas que para el álgebra relacional, los atributos que serán afectados en la unión deben ser del mismo tanto en una relación/tabla como en la otra. No necesariamente deben ser tablas las que sean afectadas en la unión, también pueden ser resultados de consultas los que pueden unirse mientras sean compatibles.
Ejemplo: Al tener las siguientes tablas: GRUPO
GRUPO2
CODIGOGRUPO
NOMBREGRUPO
CODIGOGRUPO
NOMBREGRUPO
1
Lagarto
5
Anfibio
2
Aves
6
Roedor
3 4
Mamíferos Peces
7 8
Primate Insecto
Al realizar la siguiente operación en algebra relacional: [GRUPO1]
∪ [GRUPO2]
Al convertir esta operación a lenguaje SQL obtenemos: SELECT * FROM GRUPO1 UNION SELECT * FROM GRUPO2
El resultado de la consulta es el siguiente: GRUPO1UGRUPO2 CODIGOGRUPO NOMBREGRUPO 1 Lagarto 2 3 4 5 6 7 8
Aves Mamíferos Peces Anfibio Roedor Primate Insecto
El resultado solo es una consulta, las dos tablas originales siguen intactas, los datos resultantes se mantienen en memoria temporalmente. Al ser CODIGOGRUPO Y NOMBREGRUPO del mismo tipo en las dos relaciones, estas son compatibles por lo tanto pueden unirse.
INTERSECCION ∩ Es la intersección entre tuplas de dos relaciones compatible A y B en las que obtenemos como resultados las tuplas en común que existen entre la relación A y B. Ejemplo: Para la base de datos Zoológico, no es posible una intersección entre la relación ESPECIMEN y la relación ANIMAL, porque sus tuplas no son compatibles en número ni en tipo de atributos. A pesar de eso, ambas relaciones si tienen atributos en común como el código de animal CODIGOANIMAL. Para poder obtener la intersección entre estos atributos en algebra relacional, primero se realiza una proyección para obtener el atributo CODIGOANIMAL de ambas relaciones, una vez realizada la proyección, ambos resultados serán compatibles para una intersección. En algebra relacional la operación final queda de esta forma: [Π{CODIGOANIMAL}(ESPECIMEN)]∩[Π{ CODIGOANIMAL}(ANIMAL)]
Esto equivale a lo siguiente en lenguaje SQL: SELECT CODIGOANIMAL FROM ESPECIMEN INTERSECT SELECT CODIGOANIMAL FROM ANIMAL Como resultado obtenemos lo siguiente:
Lo que quiere decir que existen especímenes cuyo código de animal son 2 y 3 lo que equivale a un gorrión y a un león.
DIFERENCIA Es la diferencia entre dos relaciones compatibles A y B. Al restar B a la relación A obtenemos las tuplas de A que no se encuentran en B. Ejemplo: Para el caso de la base de datos Zoológico, no es posible restar una relación a la otra, pero si es posible extraer atributos de relaciones distintas y realizar una operación de diferencia. Para saber que grupos de clasificación no han sido ingresados en la relación ANIMAL, proyectamos el atributo CODIGOGRUPO de la relación ANIMAL y de la relación GRUPO para luego realizar una operación de diferencia.
En algebra relacional la operación es la siguiente: [Π{CODIGOGRUPO}(GRUPO)]―[Π{CODIGOGRUPO}(ANIMAL)]
Esta operación traducida a lenguaje SQL es la siguiente: SELECT CODIGOGRUPO FROM GRUPO MINUS SELECT CODIGOGRUPO FROM ANIMAL
Obteniendo como resultado el siguiente dato:
Se restan los códigos de grupo de la tabla o relación ANIMAL a los obtenidos de la relación o tabla GRUPO pues esta última es la que tiene todo los grupos y la relación ANIMAL al no tenerlos todos, es lógico que sea la que reste.
JOIN NATURAL * El Join natural equivale a utilizar la sentencia SELECT del lenguaje SQL sin utilizar ninguna condición o predicado, agregando la expresión del JOIN NATURAL a la expresión SQL. Al tener la siguiente expresión en algebra relacional: ANIMAL * GRUPO
Al traducir esta expresión al lenguaje SQL obtenemos: SELECT * FROM ANIMAL NATURAL JOIN GRUPO
El resultado de la consulta es el siguiente:
A pesar de que un Join Natural es un producto cartesiano, en el resultado se eliminan las tuplas repetidas, además de solo dejar las tuplas en las que la tabla ANIMAL si tiene relación con la tabla
GRUPO, es decir en las que el atributo código de grupo de la tabla GRUPO es igual al atributo código de grupo de la tabla ANIMAL.
COMBINACION THETHA JOIN Hace un producto cartesiano de sus dos argumentos y realiza una selección donde las Relaciones R1 y R2 cumplen la condición que impone el predicado P. El predicado es una condición =, >, <, >=, <= uniendo los atributos de R1 con los de R2 mientras la tupla cumpla la condición o predicado.
Ejemplo:
ESPECIMEN θ ESPECIMEN.CODIGOANIMAL >2 ANIMAL Esto en lenguaje SQL es lo siguiente: SELECT * FROM ESPECIMEN JOIN ANIMAL ON ESPECIMEN.CODIGOANIMAL > 2 El resultado de esta consulta es:
El resultado es casi igual que un natural Join pero este cumple el predicado establecido en la operación.
LEFT JOIN La combinación externa izquierda entre dos relaciones R1 y R2 conservando en el resultado todas las tuplas de R1 (de la relación de la izquierda), eliminando los atributos repetidos entre las relaciones. Ejemplo: Para la base de datos Zoológico, al hacer un Join izquierdo entre ESPECIMEN y ANIMAL ESPECIMEN
⋈=
ESPECIMEN.CODIGOANIMAL = ANIMAL.CODIGOANIMAL
ANIMAL
En SQL la consulta es la siguiente: SELECT * FROM ESPECIMEN LEFT JOIN ANIMAL ON ESPECIMEN.CODIGOANIMAL = ANIMAL.CODIGOANIMAL El resultado es el siguiente:
RIGHT JOIN La combinación externa derecha entre dos relaciones R1 y R2 conserva en el resultado todas las tuplas de R2 (de la relación de la derecha), eliminando los atributos repetidos entre las relaciones. ESPECIMEN
⋈=
ESPECIMEN.CODIGOANIMAL = ANIMAL.CODIGOANIMAL
ANIMAL
En lenguaje SQL queda de la siguiente manera SELECT * FROM ESPECIMEN RIGHT JOIN ANIMAL ON ANIMAL.CODIGOANIMAL = ESPECIMEN.CODIGOANIMAL El resultado de la consulta es el siguiente:
En este caso, como se mantienen los datos de la tabla derecha ANIMAL aunque no existan tuplas que tengan relación con ESPECIMEN estas siempre forman parte del resultado, siendo NULL los atributos que provienen de la tabla Izquierda.
ASIGNACION
Al traducir esta expresión a lenguaje SQL obtenemos lo siguiente: SELECT C.NOMBRECOMUN FROM ANIMAL AS C
El resultado de la consulta es el siguiente
El objetivo principal de la asignación es guardar operaciones complejas. Ejemplo: Para la siguiente expresión: CONSULTA ←
σ{CODIGOGRUPO=3}( Π{ CODIGOGRUPO,NOMBRECOMUN}(ANIMAL ⋈
GRUPO))
La conversión de esta expresión a lenguaje SQL es: CREATE TEMPORARY TABLE CONSULTA AS
(
SELECT * FROM (SELECT CODIGOGRUPO.NOMBRECOMUN FROM ANIMAL NATURAL JOIN GRUPO) AS CONSULTA WHERE CONSULTA.CODIGOGRUPO= 3)
El resultado de la consulta es simple
De todas maneras, sea cual sea el resultado, CONSULTA será tratado como la tabla que contenga el resultado de la consulta antes realizada.
OPERADORES LOGICOS Los operadores lógicos AND/OR no cambian a la hora de traducir una expresión en algebra relacional a lenguaje SQL.
OPERADOR AND ^ Utilizado para agregar otro predicado que debe de cumplirse además de uno o más predicados ingresados previamente. Tienen que cumplirse todos los predicados al mismo tiempo. Ejemplo: Para la siguiente expresión en algebra relacional: σ{NOMBRE='Aves' ∧ NOMBRECOMUN = 'paloma' } (ANIMAL * GRUPO)
Al predicado NOMBRE='Aves' Se le asigna un predicado extra por medio del operador lógico AND, representado en algebra por el símbolo “^”. Es posible extender el predicado tanto como sea posible, aunque el resultado dependerá de la lógica de la consulta.
Al convertir esta operación de algebra relacional a lenguaje SQL obtenemos: SELECT * FROM ANIMAL NATURAL JOIN GRUPO WHERE NOMBRE = 'Aves' AND NOMBRECOMUN = 'paloma' Con esta consulta obtenemos el siguiente resultado:
OPERADOR OR ∨ Este operador sirve para establecer una condición en que solo uno de los predicados debe de cumplirse. Ejemplo: Para la siguiente expresión en algebra relacional: σ{NOMBREESPECIMEN= 'Leon blanco' ∨ NOMBREESPECIMEN = 'paloma blanca'}(ESPECIMEN)
Se selecciona de la tabla ESPECIMEN las tuplas que cumplan que el Nombre de espécimen sea “paloma blanca” o el nombre de espécimen sea “León blanco”. La traducción de la expresión anterior a SQL es: SELECT * FROM ESPECIMEN WHERE NOMBREESPECIMEN = 'Leon blanco' OR NOMBREESPECIMEN = 'paloma blanca'
El resultado de la consulta anterior es:
Debido a que dos tuplas cumplen con los predicados, estas dos tuplas fueron devueltas como resultado de la consulta.
OPERADORES MATEMATICOS Operadores que nos sirven para establecer predicados en nuestras expresiones de algebra relacional.
Los operadores son: Mayor o igual ≥: Compara si un atributo es mayor o igual a un valor establecido. Menor o igual ≤: Compara si un atributo es menor o igual a un valor establecido. Diferente ≠: Compara si un atributo es diferente a un valor establecido. Igual =: Compara si un atributo es igual a un valor establecido. Este operador se ha estado utilizando para ejemplos anteriores. Ninguno de estos operadores es diferente a la hora de convertir una expresión a lenguaje SQL.
Ejemplo: A continuación se muestra la diferencia de cada uno de estos operadores.
OPERADOR
Mayor o igual ≥
ALGEBRA RELACIONAL
σ{CODIGOGRUPO≥2} (GRUPO)
SQL SELECT* FROM GRUPO WHERE CODIGOGRUPO >= 2
RESULTADO
Menor o igual ≤
σCODIGOGRUPO≤2}
Diferente ≠
σ{CODIGOGRUPO≠2}
(GRUPO)
(GRUPO)
Igual =
σ{CODIGOGRUPO=2} (GRUPO)
SELECT * FROM GRUPO WHERE CODIGOGRUPO <= 2
SELECT * FROM GRUPO WHERE CODIGOGRUPO <> 2
SELECT * FROM GRUPO WHERE CODIGOGRUPO = 2