Sei sulla pagina 1di 9

Sistemas de Base de Datos

Modelo Relacional y Lenguajes de Consulta

Los lenguajes formales proporcionan una notacin concisa para la representacin de


consultas. Sin embargo, los sistemas de bases de datos comerciales necesitan un
lenguaje de consultas cmodo para el usuario. En este captulo se estudia el lenguaje
comercial de mayor influencia, SQL. SQL usa una combinacin de lgebra relacional y
construcciones del clculo relacional.

Aunque el lenguaje SQL se considere un lenguaje de consultas, contiene muchas otras


capacidades adems de la consulta en bases de datos. Incluye caractersticas para definir
la estructura de los datos, para la modificacin de los datos en la base de datos y para la
especificacin de restricciones de seguridad.

No se pretende proporcionar un manual de usuario completo para SQL. Por el contrario,


se presentan las construcciones y conceptos fundamentales de SQL. Las distintas
implementaciones de SQLpueden diferenciarse en detalles, o pueden admitir slo un
subconjunto del lenguaje completo.

IBM desarroll la versin original en su Laboratorio de Investigacin de San Jos (San


Jos Research Center, actualmente Centro de Investigacin de Almadn, Almadn
Research Center). IBM implement el lenguaje, originalmente denominado Sequel, como
parte del proyecto System R, a principios de 1970. El lenguaje Sequel ha evolucionado
desde entonces y su nombre ha pasado a ser SQL (Structured Query Language,
Lenguaje estructurado de consultas).
Actualmente, numerosos productos son compatibles con el lenguaje SQL. SQL se ha
establecido como el lenguaje estndar de bases de datos relacionales.

En 1986, ANSI (American National Standards Institute, Instituto Nacional Americano de


Normalizacin) e ISO (International Standards Organization, Organizacin Internacional
de Normalizacin), publicaron una norma SQL, denominada SQL-86. Posteriormente
aparecen nuevas revisiones, en 1989, 1992, 1999. La versin ms soportada en la
industria es la de 1992, llamada tambin SQL-92.

En el lenguaje SQL podemos encontrar varios componentes:

Lenguaje de definicin de datos (LDD).


Lenguaje interactivo de manipulacin de datos (LMD).
Definicin de vistas.
Control de transacciones.
SQL incorporado y SQL dinmico.
Integridad.
Autorizacin y Permisos

Base de Datos 2016


Pag 1
Estructura bsica de almacenar la informacin

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.

Prctica inicial sobre una base de datos

Este es el esquema de trabajo, y las herramientas involucradas

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.

Base de Datos 2016


