Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Una base de datos relacional consiste en un conjunto de relaciones, a cada una de las
cuales se le asigna un nombre nico. SQL permite el uso de valores nulos para indicar
que el valor o bien es desconocido, o no existe. Se fijan criterios que permiten al usuario
especificar a qu atributos no se puede asignar valor nulo, si fuera necesario.
Estas relaciones, tienen el nombre de tablas, que es la base del almacenamiento y forma
de estructuracin de la informacin. En la prctica lo que uno obtiene del servidor es
alguna especie de tabla, la cual debe examinar para extraer la informacin til. Muchas
veces la informacin a utilizar es indirecta, por ejemplo, la cantidad de filas de la tabla
obtenida, ms all de su contenido.
Figura 1
La idea es conectarse a una base de datos, del tipo MySQL, que oficia de servidor,
utilizando un cliente grfico, de nombre HeidiSQL.
Esto permite usar una sola base, con varios clientes simultneos. Para conectarse, se
necesitan datos de acceso, que se brindan durante la clase.
Mi primera tabla
La forma de crear una tabla, puede ser usando un cliente grfico, o por medio de lenguaje
de consultas/comandos SQL. En el esquema 1 se ve el cdigo SQL para crear una tabla.
Esto se puede usar como una orden que se enva al servidor, y cuyo resultado debe ser la
aparicin de una nueva table en el esquema de informacin de la base.
Esquema 1
De esta forma nos queda creada una tabla, de 4 columnas. La idea es poder guardar
informacin de contacto de las personas, a modo de ejemplo.
La clusula SELECT
La estructura bsica de una expresin SQL consiste en tres clusulas:
A 1 , A 2 ,, A n ( P ( r 1 r 2 r m ))
SQL forma el producto cartesiano de las relaciones incluidas en la clusula from, lleva a
cabo la seleccin del lgebra relacional usando el predicado de la clusula where y
entonces proyecta el resultado sobre los atributos de la clusula select. En la prctica,
SQLpuede convertir la expresin en una forma equivalente que puede ser procesada ms
eficientemente.
Los lenguajes formales de consulta estn basados en la nocin matemtica de que una
relacin es un conjunto. As, nunca aparecen tuplas duplicadas en las relaciones. En la
prctica, la eliminacin de duplicados consume tiempo. Sin embargo, SQL (como la
mayora de los lenguajes de consulta comerciales) permite duplicados en las relaciones,
as como en el resultado de las expresiones SQL. As, mirando el Esquema 2, la consulta:
listar cada nombre-sucursal una vez por cada tupla en la que aparece en la relacin
prstamo.
Para poder traer tuplas sin repeticin, podemos usar el adicional distinct
Obtener todos los nmeros de prstamo para prstamos hechos en la sucursal con
nombre Navacerrada, en los que el importe sea superior a 1.200 .
select nmero-prstamo
from prstamo
where nombre-sucursal = Navacerrada
and importe > 1200
SQL usa las conectivas lgicas and, or y not (en lugar de los smbolos matemticos ,
y ) en la clusula where. Los operandos de las conectivas lgicas pueden ser
expresiones que contengan los operadores de comparacin <, <=, >, >=, = y <>.
SQL permite usar los operadores de comparacin para comparar cadenas y expresiones
aritmticas, as como tipos especiales, tales como el tipo fecha.
SQL incluye un operador de comparacin between para simplificar las clusulas where
que especifica que un valor sea menor o igual que un valor y mayor o igual que otro valor.
select nmero-prstamo
from prstamo
where importe between 90000 and 100000
select nmero-prstamo
from prstamo
where importe <= 100000 and importe >= 90000
Los patrones son muy sensibles, esto es, los caracteres en maysculas no encajan con
los caracteres en minscula, o viceversa. Para ilustrar el encaje de patrones,
considrense los siguientes ejemplos:
Para listar en orden alfabtico todos los clientes que tienen un prstamo en la sucursal
Navacerrada se escribir:
Para ejecutar una consulta que contiene la clusula order by, SQL tiene que llevar a cabo
una ordenacin. Como ordenar un gran nmero de tuplas puede ser costoso, es
conveniente ordenar slo cuando sea estrictamente necesario.
Funciones de Agregacin
Las funciones de agregacin son funciones que toman una coleccin (un conjunto o
multiconjunto) de valores como entrada y producen un nico valor como salida.
SQL proporciona cinco funciones de agregacin primitivas:
Media: avg
Mnimo: min
Mximo: max
Total: sum
Cuenta: count
La entrada a sum y avg debe ser una coleccin de nmeros, pero los otros operadores
pueden operar sobre colecciones de datos de tipo no numrico, tales como las cadenas.
El resultado de esta consulta ser una relacin con un nico atributo, que contendr una
nica fila con un valor numrico correspondiente al saldo medio de la sucursal
Navacerrada. Opcionalmente se puede dar un nombre al atributo resultado de la relacin,
usando la clusula as.
Existen situaciones en las cuales sera deseable aplicar las funciones de agregacin no
slo a un nico conjunto de tuplas sino tambin a un grupo de conjuntos de tuplas; esto
se especifica en SQL usando la clusula group by.
Las tuplas con el mismo valor en todos los atributos especificados en la clusula group
by se colocan en un grupo.
A veces es ms til establecer una condicin que se aplique a los grupos que una que se
aplique a las tuplas. Por ejemplo, podemos estar interesados slo en aquellas sucursales
donde el saldo medio de cuentas es superior a 1.200 . Esta condicin no es aplicable a
una nica tupla; se aplica a cada grupo construido por la clusula group by. Para
expresar este tipo de consultas se utiliza la clusula having de SQL.
A veces se desea tratar la relacin entera como un nico grupo. En casos de este tipo no
se usa la clusula group by. Considrese la consulta
Con mucha frecuencia se usa la funcin de agregacin count para contar el nmero de
tuplas de una relacin. La notacin para esta funcin en SQL es count(*).
Valores NULOS
El predicado is not null pregunta por la ausencia de un valor nulo. El uso de un valor nulo
en las operaciones aritmticas y de comparacin causa varias complicaciones. Aqu se
describe cmo maneja SQL los valores nulos.
Dado que el predicado en una clusula where puede incluir operaciones booleanas tales
como and, or y not sobre los resultados de las comparaciones, las definiciones de estas
operaciones se extienden para manejar el valor desconocido, a saber:
Los valores que van a ser sumados en la consulta anterior incluyen valores nulos, puesto
que algunas tuplas tienen valor nulo para el atributo importe. En lugar de decir que la
suma total es nula, la norma SQL establece que el operador sum debera ignorar los
valores nulos de su entrada.
En general, las funciones de agregacin tratan los valores nulos segn la regla siguiente:
todas las funciones de agregacin excepto count(*) ignoran los valores nulos de la
coleccin de datos de entrada. Como resultado de ignorar los valores nulos, la coleccin
de valores de entrada puede resultar vaca. El clculo de count de una coleccin vaca se
define como 0 y todas las dems operaciones de agregacin devuelven un valor nulo
cuando se aplican sobre una coleccin de datos vaca. El efecto de los valores nulos en
algunas de las construcciones ms complicadas de SQL puede ser ms sutil.
Esto no es complicado, al momento de definir las tablas, a los campos que no se desean
nulos, se marca en la construccin de la tabla el modificador NOT NULL al momento de
crear esos campos.