Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
4. VALORES NULOS
ING. TICS
3 C
1. OPERACIONES FUNDAMENTALES DEL ALGEBRA RELACIONAL.
El lgebra relacional es un lenguaje formal con una serie de operadores que trabajan
sobre una o varias relaciones para obtener otra relacin resultado, sin que cambien las
relaciones originales. Tanto los operandos como los resultados son relaciones, por lo que
la salida de una operacin puede ser la entrada de otra operacin. Esto permite anidar
expresiones del lgebra, del mismo modo que se pueden anidar las expresiones
aritmticas. A esta propiedad se le denomina clausura: las relaciones son cerradas bajo el
lgebra, del mismo modo que los nmeros son cerrados bajo las operaciones aritmticas.
En este apartado se presentan los operadores del lgebra relacional de un modo informal.
Las definiciones formales pueden encontrarse en la bibliografa que se comenta al final
del captulo. Primero se describen los ocho operadores originalmente propuestos por
Codd y despus se estudian algunos operadores adicionales que aaden potencia al
lenguaje.
De los ocho operadores, slo hay cinco que son fundamentales: restriccin, proyeccin,
producto cartesiano, unin y diferencia, que permiten realizar la mayora de las
operaciones de obtencin de datos. Los operadores no fundamentales son la
concatenacin (join), la interseccin y la divisin, que se pueden expresar a partir de los
cinco operadores fundamentales.
La restriccin y la proyeccin son operaciones unarias porque operan sobre una sola
relacin. El resto de las operaciones son binarias porque trabajan sobre pares de
relaciones. En las definiciones que se presentan a continuacin, se supone que R y S son
Restriccin
: R WHERE condicin
La restriccin, tambin denominada seleccin, opera sobre una sola relacin R y
da como resultado otra relacin cuyas tuplas son las tuplas de R que satisfacen la
condicin especificada. Esta condicin es una comparacin en la que aparece al
menos un atributo de R, o una combinacin booleana de varias de estas
comparaciones.
Ejemplo 4.1 Obtener todos los empleados con un salario anual superior a 15.000 euros.
PLANTILLA WHERE salario>15000
Ejemplo 4.2 Obtener todos los inmuebles de Castelln con un alquiler mensual de hasta
350 euros.
INMUEBLE WHERE poblacin=`Castelln' AND alquiler<=350
: R[a , ..., a ]
La proyeccin opera sobre una sola relacin R y da como resultado otra relacin
que contiene un subconjunto vertical de R, extrayendo los valores de los atributos
especificados y eliminando duplicados.
Ejemplo 4.3 Obtener un listado de empleados mostrando su nmero, nombre, apellido y
salario.
PLANTILLA [ enum, nombre, apellido, salario]
Puesto
Director
Supervisor
Administ.
Producto cartesiano
: R TIMES S
El producto cartesiano obtiene una relacin cuyas tuplas estn formadas por la
concatenacin de todas las tuplas de R con todas las tuplas de S.
Ejemplo 4.5 Obtener los nombres de los inquilinos y los comentarios que stos han
realizado cuando han visto algn inmueble.
INQUILINO [qnum, nombre, apellido] TIMES VISITA [qnum, inum, comentario]
relacin que tiene como mucho tuplas siendo stas las tuplas que se
encuentran en R o en S o en ambas relaciones a la vez. Para poder realizar esta
operacin, R y S deben ser compatibles para la unin.
Se dice que dos relaciones son compatibles para la unin si ambas tienen la misma
cabecera, es decir, si tienen el mismo nmero de atributos y stos se encuentran
definidos sobre los mismos dominios. En muchas ocasiones ser necesario realizar
proyecciones para hacer que dos relaciones sean compatibles para la unin.
Ejemplo 4.6 Obtener un listado de las reas en las que hay oficinas o inmuebles para
alquilar.
OFICINA[rea] UNION INMUEBLE[rea]
Area
Centro
Grao
Ronda Sur
Rafalafena
Diferencia
: R MINUS S
La diferencia obtiene una relacin que tiene las tuplas que se encuentran en R y
no se encuentran en S. Para realizar esta operacin, R y S deben ser compatibles
para la unin.
Ejemplo 4.7 Obtener un listado de todas las poblaciones en donde hay una oficina y no
hay inmuebles para alquilar.
OFICINA [poblacin] MINUS INMUEBLE [poblacin]
Poblacin
Villarreal
Concatenacin (Join)
: R JOIN S
La concatenacin de dos relaciones R y S obtiene como resultado una relacin
cuyas tuplas son todas las tuplas de R concatenadas con todas las tuplas de S
que en los atributos comunes (que se llaman igual) tienen los mismos valores.
Estos atributos comunes aparecen una sola vez en el resultado.
Ejemplo 4.8 Obtener los nombres y los comentarios que los inquilinos han realizado
cuando han visto algn inmueble.
INQUILINO JOIN VISITA
Esta expresin obtiene el mismo resultado que la expresin final del ejemplo 4.5, ya que
la concatenacin es, en realidad, un producto cartesiano y una restriccin de igualdad
sobre los atributos comunes.
Qnum
Q56
Adems de las operaciones que Codd incluy en el lgebra relacional, otros autores han
aportado otras operaciones para dar ms potencia al lenguaje. Es de especial inters la
agrupacin, tambin denominada resumen, que aade capacidad computacional al
lgebra.
Agrupacin
Los clculos que se pueden realizar sobre los grupos de filas son: suma de los valores de
un atributo ( SUM(a )), media de los valores de un atributo ( AVG(a )), mximo y
Ejemplo 4.11 Obtener el salario total que se gasta en los empleados de cada oficina.
SUMMARIZE PLANTILLA GROUPBY(oficina) ADD SUM(salario) AS salario_total
Oficina Salario_total
O5 48000
O3 54000
O7 18000
y, para cada par <Aj:v[i,j]>, se cumple que v[i,j] es un valor que pertenece dominio(Aj), o
bien un valor especial que denominaremos nulo.
Para seguir la discusin terica utilizaremos un ejemplo de una base de datos para
modelar la actividad docente de los profesores de un departamento. Comenzaremos por
un esquema muy sencillo, con dos relaciones que se muestran a continuacin.
La siguiente sentencia SELECT hace una proyeccin del nombre y los apellidos.
Es importante notar que la siguiente sentencia no devolvera una relacin, ya que tendra
dos tuplas repetidas.
Para asegurar que el resultado es una relacin en el sentido matemtico, hay que utilizar
el modificador DISTINCT.
Los atributos de la seleccin son los mismos que los de la relacin original, y todas las
tuplas de la seleccin cumplen la condicin C. Por ejemplo:
R := DEPARTAMENTOS(grado-experimentalidad >1.0)
La combinacin toma dos relaciones y devuelve una relacin con las tuplas que resultan
de concatenar tuplas de la primera con tuplas de la segunda y despus seleccionar las
que cumplen una condicin de combinacinC. Una combinacin entre las relaciones R y
Q mediante la condicin C se denota como R[C]Q.
DPT:=DEPARTAMENTOS
PROFESORES[D_nombre = DPT.nombre]DPT
En SQL, la combinacin se hace incluyendo ms de una relacin en la clusula FROM, y
la condicin C se coloca como clusula WHERE.
SELECT *
La equicombinacin
Combinacin natural
Cuando se hace una equicombinacin, la relacin resultante tiene los atributos de las dos
relaciones originales. Dado que se est exigiendo igualdad de valores en al menos un
atributo, la relacin resultante tendr atributos con informacin repetida (tantos como
atributos hayan sido comparados en la condicin C). La combinacin natural es una
variante de la equicombinacin donde se eliminan esos atributos superfluos.
En SQL, la combinacin natural puede hacerse combinndola con una proyeccin de los
atributos de las dos relaciones que excluya alguno de los
La unin de dos relaciones devuelve una nueva relacin que contiene todas las tuplas que
aparecan en cualquiera de las relaciones originales, o en ambas.
Se eliminarn las tuplas repetidas. Se entiende que en las dos relaciones no debe
haber tuplas con la misma clave primaria y el resto de la informacin diferente.
UNION
El operador UNION requiere que los atributos de las relaciones devueltas por las dos
SELECT sean del mismo tipo segn el orden de aparicin. Si en una de las tablas este
orden fuese diferente, habra que utilizar una proyeccin que alterase el orden. Los
nombres de atributos de la nueva relacin sern los de la primera SELECT.
La interseccin de relaciones toma dos relaciones y devuelve una relacin con las tuplas
que aparecan en ambas relaciones originales. Como la unin, la interseccin solo puede
aplicarse a relaciones con atributos compatibles.
La siguiente consulta en SQL por tanto debera devolver una relacin vaca:
INTERSECT
El producto cartesiano es una operacin que toma dos relaciones y obtiene una nueva
relacin cuyas tuplas son la concatenacin de las tuplas de la primera relacin con las
tuplas de la segunda. En general, si la primera relacin de entrada tena N tuplas y la
segunda M tuplas, el producto cartesiano produce NM tuplas, aunque en ocasiones
sern menos dado que las tuplas repetidas habrn de eliminarse.
Las operaciones bsicas del lgebra relacional se han ampliado de varias maneras. Una
ampliacin sencilla es permitir operaciones aritmticas como parte de la proyeccin. Una
ampliacin importante es permitir operaciones de agregacin, como el clculo de la suma
de los elementos de un conjunto, o su media. Otra ampliacin importante es la operacin
reunin externa, que permite a las expresiones del lgebra relacional trabajar con los
valores nulos que modelan la informacin que falta.
Proyeccin generalizada
donde E es cualquier expresin del lgebra relacional y F1, F2, , Fn son expresiones
aritmticas que incluyen constantes y atributos en el esquema de E. Como caso especial
la expresin aritmtica puede ser simplemente un atributo o una constante.
Funciones de agregacin
Las funciones de agregacin son funciones que toman una coleccin de valores y
devuelven como resultado un nico valor. Por ejemplo, la funcin de agregacin sum
toma un conjunto de valores y devuelve la suma de los mismos. Por tanto, la funcin sum
aplicada a la coleccin {1, 1, 3, 4, 4, 11} devuelve el valor 24. La funcin de agregacin
avg devuelve la media de los valores. Cuando se aplica al conjunto anterior devuelve el
valor 4. La funcin de agregacin count devuelve el nmero de elementos del conjunto, y
devolvera 6 en el caso anterior. Otras funciones de agregacin habituales son min y
max, que devuelven el valor mnimo y el mximo de la coleccin; en el ejemplo anterior
devuelven 1 y 11, respectivamente. Las colecciones en las que operan las funciones de
agregacin pueden tener valores repetidos; el orden en el que aparezcan los valores no
tiene importancia. Estas colecciones se denominan multiconjuntos. Los conjuntos son un
caso especial de los multiconjuntos, en los que slo hay una copia de cada elemento.
Gsum(sueldo) (trabajo-por-horas)
donde E es cualquier expresin del lgebra relacional; G1, G2, , Gn constituye una lista
de atributos que indican cmo se realiza la agrupacin, cada Fi es una funcin de
agregacin y cada Ai es el nombre de un atributo.
1. Todas las tuplas del grupo tienen los mismos valores para G1, G2, , Gn.
2. Las tuplas de grupos diferentes tienen valores diferentes para G1, G2, , Gn.
Por tanto, los grupos pueden identificarse por el valor de los atributos G1, G2, , Gn. Para
cada grupo (g1, g2, , gn) el resultado tiene una tupla (g1, g2, , gn, a1, a2, , am) donde,
para cada i, ai es el resultado de aplicar la funcin de agregacin Fi al multiconjunto de
valores del atributo Ai en el grupo.
4. VALORES NULOS.
NULL indica que el valor es desconocido. Un valor NULL no es lo mismo que un valor
cero o vaco. No hay dos valores NULL que sean iguales. La comparacin entre dos
valores NULL, o entre un valor NULL y cualquier otro valor, tiene un resultado
desconocido porque el valor de cada NULL es desconocido.
Normalmente, los valores NULL indican que los datos son desconocidos, no aplicables o
que se agregarn posteriormente. Por ejemplo, la inicial de un cliente puede que no sea
conocida en el momento en que ste hace un pedido.
Para comprobar si hay valores NULL en una consulta, use IS NULL o IS NOT NULL
en la clusula WHERE.
Cuando se ven los resultados de la consulta en el Editor de cdigo de SQL Server
Management Studio, los valores null se muestran como NULL en el conjunto de
resultados.
Los valores NULL se pueden insertar en una columna si se indica explcitamente
NULL en una instruccin INSERT o UPDATE, si se deja fuera una columna de una
instruccin INSERT, o bien si se agrega una columna nueva a una tabla existente
con la instruccin ALTER TABLE.
Los valores NULL no se pueden usar en la informacin necesaria para distinguir
una fila en una tabla de otra fila, como, por ejemplo, las claves principales.
En el cdigo del programa, puede comprobar la existencia de valores NULL de forma que
determinados clculos slo se realicen en filas con datos vlidos, o no NULL. Por ejemplo,
un informe slo puede imprimir la columna de seguridad social si en la columna hay datos
que no son NULL. Quitar los valores NULL cuando realiza clculos puede ser importante
porque algunos clculos (como, por ejemplo, un promedio) pueden ser incorrectos si se
incluyen columnas NULL.
Si es probable que haya valores NULL almacenados en los datos y no desea que
aparezcan valores NULL en los datos, debera crear consultas e instrucciones de
modificacin de datos que quiten los valores NULL o los transformen en algn otro valor.
Cuando hay valores NULL en los datos, los operadores lgicos y de comparacin pueden
devolver un tercer resultado UNKNOWN (desconocido) en lugar de simplemente TRUE
(verdadero) o FALSE (falso). Esta necesidad de una lgica de tres valores es el origen de
muchos errores de la aplicacin. En estas tablas se destaca el efecto de escribir
comparaciones con NULL.
TRUE FALSE
UNKNOWN UNKNOWN
FALSE TRUE
El estndar ISO usa las palabras clave IS NULL e IS NOT NULL para comprobar la
presencia de valores NULL.
Transact-SQL ofrece tambin una extensin para el procesamiento de los valores NULL.
Si la opcin ANSI_NULLS tiene establecido el valor OFF, las comparaciones entre los
valores NULL, como NULL = NULL, se evalan como TRUE. Las comparaciones entre
NULL y cualquier valor de datos se evala como FALSE.
Como se mencion al inicio de este apartado del SQL, est cuenta con mdulos DDL,
para la definicin de datos que nos permite crear o modificar la estructura de las tablas.
Los campos pueden definirse como NOT NULL de manera opcional excepto en la llave
primaria para lo cual es obligatorio. Adems al definir la llave primaria se genera
automticamente un ndice con respecto al campo llave; para definir la llave la denotamos
dentro de los parntesis de PRIMARY KEY.
Ejemplo:
Crear la tabla alumno con los atributos antes descritos, tomando como llave el numero
de control.
Tabla Alumno:
Nombre
NControl Especialidad Direccin
A
Ejemplo:
Insertar en la tabla Alumno, antes creada los datos del alumno Daniel coln, con
numero de control 95310518 de la especialidad de Ingeniera civil, con domicilio Abasolo
Norte #45.
INSERT
INTO Alumno
VALUES ("95310518","Daniel Coln","IC","Abasolo Norte #45") ;
Ntese que la insercin de los datos se realiza conforme la estructura que se implanto
en la tabla, es decir en el orden en que se creo dicha tabla. En caso de querer omitir un
dato que no sean no nulos solamente se ponen las comillas indicando el vaco de la
cadena.
Ejemplo:
Este ndice contendr a todos los alumnos ordenados por el campo especialidad.
Ejemplo:
Modificar el nmero de control del registro de Daniel Coln de la Tabla alumno por el
nmero 96310518.
UPDATE Alumno
SET NControl 96310518
WHERE Nombre A=Daniel Coln;
Ejemplo:
Ejemplo:
Borrar el ndice Indice1 creado anteriormente.
DELETE
FROM Nombre de la tabla
WHERE Condicin;
Ejemplos:
DELETE
FROM Alumno
WHERE Control=95310386;
DELETE
FROM Alumno;
En el primer ejemplo, se borrara todo el registro(todos los datos), del alumno con
nmero de control = 95310386.
En el segundo ejemplo se borraran todos los registros de la tabla alumno, pero sin
borrar la estructura de la tabla, ya que la orden Delete solo borra registros, la sentencia
Drop Table es la que borra toda la estructura de la tabla junto con los registros de la
misma.
BIBLIOGRAFIA
Noc ion e s b si c as