Pag 2
CREATE TABLE `agenda_minombre` (
`nombre` VARCHAR(50) NULL DEFAULT NULL,
`domicilio` VARCHAR(150) NULL DEFAULT NULL,
`telefono` VARCHAR(50) NULL DEFAULT NULL,
`email` VARCHAR(100) NULL DEFAULT NULL
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;

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.

Luego, la idea es poder ir agregando informacin, modificar lo ya ingresado, y


eventualmente borrar informacin.

Formas de consultar informacin


La mayor parte de la informacin, por no decir toda, reside dentro de las tablas. Para
poder recuperar esa informacin disponemos de sentencias SQL que luego de
ejecutarlas, obtenemos como resultado una estructura con forma de tabla, es decir con
filas y columnas, y dentro de esa estructura est la informacin que devuelve la sentencia.

La clusula SELECT
La estructura bsica de una expresin SQL consiste en tres clusulas:

select, from y where

La clusula select corresponde a la operacin proyeccin del lgebra relacional. Se


usa para listar los atributos deseados del resultado de una consulta.

La clusula from corresponde a la operacin producto cartesiano del lgebra


relacional. Lista las relaciones que deben ser analizadas en la evaluacin de la
expresin.

La clusula where corresponde al predicado seleccin del lgebra relacional. Es un


predicado que engloba a los atributos de las relaciones que aparecen en la
clusula from.

Un hecho histrico desafortunado es que el trmino select tiene un significado diferente


en SQLque en el lgebra relacional. A continuacin se resaltan las diferentes
interpretaciones, a fin de minimizar la posible confusin.

Una consulta tpica en SQL tiene la forma

Base de Datos 2016


Pag 3
select A1 , A 2 ,, A n
from r1 , r2 ,, rn
where P

Cada Ai representa un atributo, y cada ri una relacin. P es un predicado. La consulta es


equivalente a la expresin del lgebra relacional

A 1 , A 2 ,, A n ( P ( r 1 r 2 r m ))

Si se omite la clusula where, el predicado P es cierto. Sin embargo, con diferencia a la


expresin del lgebra relacional, el resultado de la consulta SQL puede contener varias
copias de algunas tuplas. Se denomina tupla al contenido de una fila del resultado.

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.

Esquema 2 - Informacin ingresada en dos tablas, prestamo y prestatario.

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:

Base de Datos 2016


Pag 4
select nombre-sucursal
from prstamo

listar cada nombre-sucursal una vez por cada tupla en la que aparece en la relacin
prstamo.

Opciones de la clusula SELECT

Para poder traer tuplas sin repeticin, podemos usar el adicional distinct

select distinct nombre-sucursal


from prstamo

Para traer todas las tuplas, se puede colocar all

Filtrando el resultado con where

A continuacin se ilustra con un ejemplo el uso de la clusula where en SQL.


Considrese la consulta

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 .

Esta consulta puede escribirse en SQL como

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.

Si se desea obtener el nmero de prstamo de aquellos prstamos por importes entre


90.000 y 100.000 , se puede usar la comparacin between para escribir

select nmero-prstamo
from prstamo
where importe between 90000 and 100000

Base de Datos 2016


Pag 5
en lugar de

select nmero-prstamo
from prstamo
where importe <= 100000 and importe >= 90000

De forma anloga, se puede usar el operador de comparacin not between.

Operaciones sobre cadenas


La operacin ms usada sobre cadenas es el encaje de patrones, para el que se usa el
operador like. Para la descripcin de patrones se utilizan los dos caracteres especiales
siguientes:

Tanto por ciento (%): El carcter % encaja con cualquier subcadena.


Subrayado (_): El carcter _ encaja con cualquier carcter.

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:

Nava%encaja con cualquier cadena que empiece con Nava.


%cer% encaja con cualquier cadena que contenga cer como subcadena, por
ejemplo Navacerrada, Cceresy Becerril.

Orden de salida de las tuplas


SQL ofrece al usuario cierto control sobre el orden en el cual se presentan las tuplas de
una relacin. La clusula order by hace que las tuplas resultantes de una consulta se
presenten en un cierto orden.

Para listar en orden alfabtico todos los clientes que tienen un prstamo en la sucursal
Navacerrada se escribir:

select distinct nombre_cliente


from prestatario, prstamo
where prestatario.nmero-prstamo = prstamo.nmero-prstamo
and nombre-sucursal = Navacerrada
order by nombre-cliente

De manera predeterminada la clusula order by lista los elementos en orden ascendente.


Para especificar el tipo de ordenacin se puede incluir la clusula desc para orden
descendente o asc para orden ascendente. Adems, se puede ordenar con respecto a
ms de un atributo. Si se desea listar la relacin prstamo en orden descendente para
importe. Si varios prstamos tienen el mismo importe, se ordenan ascendentemente
segn el nmero de prstamo. Esta consulta en SQL se escribe del modo siguiente:

Base de Datos 2016


Pag 6
select *
from prstamo
order by importe desc, nmero-prstamo asc

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.

Como ejemplo, considrese la consulta:

Obtener la media de saldos de las cuentas de la sucursal Navacerrada.

Esta consulta se puede formular del modo siguiente:

select avg (saldo)


from cuenta
where nombre-sucursal = Navacerrada

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.

El atributo o atributos especificados en la clusula group by se usan para formar grupos.

Las tuplas con el mismo valor en todos los atributos especificados en la clusula group
by se colocan en un grupo.

Como ejemplo, considrese la consulta

Base de Datos 2016


Pag 7
Obtener el saldo medio de las cuentas de cada sucursal.

Dicha consulta se formular del modo siguiente:

select nombre-sucursal, avg (saldo)


from cuenta
group by nombre-sucursal

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.

Los predicados de la clusula having se aplican despus de la formacin de grupos, de


modo que se pueden usar las funciones de agregacin. Esta consulta se expresa en SQL
del modo siguiente:

select nombre-sucursal, avg (saldo)


from cuenta
group by nombre-sucursal
having avg (saldo) > 1200

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

Obtener el saldo medio de todas las cuentas.

Esta consulta se formular del modo siguiente:

select avg (saldo)


from cuenta

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(*).

As, para encontrar el nmero de tuplas de la relacin cliente, se escribir:

select count (*)


from cliente

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.

El resultado de una expresin aritmtica (incluyendo por ejemplo +,, * o /) es nulo si


cualquiera de los valores de entrada es nulo.

Base de Datos 2016


Pag 8
SQL trata como desconocido el resultado de cualquier comparacin que implique
un valor nulo (aparte de is null e is not null).

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:

and: el resultado de cierto and desconocido es desconocido, falso and


desconocido es falso, mientras que desconocido and desconocido es
desconocido.

or: el resultado de cierto or desconocido es cierto, falso or desconocido es


desconocido, mientras que desconocido or desconocido es desconocido.

La existencia de valores nulos tambin complica el procesamiento de los operadores de


agregacin. Supngase que algunas tuplas en la relacin prstamo tienen valor nulo para
el atributo importe. Considrese en ese caso la siguiente consulta, que calcula el total de
todas las cantidades prestadas:

select sum (importe)


from prstamo

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.

Esta complicacin permite establecer una buena prctica al momento de disear un


esquema de datos, que es no permitir el ingreso de valores nulos en los campos de
las entidades donde se debern realizar algn tipo de clculo.

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.

Base de Datos 2016


Pag 9

Potrebbero piacerti anche