Conversion de Algebra Relacional a SQL
Short Description
Descripción: Aprende a convertir algebra relacional a SQL. Lo cual ayuda a la lógica en consultas de base de datos....
Description
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 =, >, =, 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 = 2
RESULTADO
Menor o igual ≤
σCODIGOGRUPO≤2}
Diferente ≠
σ{CODIGOGRUPO≠2}
(GRUPO)
(GRUPO)
Igual =
σ{CODIGOGRUPO=2} (GRUPO)
SELECT * FROM GRUPO WHERE CODIGOGRUPO
View more...
Comments