Documente Academic
Documente Profesional
Documente Cultură
Bases de Datos
Cartogrficas
Laura Sebasti
Departamento de Sistemas Informticos y Computacin
Objetivos
El objetivo principal de esta asignatura consiste en introducir los conceptos bsicos de los
sistemas gestores de bases de datos actuales, por un lado, y por otro, la utilizacin de las
extensiones para el manejo de datos espaciales que proporcionan estos sistemas como
parte de un sistema de informacin geogrfica. Para ello deberemos ser capaces de:
ser capaces de realizar consultas mediante el lenguaje SQL a una base de datos
general y a una base de datos que integre datos de negocio y datos espaciales
Bibliografa
La bibliografa consultada para elaborar estos apuntes es:
-
Introduccin a los sistemas de bases de datos. C.J. Date, Addison Wesley, 1998
Spatial databases : with application to GIS. Philippe Rigaux, Michel Scholl, Agns
Voisard, Morgan Kaufmann, 2002.
Indice
Unidad temtica 1: Bases de datos relacionales
Tema 1. Introduccin a las bases de datos
17
27
37
45
53
75
79
83
91
95
101
107
111
UNIDAD TEMTICA 1
Bases de datos relacionales
Objetivos
Ser capaces de generar un diseo de base de datos que cumpla los principios bsicos
del modelo relacional
Contenidos
Tema 1. Introduccin a las bases de datos
Tema 2. El modelo Entidad-Relacin
Tema 3. El modelo relacional
Tema 4. Teora de la normalizacin
Introduccin
Definiciones
Insercin
Actualizacin
Recuperacin
BD
Tratamiento
Mantener la integridad de los datos. El concepto integridad de los datos significa que
los datos almacenados en la base de datos son correctos. El control centralizado
tambin permite la posibilidad de mantener controles que garanticen la integridad de
todos los datos almacenados en la BD.
Garantizar la seguridad de los datos. En toda organizacin existen datos que son
confidenciales y no pueden ser accedidos por usuarios no autorizados. El ABD debe
asegurar que se siguen los procedimientos adecuados en el acceso a los datos,
incluyendo esquemas de autentificacin y validaciones adicionales. Los SBD permiten
implantar distintos niveles de seguridad para distintos tipos de usuarios y operaciones.
10
11
Modelos de Datos
4.1
Modelos de diseo
Los modelos de diseo son herramientas para captar y describir la informacin del mundo
real, pero no nos aportan informacin sobre qu tipo de estructuras se utilizarn para
almacenar los datos, qu tipo de operaciones pueden realizarse sobre los mismos, etc.
Estos modelos no pueden implementarse directamente en los sistemas comerciales
conocidos; deben transformarse previamente en un modelo de representacin. Uno de los
ms conocidos es el modelo entidad/relacin, que veremos en el tema 2.
4.2
Modelos de representacin
Los modelos de representacin adems de permitirnos describir los datos del mundo real
cumplen otra serie de requisitos que hacen que puedan implementarse posteriormente en
alguno de los sistemas comerciales conocidos (describen la implementacin en alto nivel):
-
5
!
12
Interacta con el gestor de ficheros del S.O para almacenar los datos de forma
segura y eficiente. Las diferentes sentencias LMD son traducidas a comandos de bajo
nivel para gestionar ficheros; as el SGBD se encarga realmente del almacenamiento,
la recuperacin y actualizacin de la BD.
Sobre las ventajas ya hemos hablado suficientemente a lo largo de este tema. Resumiendo
podemos decir que un SGBD proporciona:
!
Reduccin de redundancias.
Comparticin de datos.
13
Integridad.
Seguridad.
Control de concurrencia.
Con respecto a las desventajas (relacionadas sobre todo con SGBD grandes), debemos
citar las siguientes:
!
15
Introduccin
El modelo Entidad-Relacin fue propuesto por Chen a mediados de los aos setenta como
medio de representacin conceptual de los problemas y para representar la visin de un
sistema de forma global. Fsicamente adopta la forma de un grfico escrito en papel al que
se denomina diagrama Entidad-Relacin. Sus elementos fundamentales son las
entidades y las relaciones.
Entidades
Entidad: Una entidad es una cosa u objeto distinguible de todos los dems, y tiene un
conjunto de propiedades que identifican la identidad. Ejemplo: PARCELA
Atributo: Los atributos describen propiedades que posee cada entidad, y cada atributo
tiene un conjunto de valores permitidos, llamados dominio o conjunto de valores.
Ejemplo: tipo_cultivo, cuyo dominio puede ser (ctricos, via, olivo, ...).
Los atributos se distinguen en:
-
Univalorados y multivalorados: los univalorados tienen un solo valor para una entidad
concreta y los multivalorados tienen un conjunto de valores para una entidad
especfica. Ejemplo: al atributo telfono se le pueden asignar varios valores
correspondiendo al telfono particular, al del trabajo, al mvil, ...
Nulos: se usa cuando una entidad no tiene un valor para un atributo, o el valor es
desconocido.
Derivado: el valor del atributo se puede derivar de los valores de otros atributos.
Ejemplo: el atributo edad se puede derivar del atributo fecha_nacimiento.
Relaciones
Relacin: Una relacin es una asociacin entre diferentes entidades. Ejemplo: las
entidades parcela y propietario se asocian a travs de la relacin pertenece.
Una relacin puede tener tambin atributos descriptivos. Ejemplo: en la relacin
pertenece puede aparecer como atributo la fecha de adquisicin.
3.1
Cada entidad interviene en una relacin con una determinada cardinalidad. Es decir, la
cardinalidad es el nmero de instancias o elementos de una entidad que pueden asociarse
a un elemento de la otra entidad relacionada. La cardinalidad se representa mediante una
pareja de datos de la forma (cardinalidad mnima, cardinalidad mxima). Son posibles las
siguientes cardinalidades: (0,1), (1,1), (0,n), (1,n) y (n,m).
Ejemplos:
!
El tipo de relacin se define tomando los mximos de las cardinalidades que intervienen
en la relacin. Hay tres tipos posibles:
-
Una a una (1:1). En este tipo de relacin, una vez fijado un elemento de una entidad se
conoce el elemento de la otra entidad con el que est relacionado. Por ejemplo, nacin
y ciudad a travs de la relacin es_capital.
Claves
trmino de clave primaria para denotar una clave candidata que es elegida por el diseador
como elemento principal para identificar las entidades (preferiblemente, no debe contener
atributos innecesarios).
Ejemplo: entidad Persona = {dni, num_seg_social, nombre, direccion}
Claves candidatas = { {dni, nombre}, {dni, num_seg_social}, {dni}, {num_seg_social} }
Clave primaria = {dni} Tambin podra haberse elegido {num_seg_social}.
Ejemplos:
1.
Relacin es_capital
Nacion
Ciudad
Es_capital
Nombre
2.
Num_hab
Nombre
Relacin realiza_pedido
Realiza_pedido
Cliente
NIF
Nombre
Pedido
Fecha
Numero
19
3.
Relacin vive
Persona
Vivienda
Vive
DNI
6
6.1
Nombre
Direccion
Caractersticas avanzadas
Entidades fuertes y dbiles
Una entidad fuerte existe por s misma sin depender de la existencia de ninguna otra
entidad. Por el contrario, la existencia de una instancia de una entidad dbil depende de la
existencia previa de otra entidad. Si la entidad dbil puede ser identificada sin necesidad de
identificar previamente la entidad de cuya existencia depende, diremos que la entidad dbil
lo es por existencia nicamente. Si la entidad dbil no puede ser identificada
independientemente, sino que previamente es necesario identificar a la entidad de cuya
existencia depende, diremos que la entidad dbil lo es por identificacin. Es decir, esta
entidad dbil no tiene suficientes atributos para formar una clave primaria. Para que tenga
sentido, debe formar parte de una relacin uno a muchos. El discriminante (clave parcial),
de una entidad dbil es un conjunto de atributos que permite distinguir las entidades que
dependen de una entidad particular fuerte. La clave primaria de una entidad dbil se forma
con la clave primaria de la entidad fuerte de cuya existencia depende, ms el discriminante.
La relacin que asocia el conjunto de entidades dbil con un propietario se llama relacin
de identificacin. Una entidad dbil se indica con un doble rectngulo, y la
correspondiente relacin de existencia mediante una E sobre la lnea que une la entidad
dbil a la relacin con la entidad fuerte. Si la relacin es de identificacin, se indicar
mediante ID. El discriminante se subraya con una lnea discontinua.
Por ejemplo, dado un libro del que se han editado muchos ejemplares, la entidad Ejemplar
(que se identifica mediante un nmero dentro de la edicin) es dbil con respecto a la
entidad Libro.
Pertenece
Libro
Ejemplar
ID
Codigo
20
Titulo
Numero
Ubicacin
6.2
-
Empleado
Dos relaciones entre las mismas entidades. Muy til en el caso de necesitar
almacenar informacin histrica completa. Ejemplo: proyectos en los que trabaja
actualmente un empleado y proyectos en los que ha trabajado anteriormente.
Proyectos
Historico
Actual
Empleado
21
Libro
Autor
paginas
ao
ISBN
Publica
Editorial
Una entidad persona tiene los subtipos hombre y mujer. Una misma persona no
puede ser hombre y mujer a la vez por lo que la relacin es exclusiva. No puede
existir una persona que no sea hombre ni mujer, por lo que tambin es total.
Persona
(0,1)
(1,1)
Hombre
22
(0,1)
(1,1)
Mujer
Pero en la universidad tambin hay por ejemplo, tcnicos o PAS, por lo que la
relacin es parcial.
Universitario
(0,1)
(0,1)
(1,1)
(1,1)
Estudiante
Profesor
Ejercicios
Pertenece
Provincia
industria, turismo, }
Poblacin
N
Pples_ingresos
ID
Nombre
Nombre
Num_hab
L/m2
Nombre
Meses
a)
b)
Hay algn problema porque exista una poblacin llamada Orihuela en Alicante y en
Teruel?
23
c)
d)
Para una misma poblacin, cuntos datos acerca de los l/m2 recogidos podemos
almacenar?
e)
1.
2.
3.
TRAMO (cdigo_tramo)
MANZANA (nmero)
BARRIO (nombre)
b)
c)
d)
e)
f)
b)
c)
24
La informacin de los ros ser la ms completa: adems del nombre, nos interesa
conocer en qu provincia nace, por qu ciudades pasa y en qu mar desemboca. Por
otro lado, tambin queremos saber qu ros son afluentes de otros ros.
25
Introduccin
La teora del modelo de datos relacional fue presentada por el investigador Edgar Codd en
1970 y es el ltimo modelo en el que se ha basado una gran familia de SGBD,
imponindose en la dcada de los ochenta sobre los modelos previos. Actualmente es el
modelo elegido para la construccin de casi todos los SGBD comerciales existiendo ya
muchos disponibles como son ORACLE, INFORMIX, etc.
A grandes rasgos, el modelo relacional se caracteriza por disponer que:
La relacin es el elemento bsico del modelo relacional y se representa por una tabla.
Informalmente, los trminos y sus equivalentes son:
Relacin
Tabla
Tupla
Fila
Atributo
Columna
Nmero de tuplas
Cardinalidad
Nmero de atributos
Grado
Dominio
Clave primaria
Es importante sealar que la tabla es plana en el sentido de que el cruce entre una fila y
una columna slo puede dar un valor, es decir, no se admiten atributos multivaluados. A
cada una de las tablas se le asigna un nombre exclusivo.
Desde el punto de vista de los niveles de una base de datos, la estructura de una base de
datos relacional es la siguiente:
Nivel lgico.
-
Est compuesto por las distintas vistas que tienen los usuarios de la BD total
Lenguajes: DML
Nivel fsico.
-
Lenguajes: DDL
Nivel de almacenamiento.
-
Est compuesto por los ficheros donde se almacenan las tablas del nivel anterior
Nivel
lgico
Nivel
fsico
Nivel de
almacenamiento
VISTA
TABLAS
FICHERO
Tablas
Representan tanto las entidades como las relaciones del modelo E-R.
28
3.1
Claves
Clave candidata: agrupacin de atributos (quizs uno solo) que identifican sin
ambigedad y de forma unvoca todas las posibles tuplas de una tabla.
!
Como mnimo, una clave debe tener un atributo. Como mximo, los que tenga la
tabla.
Siempre hay seguro al menos una clave candidata (la agregacin de todos los
atributos).
Clave ajena: un atributo de una tabla (o agregacin de ellos) puede ser clave primaria
de otra tabla.
!
Los atributos de una clave ajena pueden o no formar parte de la clave primaria de
la tabla a la que pertenecen.
29
Ejemplar
ID
Codigo
Titulo
Numero
Ubicacin
Representacin tabular de las relaciones: se representa mediante una tabla con una
columna por cada atributo formado por la unin de las claves primarias de las
entidades que relaciona ms los atributos descriptivos de la relacin (si los tiene).
!
30
Redundancia de tablas: en general, la tabla para la relacin que une una entidad
dbil con su correspondiente entidad fuerte es redundante y no necesita ser
representada en una representacin tabular de un diagrama E-R.
Atributos multivalorados: para un atributo multivalorado se crea una tabla con una
columna que corresponde a la clave primaria de la entidad o de relaciones al que
pertenece el atributo multivalorado.
4.1
Ejemplos
4.1.1
Relacin realiza_pedido
En esta relacin binaria participan las entidades Cliente y Pedido. Se indica que un cliente
puede realizar muchos pedidos, mientras que un pedido concreto corresponde a un cliente.
Ambas entidades son fuertes.
Realiza_pedido
Cliente
NIF
Nombre
Pedido
Fecha
Numero
Tabla: CLIENTE
CP={NIF}
Atr={Nombre}
CAj={}
Tabla: PEDIDO
CP={Numero}
Atr={fecha, NIF_cliente}
CAj={NIF_cliente}
31
En este caso, se debera haber generado una tabla para la entidad PEDIDO y otra para la
relacin. Sin embargo, seran redundantes y por ello se unen en una sola.
La diferencia entre la representacin tabular de una entidad dbil y de una relacin 1:N es
que, mientras en la entidad dbil la clave de la entidad fuerte pasa a formar parte de la
clave de la entidad dbil, en el caso de relaciones 1:N, la clave de la entidad que forma
parte de la relacin pasa a ser un atributo de la tabla.
4.1.2
Relacin es_capital
Nacion
Ciudad
Es_capital
Nombre
Num_hab
Nombre
Tabla: NACION
CP={nombre_nacion }
Atr={}
CAj={}
Tabla: CIUDAD
CP={nombre_ciudad }
Atr={num_hab}
CAj={}
Tabla: ES_CAPITAL
CP={nombre_nacion, nombre_ciudad}
Atr={}
CAj={nombre_nacion, nombre_ciudad}
En este caso, tenemos esta posibilidad de generar dos tablas, sobretodo si hay otras
entidades con las que tambin se relacionan. Tambin se podra haber generado una nica
tabla conteniendo todos los datos de ambas entidades.
32
4.1.3
Relacin vive
En este caso, tenemos una relacin muchos a muchos entre dos entidades fuertes
(Persona y Vivienda).
Persona
Vivienda
Vive
DNI
Nombre
Direccion
Tabla: PERSONA
CP={DNI}
Atr={nombre}
CAj={}
Tabla: VIVIENDA
CP={direccion}
Atr={}
CAj={}
Tabla: VIVE
CP={DNI, direccion}
Atr={}
CAj={DNI, direccion}
4.2
Restricciones
Integridad de la clave. Ningn atributo de una clave candidata puede tomar valores
nulos. Lgicamente, los atributos que forman la clave candidata han de tomar siempre
valores distintos para cada posible tupla.
2.
definido con el mismo dominio, aunque no obligatoriamente con igual nombre, y que es
parte de su clave primaria. Entonces, T1.a debe ser siempre igual a algn valor ya
contenido en el atributo referenciado en la tabla T2, o bien tomar un valor nulo.
Ejemplo: en la relacin entre clientes y pedidos que realiza cada cliente, podemos
encontrar las siguientes tablas:
PEDIDO
CLIENTES
Numero
Fecha
NIF_cliente
NIF
Nombre
1/3/00
24680246
23456789
4/3/00
23456789
13579135
5/3/00
98765432
24680246
5/3/00
01234567
98765432
3.
Otras restricciones de acuerdo con la semntica concreta del problema. Pueden ser
sencillas, como la especificacin de valores mnimos o mximos que puede tomar un
atributo numrico, lista de valores permitidos de un atributo, o ms complejas como
condiciones sobre valores de los atributos en funcin de valores de otros atributos de
esa u otras tablas. Ejemplos:
!
4.3
4.3.1
Slo se puede insertar una tupla si todos los atributos de la clave primaria tienen valor
no nulo.
Slo se puede insertar una tupla si el conjunto de todos los atributos que forman la
clave primaria toma un valor nico e indito hasta el momento en la tabla.
Slo se puede insertar una tupla si todos los atributos que son claves ajenas de otras
tablas toman valores ya presentes en dichas tablas o bien nulos.
Slo se puede insertar una tupla si todos los valores de los atributos satisfacen todas
las restricciones adicionales que pudieran concernirles.
34
4.3.2
Slo puede modificarse el valor de un atributo si el nuevo valor satisface todas las
restricciones adicionales que puedan afectarle.
Si el atributo a modificar es parte de una clave ajena en otra tabla, entonces hay que
modificar automticamente el viejo valor que tomaba en dicha tabla por el nuevo valor.
Por ejemplo: si el NIF de Sara Red Corell cambia, deber cambiar en la tabla Pedido.
4.3.3
Al borrar una tupla hay que tener en cuenta que se deben verificar las restricciones de
integridad referencial. Es decir, dadas dos relaciones R y S, tal que R tiene una clave ajena
CA que hace referencia a S, el borrado de una tupla de S causar una violacin de la
integridad referencial si existe alguna tupla de R que hace referencia a ella. En este caso,
es necesario restaurar la integridad referencial y puede realizarse de dos formas,
dependiendo de si existe una relacin de entidad dbil por existencia:
!
Propagar la operacin en cascada sobre las tuplas de R que hacen referencia a la tupla
de S afectada. Es decir, borrar estas tuplas de R.
Modificar a nulo el valor de la clave ajena CA de las tuplas de R que hacen referencia a
la tupla de S afectada.
Ejercicios
Pertenece
Provincia
industria, turismo, }
Poblacin
N
Pples_ingresos
ID
Nombre
Nombre
Num_hab
L/m2
Nombre
Meses
35
DNI
Nombre
Num.S.S.
Calibr_campo
N.factura
Fecha_ini
Fecha_fin
Descripcin
Realiza
Personal
Trabajo
Solicita
Mantenimiento
Utiliza
Fecha_ult_rev
NIF
Aparato
Cliente
Numserie
Modelo
Se alquila
Alquila
N.factura
Fecha_ini
Fecha_fin
Descripcin
Alquiler
36
Introduccin
Cuando se disea una base de datos mediante el modelo relacional, al igual que ocurre en
otros modelos de datos, tenemos distintas alternativas, es decir, podemos obtener
diferentes esquemas relacionales y no todos son equivalentes, ya que algunos van a
representar la realidad mejor que otros. Es necesario conocer qu propiedades debe tener
un esquema relacional para representar adecuadamente una realidad y cules son los
problemas que se pueden derivar de un diseo inadecuado.
El esquema relacional puede obtenerse de dos formas distintas:
!
Ambigedades
Prdida de informacin
En conclusin, el esquema relacional obtenido debe ser analizado para comprobar que no
presenta los problemas anteriores. Para ello, veremos en primer lugar, algunos ejemplos de
anomalas que se pueden presentar. Despus, introduciremos las formas normales y las
aplicaremos en un ejemplo.
AUTOR
NACIONALIDAD
COD_LIBRO
TITULO
EDITORIAL
AO
Date, C.
Norteamericana
98987
Database
Addison
1990
Date, C.
Norteamericana
97777
SQL Stan
Addison, W.
1986
Date, C.
Norteamericana
98987
Guide for
Addison, W.
1988
Codd,E.
Norteamericana
7890
Relational
Addison,W.
1990
Gardarin
Francesa
12345
Basi Dati
Paraninfo
1986
Gardarin
Francesa
67890
Comp BD
Eyrolles
1984
Valduriez
Francesa
67890
Comp BD
Eyrolles
1984
Kim,W.
Norteamericana
11223
BD OO
ACM
1989
Lochovsky
Canadiense
11223
BD OO
ACM
1989
Redundancia, ya que la nacionalidad del autor se repite por cada ocurrencia del mismo.
Lo mismo sucede cuando un libro tiene ms de un autor, se repite la editorial y el ao
de publicacin.
Anomalas de modificacin, es fcil cambiar el nombre de una editorial en una tupla sin
modificar el resto de las que corresponden al mismo libro, lo que da lugar a
incoherencias.
Anomalas de insercin, ya que si queremos aadir informacin de algn autor, del que
no hubiera ningn libro en la base datos, no sera posible, ya que cod_libro es parte de
la clave primaria de la relacin (regla de integridad de la entidad). La insercin de un
libro, que tiene dos autores obliga a insertar dos tuplas en la relacin.
En los casos anteriores, se deja en manos del usuario manejar la integridad de la base de
datos.
38
La normalizacin introduce una tcnica formal para disear bases de datos relacionales, y
permite mecanizar parte del proceso al disponer de algoritmos de normalizacin. Una
observacin importante es que las anomalas antes descritas se producen en procesos de
actualizacin y no en procesos de consulta. La normalizacin penaliza las consultas, al
disminuir la eficiencia, ya que la normalizacin aumenta el nmero de relaciones presentes
en la base de datos, por lo que una determinada consulta puede llevar consigo el acceso a
varias tablas, lo que aumenta el costo de sta.
Primera Forma Normal (1FN) fue introducida por Codd, en su primer trabajo. Es una
restriccin inherente al modelo relacional por lo que su cumplimiento es obligatorio.
Consiste en la prohibicin de que en una relacin existan grupos repetitivos, es decir,
un atributo no puede tomar ms de un valor del dominio subyacente.
Segunda Forma Normal (2FN), fue introducida por Codd. Una relacin est en 2FN, si
adems de estar en 1FN, todos los atributos que no forman parte de ninguna clave
candidata suministran informacin acerca de la clave completa.
Se puede observar que ciertos atributos que no forman parte de las claves candidatas,
tal como la editorial, constituye informacin acerca del libro, pero no acerca de la clave
completa. Luego, la relacin PRESTAMO no se encuentra en 2FN.
Tercera Forma Normal (3FN), propuesta por Codd. Una relacin est en 3FN, si
adems de estar en 2FN, los atributos que no forman parte de ninguna clave candidata
facilitan informacin slo acerca de la(s) clave(s) y no acerca de otros atributos.
Forma Normal de Boyce y Codd (FNBC). La relacin PRESTAMO1, que est en 3FN,
todava presenta anomalas, ya que num_socio y nombre_socio, se repiten
innecesariamente por cada cod_libro. Una relacin est en FNBC si y solo si, todos los
atributos de las claves candidatas informan acerca del resto de claves candidatas
completas.
En la relacin PRESTAMO1, num_socio es informacin acerca de nombre_socio y
viceversa. Ninguno de estos atributos son clave (aunque formen parte de la clave).
Para solucionarlo la descomponemos:
SOCIO( num_socio, nombre_socio )
PRESTAMO2( num_socio, cod_libro, fec_prest ),
que estn en FNBC.
Hasta ahora nuestro esquema relacional est compuesto por las siguientes relaciones
en FNBC:
40
Ejercicios
Dada la relacin R(estudiante, nro_matricula, curso, centro, profesor, texto) con las
siguientes restricciones:
a)
b)
Un estudiante tiene un nmero de matricula distinto para cada curso en el que est
matriculado
c)
d)
e)
Un curso es impartido por un solo profesor, pero un profesor puede impartir varios
cursos
f)
41
Unidad temtica 2:
Gestin de Bases de Datos
Relacionales
Objetivos
-
Contenidos
Tema 5. Introduccin al lenguaje SQL
Tema 6. Lenguaje de manipulacin de datos
Tema 7. Lenguaje de definicin de datos
Introduccin
Comandos
los DDL (Data Definition Language) o LDD que permiten crear y definir nuevas
bases de datos, campos e ndices.
los DML (Data Manipulation Language) o LMD que permiten generar consultas
para ordenar, filtrar y extraer datos de la base de datos.
Descripcin
CREATE
DROP
ALTER
Descripcin
SELECT
INSERT
UPDATE
DELETE
Clusulas
Las clusulas son condiciones de modificacin utilizadas en los comandos para definir los
datos que se desea seleccionar o manipular. Un resumen de las clausulas disponibles en
SQL son:
Clusula
Descripcin
FROM
WHERE
Utilizada para especificar las condiciones que deben reunir los registros que
se van a seleccionar
GROUP BY
HAVING
ORDER BY
Operadores Lgicos
Uso
AND
OR
NOT
46
Operadores de Comparacin
Uso
<
Menor que
>
Mayor que
<>
Distinto de
<=
>=
Igual que
BETWEEN
LIKE
IN
Funciones de Agregado
Las funciones de agregado se usan dentro de una clusula SELECT donde se han
agrupado los registros para devolver un nico valor por cada grupo de registros. Las ms
usuales son:
Funcin
Descripcin
AVG
COUNT
SUM
MAX
MIN
Esquema a utilizar
En este apartado daremos la definicin de las tablas a utilizar, tanto en los ejemplos de los
prximos temas como en las prcticas de laboratorio. Este esquema est compuesto por 7
tablas que representan una zona rural con dos lagos y tres municipios, en los que se
encuentran diversas casas rurales y servicios como hospital, supermercados, etc., todo ello
47
Lago Abis
C3
Abiside
C4
C2
Abis
C1
Lago Bernacle
C5
Bernacle
Tabla CASA_RURAL
Nombre de Columna
Nulo?
Tipo
DUENYO
DIRECCION
TELEFONO
Clave primaria
VARCHAR2(30)
PRECIO
FECHA_CONSTRUCCION
FECHA_REHABILITACION
MUNICIPIO
DESCRIPCION
48
DATE
NOT NULL CHAR(10)
Clave ajena->MUNICIPIO
VARCHAR2(100)
LOCALIZACION
MDSYS.GEOMETRY
Tabla HABITACION
Nombre de Columna
Nulo?
Tipo
NUM_PLAZAS
BANYO
PRECIO_NOCHE
PRECIO_DTO_3
NUMBER(4,2)
DESCRIPCION
VARCHAR2(100)
COD_CASA
Clave primaria
IN ('S','N')
Tabla MUNICIPIO
Nombre de Columna
Nulo?
Tipo
Clave primaria
CODIGO_POSTAL
NOMBRE
GEOMETRIA
MDSYS.GEOMETRY
Tabla TIPO_SERVICIO
Nombre de Columna
Nulo?
Tipo
DESCRIPCION
Clave primaria
VARCHAR2(30)
Esta tabla recoge los servicios que puedan resultar necesarios. Por ejemplo, supermercado,
centro de salud, hospital, farmacia, etc. A cada uno de ellos, se le asigna un cdigo.
Tabla SERVICIO
Nombre de Columna
Nulo?
Tipo
TIPO
CHAR(15)
Clave ajena->TIPO_SERVICIO
DESCRIPCION
VARCHAR2(50)
LOCALIZACION
MDSYS.GEOMETRY
Tabla CARRETERA
Nombre de Columna
Nulo?
Tipo
DESCRIPCION
VARCHAR2(50)
GEOMETRIA
MDSYS.GEOMETRY
50
Tabla LAGO
Nombre de Columna
Nulo?
Tipo
DESCRIPCION
VARCHAR2(50)
GEOMETRIA
MDSYS.GEOMETRY
51
Introduccin
2
2.1
Consultas de seleccin
Consultas bsicas
2.2
2.3
El predicado se incluye entre la clasula y el primer nombre del campo a recuperar, los
posibles predicados son:
Predicado
Descripcin
ALL
TOP
DISTINCT
2.3.1
ALL
2.3.2
TOP
Devuelve un cierto nmero de registros a partir del principio o del final de un rango
especificado por una clusula ORDER BY. Supongamos que queremos recuperar los
dueos de las 5 casas ms caras:
SELECT TOP 5 duenyo
FROM casa_rural
ORDER BY precio DESC;
54
2.3.3
DISTINCT
Omite los registros que contienen datos duplicados en los campos seleccionados. Para que
los valores de cada campo listado en la instruccin SELECT se incluyan en la consulta
deben ser nicos.
Por ejemplo, varias casas de la tabla casa_rural pueden tener el mismo dueo. Si
ejecutamos la siguiente instruccin SQL, devolver un nico registro por cada dueo
diferente:
SELECT DISTINCT duenyo
FROM casa_rural;
En otras palabras, el predicado DISTINCT devuelve aquellos registros cuyos campos
indicados en la clusula SELECT posean un contenido diferente.
2.4
Alias
55
2.5
Criterios de Seleccin
En el apartado anterior se vio la forma de recuperar registros de las tablas. Sin embargo, se
devolvan todos los registros de la mencionada tabla. A lo largo de este apartado se
estudiarn las posibilidades de filtrar los registros con el fin de recuperar solamente
aquellos que cumplan unas condiciones preestablecidas.
Antes de comenzar el desarrollo de este apartado hay que recalcar que:
!
cada vez que se desee establecer una condicin referida a un campo de texto la
condicin de bsqueda debe ir encerrada entre comillas simples; se tiene en cuenta la
diferencia entre maysculas y minsculas
las fechas se deben escribir siempre en formato dd/mm/aa donde dd representa el da,
mm el mes y aa el ao, se puede utilizar la barra (/) o el guin (-) y adems la fecha
debe ir encerrada entre comillas simples (). Por ejemplo si deseamos referirnos al da
3 de Septiembre de 1995 deberemos hacerlo de la siguiente forma; 09-03-95 9-395 9/3/95.
2.5.1
La clusula WHERE
La clusula WHERE puede usarse para determinar qu registros de las tablas enumeradas
en la clusula FROM aparecern en los resultados de la instruccin SELECT. Despus de
escribir esta clusula se deben especificar las condiciones que se expondrn en los
apartados siguientes. Si no se emplea esta clusula, la consulta devolver todas las filas de
la tabla. WHERE es opcional, pero cuando aparece debe ir a continuacin de FROM.
2.5.2
Operadores de comparacin
Como ya comentamos, los operadores de comparacin disponibles en SQL son: =, <, >, <=,
>=, <> (distinto). Veamos algunos ejemplos:
Obtener el dueo y el precio de las casas que valgan menos de 300
euros
SELECT duenyo, precio
FROM casa_rural
WHERE precio < 300;
las
casas
cuya
fecha
de
FROM casa_rural
WHERE fecha_construccion > 01/10/94;
2.5.3
Operadores Lgicos
Los operadores lgicos soportados por SQL son, entre otros: AND, OR, NOT. A excepcin
de NOT todos poseen la siguiente sintaxis:
<expresin1> operador <expresin2>
donde expresin1 y expresin2 son las condiciones a evaluar. El resultado de la operacin
vara en funcin del operador lgico. La tabla adjunta muestra los diferentes posibles
resultados para AND y OR:
<expresin1>
Operador
<expresin2>
Resultado
Verdad
AND
Falso
Falso
Verdad
AND
Verdad
Verdad
Falso
AND
Verdad
Falso
Falso
AND
Falso
Falso
Verdad
OR
Falso
Verdad
Verdad
OR
Verdad
Verdad
Falso
OR
Verdad
Verdad
Falso
OR
Falso
Falso
Obtener el cdigo de las casas cuyo precio oscila entre 200 y 300
euros
SELECT codigo
FROM casa_rural
WHERE precio > 200 AND precio < 300;
57
Obtener el cdigo de las casas cuyo precio oscila entre 200 y 300
euros o su fecha de construccin es posterior al ao 1994.
SELECT codigo
FROM casa_rural
WHERE (precio > 200 AND precio < 300) OR
fecha_construccion >= 01/01/95;
Obtener todos
Supermercado.
los
datos
de
los
tipo
de
servicio
diferentes
SELECT *
FROM tipo_servicio
WHERE NOT descripcion=Supermercado;
Obtener todos los datos de las habitaciones cuyo precio por noche
est entre 50 y 60 euros o cuyo precio con descuento est entre 40 y
50 euros.
SELECT *
FROM habitacion
WHERE (precio_noche > 50 AND precio_noche < 60) OR
(precio_dto_3 > 40 AND precio_dto_3 < 50);
2.5.4
Intervalos de Valores
Para indicar que deseamos recuperar los registros segn el intervalo de valores de un
campo emplearemos el operador Between cuya sintaxis es:
campo [Not] Between valor1 And valor2 (la condicin Not es opcional)
En este caso la consulta devolvera los registros que contengan en "campo" un valor
incluido en el intervalo valor1, valor2 (ambos inclusive). Si anteponemos la condicin Not
devolver aquellos valores no incluidos en el intervalo. Veamos algunos ejemplos:
Obtener las casas cuyo precio oscila entre 200 y 300 euros
SELECT codigo
FROM casa_rural
WHERE precio BETWEEN 200 AND 300;
58
Obtener las casas cuya fecha de construccin oscila entre los aos
1989 y 1992
SELECT codigo
FROM casa_rural
WHERE fecha_construccion BETWEEN 01/01/89 AND 31/12/92;
2.5.5
El Operador Like
Se utiliza para comparar una expresin de cadena con un modelo en una expresin SQL.
Su sintaxis es:
expresin Like modelo
donde expresin es un campo y modelo es una cadena contra la que se compara
expresin. Se puede utilizar el operador Like para encontrar valores en los campos que
coincidan con el modelo especificado. Por modelo puede especificar un valor completo (Ana
Mara), o se pueden utilizar caracteres comodn como los reconocidos por el sistema
operativo para encontrar un rango de valores (Like An%).
El operador Like se puede utilizar en una expresin para comparar un valor de un campo
con una expresin de cadena. Por ejemplo, si introduce Like C% en una consulta SQL, la
consulta devuelve todos los valores de campo que comiencen por la letra C.
El ejemplo siguiente devuelve los datos que comienzan con la letra P seguido de cualquier
letra entre A y F y de tres dgitos:
Like 'P[A-F]###'
Este ejemplo devuelve los campos cuyo contenido empiece con una letra de la A a la D
seguidas de cualquier cadena.
Like '[A-D]%'
En la tabla siguiente se muestra cmo utilizar el operador Like para comparar expresiones
con diferentes modelos.
Tipo de coincidencia
No coincide
Varios caracteres
'a%a'
'aBC'
Carcter especial
'a[%]a'
'a%a'
'aaa'
Varios caracteres
'ab%'
'abcdefg', 'abc'
'cab', 'aab'
Un solo carcter
'a?a'
'aBBBa'
Un solo dgito
'a#a'
'aaa', 'a10a'
59
Rango de caracteres
'[a-z]'
'2', '&'
Fuera de un rango
'[!a-z]'
'b', 'a'
Distinto de un dgito
'[!0-9]'
Combinada
'a[!b-m]#'
'abc', 'aj0'
2.5.6
El Operador In
Este operador devuelve aquellos registros cuyo campo indicado coincide con alguno de los
incluidos en una lista. Su sintaxis es:
expresin [Not] In(valor1, valor2, . . .)
Por ejemplo, la siguiente consulta devuelve el nombre de los municipios cuyo cdigo postal
pertenezca al conjunto {99991, 99993}:
SELECT nombre
FROM municipio
WHERE codigo_postal IN (99991, 99993);
2.6
2.6.1
Agrupamiento de Registros
GROUP BY
60
Todos los campos de la lista de campos de SELECT deben incluirse en la clusula GROUP
BY o como argumentos de una funcin SQL agregada. Por ejemplo, la siguiente consulta
obtiene para cada casa, el nmero total de plazas de todas sus habitaciones:
SELECT cod_casa, SUM(num_plazas)
FROM habitacion
GROUP BY cod_casa;
Una vez que GROUP BY ha combinado los registros, HAVING muestra cualquier registro
agrupado por la clusula GROUP BY que satisfaga las condiciones de la clusula HAVING.
HAVING es similar a WHERE, determina qu registros se seleccionan. Una vez que los
registros se han agrupado utilizando GROUP BY, HAVING determina cules de ellos se van
a mostrar. Por ejemplo, la siguiente consulta obtiene los mismos datos que la consulta
anterior, pero slo de aquellas casas en las que haya al menos 6 plazas y el mximo a
pagar por noche de una habitacin sean 90 euros:
SELECT cod_casa, SUM(num_plazas)
FROM habitacion
GROUP BY cod_casa
HAVING SUM(num_plazas) > 6 AND MAX(precio_noche)<90;
2.6.2
AVG
2.6.3
COUNT
Por ejemplo, la siguiente consulta obtiene el nmero total de casas rurales existentes en la
base de datos:
SELECT Count(*) AS Total
FROM casa_rural;
2.6.4
MAX, MIN
2.6.5
SUM
62
2.6.6
StDev, StDevP
Devuelve estimaciones de la desviacin estndar para la poblacin (el total de los registros
de la tabla) o una muestra de la poblacin representada (muestra aleatoria) . Su sintaxis es:
StDev(expr)
StDevP(expr)
donde expr representa el nombre del campo que contiene los datos que desean evaluarse
o una expresin que realiza un clculo utilizando los datos de dichos campos.
StDevP evala una poblacin, y StDev evala una muestra de la poblacin. Si la consulta
contiene menos de dos registros (o ningn registro para StDevP), estas funciones
devuelven un valor Null (el cual indica que la desviacin estndar no puede calcularse). Por
ejemplo:
SELECT StDev(precio) AS Desviacion
FROM casa_rural
WHERE fecha_construccion < 01/01/94;
2.6.7
Var, VarP
Devuelve una estimacin de la varianza de una poblacin (sobre el total de los registros) o
una muestra de la poblacin (muestra aleatoria de registros) sobre los valores de un campo.
Su sintaxis es:
Var(expr)
VarP(expr)
VarP evala una poblacin, y Var evala una muestra de la poblacin. Expr es el nombre
del campo que contiene los datos que desean evaluarse o una expresin que realiza un
clculo utilizando los datos de dichos campos. Si la consulta contiene menos de dos
registros, Var y VarP devuelven Null (esto indica que la varianza no puede calcularse).
Puede utilizar Var y VarP en una expresin de consulta o en una Instruccin SQL. Por
ejemplo:
SELECT Var(precio) AS Desviacion
FROM casa_rural
WHERE fecha_construccion < 01/01/94;
63
2.7
Normalmente los datos que se desean extraer a travs de una consulta no estn en una
nica tabla. En estos casos, hemos de incluir en la clusula FROM todas las tablas de las
que deseamos extraer algn dato. Por ejemplo, si quisiramos obtener para cada casa su
cdigo, su direccin y el municipio donde se encuentran, deberamos escribir:
SELECT casa_rural.codigo, direccion, nombre
FROM casa_rural, municipio;
Se debe indicar que el cdigo es de la casa rural porque existe otro campo cdigo en la
tabla municipio y podra resultar ambiguo. La ejecucin de esta consulta nos devuelve la
siguiente informacin:
CODIGO
---------1001
1001
1001
2001
2001
2001
2002
2002
2002
DIRECCION
-----------------------------Monje 27
Monje 27
Monje 27
Fca Almadraba,Almendro Blanco
Fca Almadraba,Almendro Blanco
Fca Almadraba,Almendro Blanco
Mayor 18
Mayor 18
Mayor 18
NOMBRE
-----------------------------Abis
Abiside
Bernacle
Abis
Abiside
Bernacle
Abis
Abiside
Bernacle
...
Se observa que cada casa aparece tres veces, una vez con cada municipio. Esto es debido
a que cuando se ponen dos tablas en la clusula FROM se une cada fila de la primera tabla
con cada fila de la segunda tabla. Para obtener la consulta correcta, se debe indicar en la
clusula WHERE la relacin existente entre ambas tablas a travs de sus claves ajenas. En
este caso, la tabla casa_rural tiene una clave ajena sobre la tabla municipio. Por tanto, la
consulta correcta sera:
SELECT casa_rural.codigo, direccion, nombre
FROM casa_rural, municipio
WHERE casa_rural.municipio = municipio.codigo;
As, obtendramos los siguientes datos:
CODIGO
---------1001
2001
2002
DIRECCION
-----------------------------Monje 27
Fca Almadraba,Almendro Blanco
Mayor 18
NOMBRE
-----------------------------Abis
Abiside
Abiside
...
Cuando se utilizan varias tablas, es frecuente que haya nombres de campos repetidos en
ellas. Hemos visto que la solucin pasa por escribir delante del campo en cuestin el
nombre de la tabla a la que pertenece, lo que en ocasiones puede resultar tedioso,
64
sobretodo si los nombres de las tablas son largos. Por esta razn, se suelen utilizar alias
para reducir el nombre de las tablas. Por ejemplo:
SELECT c.codigo, direccion, nombre
FROM casa_rural c, municipio m
WHERE c.municipio = m.codigo;
2.8
Se utiliza la operacin UNION para crear una consulta de unin, combinando los resultados
de dos o ms consultas o tablas independientes. Su sintaxis es:
[TABLE] consulta1 UNION [ALL] [TABLE] consulta2
[UNION [ALL] [TABLE] consultan [ ... ]]
donde consulta1, consulta2, consultan son instrucciones SELECT, el nombre de una
consulta almacenada o el nombre de una tabla almacenada precedido por la palabra clave
TABLE.
Puede combinar los resultados de dos o ms consultas, tablas e instrucciones SELECT, en
cualquier orden, en una nica operacin UNION. El ejemplo siguiente combina una tabla
existente llamada Otras_casas_lujo y una instruccin SELECT:
TABLE Otras_casas_lujo
UNION ALL
SELECT * FROM casa_rural
WHERE precio > 100;
Si no se indica lo contrario, no se devuelven registros duplicados cuando se utiliza la
operacin UNION, no obstante puede incluir el predicado ALL para asegurar que se
devuelven todos los registros. Esto hace que la consulta se ejecute ms rpidamente.
Todas las consultas en una operacin UNION deben pedir el mismo nmero de campos, no
obstante los campos no tienen porqu tener el mismo tamao o el mismo tipo de datos.
Se puede utilizar una clusula GROUP BY y/o HAVING en cada argumento consulta para
agrupar los datos devueltos. Puede utilizar una clusula ORDER BY al final del ltimo
argumento consulta para visualizar los datos devueltos en un orden especfico.
SubConsultas
Una subconsulta es una instruccin SELECT anidada dentro de una instruccin SELECT,
SELECT...INTO, INSERT...INTO, DELETE, o UPDATE o dentro de otra subconsulta.
Puede utilizar tres formas de sintaxis para crear una subconsulta:
-
donde:
!
instruccin sql: es una instruccin SELECT, que sigue el mismo formato y reglas que
cualquier otra instruccin SELECT. Debe ir entre parntesis.
Se puede utilizar una subconsulta en lugar de una expresin en la lista de campos de una
instruccin SELECT o en una clusula WHERE o HAVING. En una subconsulta, se utiliza
una instruccin SELECT para proporcionar un conjunto de uno o ms valores especificados
para evaluar en la expresin de la clusula WHERE o HAVING.
3.1
ANY, SOME
Se puede utilizar el predicado ANY o SOME, los cuales son sinnimos, para recuperar
registros de la consulta principal, que satisfagan la comparacin con cualquier otro registro
recuperado en la subconsulta. El ejemplo siguiente devuelve el cdigo de todas las casas
rurales en las que hay una habitacin cuyo precio sea mayor que el precio total de cualquier
casa cuya fecha de construccin sea posterior al ao 1992:
SELECT DISTINCT cod_casa
FROM habitacion
WHERE precio_noche > ANY (SELECT precio
FROM casa_rural
WHERE fecha_construccion >= 01/01/1993);
3.2
ALL
3.3
IN
FROM habitacion
WHERE banyo='S');
3.4
EXISTS
3.5
Ejemplos
de
las
todas
las
Obtener el cdigo de
habitaciones con bao
la
casa
de
la
habitacin
de
FROM casa_rural
WHERE fecha_construccion<'01/01/90';
68
casas
SELECT duenyo
FROM casa_rural c
WHERE NOT EXISTS (SELECT cod_casa
FROM habitacion
WHERE precio_noche > 60 AND
cod_casa=c.codigo);
70
tales
que
todas
las
Consultas de Accin
4.1
DELETE
Crea una consulta de eliminacin que elimina los registros de una o ms de las tablas
listadas en la clusula FROM que satisfagan la clusula WHERE. Su sintaxis es:
DELETE FROM Tabla WHERE criterio
Ejemplo: Con la siguiente instruccin, eliminamos de la
casa_rural aquellas casas en las que el dueo se llama Manuel
tabla
DELETE es especialmente til cuando se desea eliminar varios registros. Si desea eliminar
todos los registros de una tabla, eliminar la propia tabla es ms eficiente que ejecutar una
consulta de borrado.
Una consulta de borrado elimina los registros completos, no nicamente los datos en
campos especficos. Si desea eliminar valores en un campo especificado, crear una
consulta de actualizacin que cambie los valores a Null.
Una vez que se han eliminado los registros utilizando una consulta de borrado, no puede
deshacer la operacin. Para saber qu registros se eliminarn, primero se pueden examinar
los resultados de una consulta de seleccin que utilice el mismo criterio y despus ejecutar
la consulta de borrado.
4.2
INSERT INTO
Agrega un registro en una tabla. Se la conoce como una consulta de datos aadidos. Esta
consulta puede ser de dos tipos: insertar un nico registro o insertar en una tabla los
registros contenidos en otra tabla.
4.2.1
71
4.2.2
4.3
UPDATE
Crea una consulta de actualizacin que cambia los valores de los campos de una tabla
especificada basndose en un criterio especfico. Su sintaxis es:
UPDATE Tabla SET Campo1=Valor1, Campo2=Valor2, ... CampoN=ValorN
WHERE Criterio;
UPDATE es especialmente til cuando se desea cambiar un gran nmero de registros o
cuando stos se encuentran en mltiples tablas. Puede cambiar varios campos a la vez. El
ejemplo siguiente incrementa los valores del campo Precio_Noche en un 10 por ciento y los
valores del campo Precio_Dto_3 en un 3 por ciento para las habitaciones que tienen bao:
UPDATE Habitacion
SET Precio_Noche = Precio_Noche * 1.1,
Precio_Dto_3 = Precio_Dto_3 * 1.03
WHERE banyo = 'S';
72
UPDATE no genera ningn resultado. Para saber qu registros se van a cambiar, hay que
examinar primero el resultado de una consulta de seleccin que utilice el mismo criterio y
despus ejecutar la consulta de actualizacin.
Si en una consulta de actualizacin suprimimos la clusula WHERE todos los registros de la
tabla sealada sern actualizados.
UPDATE Habitacion
SET Precio_Noche = Precio_Noche * 1.1,
Precio_Dto_3 = Precio_Dto_3 * 1.03;
Ejercicios
5.1
1.
Consultas bsicas
Obtener el cdigo de la casa (ordenado y sin repetir) de las habitaciones cuyo precio
por noche sea mayor de 15000
COD_CASA
---------1001
2001
2002
3001
3002
5003
2.
COD_CASA
---------1001
2001
2002
2003
3002
5001
5002
5003
73
3.
DUENYO
---------------------------------------Manuel Martinez Garcia
Vicenta Duque Moreira
Ricardo Olmos Garcia
Rodrigo Gracia Andres
5.2
4.
COD_CASA
SUMA
---------- ---------1001
68000
2001
37000
2002
70000
2003
48000
3001
36000
3002
34000
5001
32000
5002
17000
5003
49000
5.
COD_CASA
MEDIA
---------- ---------1001
2,5
2001
1,66666667
2002
2003
3001
3002
2,66666667
74
5001
2,66666667
5002
5003
2,5
6.
COD_CASA
MEDIA
---------- ---------1001
2,66666667
2001
2002
2003
3002
5001
2,66666667
5002
5003
2,66666667
7.
COD_CASA
MEDIA
---------- ---------2002
3002
5.3
8.
CODIGO
DIRECCION
NOMBRE
Monje 27
Abis
2001
Abiside
3001
Bernacle
5001
La Barra 30
Abis
5002
Plz La Iglesia 5
Abis
75
5003
Alta 7
Abis
2002
Mayor 18
Abiside
2003
Mayor 16
Abiside
3002
Sta Ana 20
Bernacle
9.
CODIGO
DESCRIPCION
DESCRIPCION
5.4
1 Ultramarinos Pea
Supermercado
2 Garcia Comestibles
Supermercado
3 Tienda Martinez
Supermercado
4 Hospital de Abis
Hospital
5 Farmacia Abis
Farmacia
6 Ambulancias Montes
Ambulancia
Centro de Salud
8 Comestibles Mora
Supermercado
10. Obtener el nombre del dueo de las casas que tienen alguna habitacin con bao
DUENYO
---------------------------------------Manuel Martinez Garcia
Amalia Gomez Tormes
Monica Fernandez Gil
Monica Fernandez Gil
Rodrigo Gracia Andres
Vicenta Duque Moreira
Vicenta Duque Moreira
Ricardo Olmos Garcia
76
11. Obtener el cdigo de las casas de los municipios que empiezan por A
CODIGO
---------1001
2001
2002
2003
5001
5002
5003
12. Obtener la direccin y el telfono de contacto de las casas que tienen habitaciones con
capacidad para ms de 3 personas
DIRECCION
TELEFONO
------------------------------ --------Monje 27
927561119
Mayor 18
695672356
902209900
Sta Ana 20
656723322
La Barra 30
962523689
Alta 7
603457689
77
Introduccin
SQL Worksheet
Se trata de una herramienta que nos permite ejecutar sentencias SQL de forma interactiva.
Mantiene un historial de los comandos introducidos, de forma que podemos utilizar esta
aplicacin para editar y ejecutar de nuevo un comando anterior sin tener que teclearlo otra
vez. Es posible tener varias SQL Worksheet abiertas al mismo tiempo, cada una es
independiente de las otras.
SQL Worksheet se encuentra en Inicio -> Oracle Enterprise Manager -> SQL Worksheet.
Inmediatamente aparece un cuadro de dilogo para conectarse a la base de datos. Los
datos a introducir son: username (topo2, por ejemplo), password (topo2) y service (topo).
Una vez se valida con el servidor, entramos en la aplicacin, que consta de los siguientes
elementos (ver figura):
Barra de divisin: divide ambos paneles, si se pincha y arrastra sobre ella se puede
modificar el tamao de stos.
Nueva worksheet: borra el panel de entrada para introducir una nueva sentencia SQL,
si no haba sido guardado, indica la posibilidad de hacerlo.
Abrir worksheet: muestra un cuadro de dilogo para abrir una sentencia SQL
almacenada previamente.
Guardar worksheet: muestra un cuadro de dilogo para guardar el contenido del panel
de entrada.
Barra de herramientas del panel de salida: slo tiene un botn, que nos permite
guardar la informacin del panel de salida en un fichero.
2.1
80
Men File
Change Database Connection: Muestra el cuadro de dilogo de conexin a una
instancia de una base de datos.
New, Open, Save: Realizan las mismas funciones que los botones de la barra del panel
de entrada.
Save As: Guarda el contenido del panel de entrada en un fichero distinto del que est
abierto actualmente.
2.2
Men Edit
2.3
Men Worksheet
81
1.
Cdigo y descripcin de todas las carreteras de la regin que van al sur (es decir, que
en su descripcin aparece la palabra Sur).
CODIGO
DESCRIPCION
---------- -------------------------------------------------C1
Carretera 1 - Noreste-Suroeste
C2
Carretera 2 - Norte-Sur
C5
Carretera 5 - Este-(Norte-Sur)
2. Supermercados de todos los municipios.
CODIGO
DESCRIPCION
---------- -------------------------------------------------1 Ultramarinos Pea
2 Garcia Comestibles
3 Tienda Martinez
8 Comestibles Mora
3.
Nombre del dueo y direccin completa (con el nombre del municipio) de todas las
casas rurales de la regin, ordenado por el nombre del municipio.
DUENYO
DIRECCION
MUNICIPIO
----------------------- ------------------------------ ------------Manuel Martinez Garcia Monje 27
Abis
Vicenta Duque Moreira
La Barra 30
Abis
Vicenta Duque Moreira
Plz La Iglesia 5
Abis
Ricardo Olmos Garcia
Alta 7
Abis
Amalia Gomez Tormes
Fca Almadraba,Almendro Blanco Abiside
Monica Fernandez Gil
Mayor 18
Abiside
Monica Fernandez Gil
Mayor 16
Abiside
Amparo Molins Lopez
Plz Calixto III
Bernacle
Rodrigo Gracia Andres
Sta Ana 20
Bernacle
4.
Precio medio de las casas que hayan sido construidas o rehabilitadas despus del ao
90.
MEDIA
---------39285,7143
6.
Cdigo de la casa y diferencia de precio entre alquilar una casa completa y alquilarla
por habitaciones (sin descuentos) ordenado por cdigo de casa.
CODIGO
DIFERENCIA
---------- ---------1001
8000
2001
2000
2002
6000
2003
8000
3001
3000
3002
4000
5001
4000
5002
2000
5003
6000
7.
Cdigo, direccin y total de plazas de las casas en las que caben al menos 10
personas en total.
CODIGO
DIRECCION
TOTAL
---------- ------------------------------ ---------1001
Monje 27
10
2002
Mayor 18
12
5003
Alta 7
10
8. Nombre del dueo de las casas que tienen TV en todas las habitaciones.
DUENYO
---------------------------------------Manuel Martinez Garcia
Ricardo Olmos Garcia
Monica Fernandez Gil
Monica Fernandez Gil
Rodrigo Gracia Andres
84
9.
Cdigo y direccin de las casas en las que hay al menos 8 plazas en habitaciones con
bao.
CODIGO
DIRECCION
---------- -----------------------------1001
Monje 27
2002
Mayor 18
2003
Mayor 16
5001
La Barra 30
5003
Alta 7
85
Tipos de Datos
Tipo de Datos
Longitud
Descripcin
BINARY
1 byte
BIT
1 byte
BYTE
1 byte
COUNTER
4 bytes
CURRENCY
8 bytes
DATETIME
8 bytes
4 bytes
DOUBLE
8 bytes
SHORT
2 bytes
LONG
4 bytes
TEXT
1 byte por
De cero a 255 caracteres.
caracter
LONGTEXT
1 byte por
De cero a un mximo de 1.2 gigabytes.
carcter
SINGLE
2
2.1
Descripcin
tabla
campo1
campo2
tipo
tamao
ndice1
ndice2
ndice
multicampos
2.2
La clusula CONSTRAINT
Parte
Descripcin
nombre
primarioN
88
nicoN
refN
tabla externa
campos
externos
Si se desea crear un ndice para un campo cuando se esta utilizando las instrucciones
ALTER TABLE o CREATE TABLE la clusula CONTRAINT debe aparecer inmediatamente
despus de la especificacin del campo indexado.
Si se desea crear un ndice con mltiples campos cuando se est utilizando las
instrucciones ALTER TABLE o CREATE TABLE la clusula CONSTRAINT debe aparecer
fuera de la clusula de creacin de tabla.
Tipo de ndice
Descripcin
UNIQUE
PRIMARY KEY
FOREIGN KEY
Ejemplos:
Crear una nueva tabla llamada Casa_rural con los campos que hemos
definido anteriormente. Adems, indica que la clave primaria es el
campo CODIGO y establece una clave ajena sobre el campo MUNICIPIO al
campo CODIGO de la tabla Municipio.
CREATE TABLE casa_rural
( codigo char(10) not null,
duenyo varchar2(40) not null,
direccion varchar2(30) not null,
telefono varchar2(9) not null,
89
2.3
Creacin de ndices
Donde:
90
Parte
Descripcin
ndice
tabla
campo
ASC|DESC
UNIQUE
DISALLOW
NULL
IGNORE
NULL
Excluye del ndice los valores nulos incluidos en los campos que lo
componen.
PRIMARY
Ejemplos:
Crea un ndice llamado MiIndice en la tabla Casa_rural con los
campos Duenyo y Telefono.
CREATE INDEX MiIndice ON Casa_rural (Duenyo, Telefono);
2.4
Modifica el diseo de una tabla ya existente, se pueden modificar los campos o los ndices
existentes. Su sintaxis es:
ALTER TABLE tabla
{ADD {COLUMN tipo de campo[(tamao)]
[CONSTRAINT ndice] CONSTRAINT ndice multicampo} |
DROP {COLUMN campo I CONSTRAINT nombre del ndice} }
Donde:
91
Parte
Descripcin
Tabla
Campo
Tipo
Tamao
ndice
ndice
multicampo
Operacin
Descripcin
ADD
COLUMN
ADD
DROP
COLUMN
DROP
Ejemplos:
2.5
Eliminacin de tablas
92
Unidad temtica 3:
Bases de Datos Espaciales
Objetivos
Ser capaces de seleccionar el modelo de datos espacial que ms se ajusta a los datos
Contenidos
Tema 8. Modelado de datos espaciales
Tema 9. Gestin de datos espaciales en Oracle 8i
Tema 10. Consultas espaciales en Oracle 8i
Introduccin
2.
Muchas otras funciones del SGBD, como optimizacin de consultas, se adaptan para
manejar datos espaciales eficientemente.
Muchos SGBD ofrecen esta extensin espacial. Oracle 8i es uno de ellos y es el que
estudiaremos en temas posteriores.
Definiciones
Por ejemplo, el objeto espacial asociado a un ro es una lnea, mientras que el objeto
asociado con una ciudad es una regin (o polgono).
Pases, con los atributos descriptivos nombre, capital, nmero de habitantes y con un
atributo espacial denominado geo.
2.
Es decir:
1.
2.
Las siguientes son operaciones comunes sobre estos temas, basadas en el lgebra
relacional:
-
96
Num_habitantes
Portugal
10.500.000
Francia
58.000.000
...
...
Alemania
78.500.000
Num_habitantes
Francia
58.000.000
...
...
Alemania
78.500.000
97
En el tema anterior definimos un objeto geogrfico como dos partes: una descripcin y una
componente espacial. Para distinguir un objeto geogrfico de otro, debemos asignarle una
identidad. El conjunto de (identidad, componente espacial, descripcin) se conoce como
entidad.
La interpretacin del espacio depende de la semntica asociada con el territorio geogrfico.
Consideremos, por ejemplo, a Espaa. Si adoptamos un punto de vista administrativo,
Espaa se divide en comunidades autnomas. Desde un punto de vista geolgico,
obtenemos una organizacin totalmente distinta del espacio, en rea geolgicas. Si
estamos interesados en el control de trfico, nos fijaremos en la red de carreteras. En cada
caso, elegimos una nueva interpretacin del espacio y definimos un nuevo conjunto de
entidades que describen este espacio. En Oracle 8i, podemos utilizar los siguientes tipos
bsicos de objetos espaciales:
a)
b)
lnea (line string). Se suelen usar para representar redes (carreteras, hidrogrficas,
etc.). El tipo bsico considerado es la polyline, que se define como un conjunto finito de
segmentos de lneas o bordes, tal que cada punto de final de un segmento es
compartido por exactamente dos segmentos, excepto los puntos finales de la polyline.
c)
polgono (polygon). Se utilizan para representar entidades con reas grandes, tales
como parcelas o reas administrativas. Un polgono es una regin del plano acotada
por una polyline cerrada, llamada frontera.
Es importante destacar el hecho de que la eleccin de uno u otro tipo de objeto espacial es
arbitraria. Depende del futuro uso que se le va a dar a la coleccin de entidades. Muchos
factores pueden influir en esta eleccin, pero uno de los ms determinantes es la escala.
Por ejemplo, un aeropuerto puede ser visto como un punto (si estamos interesados en
enlaces areos) o como un polgono, si el objetivo es la organizacin del aeropuerto.
Las relaciones espaciales que se pueden establecer entre dos entidades de la base de
datos son las siguientes:
100
Veamos, ahora, una descripcin de las tablas especficas que son necesarias en Oracle 8i
para manejar los datos espaciales.
SDO_GTYPE: Define el tipo de geometra. Los tipos bsicos se definen con los
siguientes valores: 1 para puntos, 2 para lneas y 3 para polgonos. Se compone
un nmero de cuatro cifras, donde la primera indica el nmero de dimensiones en
las que se representa el objeto. As, si hablamos de dos dimensiones, se asignar
2001 para puntos, 2002 para lneas y 2003 para polgonos.
SDO_SRID: No se utiliza en esta versin, por lo que su valor debe ser NULL.
SDO_STARTING_OFFSET:
indica
el
desplazamiento
dentro
de
SDO_ORDINATES donde est almacenada la primera coordenada de este
elemento.
101
SDO_ORDINATES = NULL
-
Nulo?
Tipo
VARCHAR2(30)
COLUMN_NAME
VARCHAR2(30)
DIMINFO
MDSYS.SDO_DIM_ARRAY
Por ejemplo, veamos cmo se debe dar de alta la columna geometria de la tabla
MUNICIPIO:
INSERT INTO SDO_GEOM_METADATA (TABLE_NAME, COLUMN_NAME, DIMINFO)
102
103
Introduccin
En este tema vamos a ver algunas funciones de Spatial que nos permiten realizar consultas
sencillas sobre datos espaciales en Oracle 8i. Estas funciones son:
SDO_GEOM.RELATE
Ejemplos:
Obtener la descripcin de las carreteras que pasan por el municipio
de Bernacle:
SELECT descripcion
FROM carretera c, municipio m, sdo_geom_metadata g1,
sdo_geom_metadata g2
WHERE m.nombre=Bernacle AND
g1.table_name=CARRETERA AND
g2.table_name=MUNICIPIO AND
SDO_GEOM.RELATE (c.geometria,g1.diminfo,OVERLAPBDYDISJOINT,
m.geometria,g2.diminfo)=OVERLAPBDYDISJOINT;
SELECT descripcion
FROM carretera c, municipio m, sdo_geom_metadata g1,
sdo_geom_metadata g2
WHERE m.nombre=Bernacle AND
g1.table_name=CARRETERA AND
g2.table_name=MUNICIPIO AND
SDO_GEOM.RELATE (c.geometria,g1.diminfo,ANYINTERACT,
m.geometria,g2.diminfo)=TRUE;
106
m.geometria,g2.diminfo)=INSIDE;
SDO_GEOM.SDO_DISTANCE
campo1 y campo2 son los campos entre los cuales se desea calcular la distancia
Ejemplos:
Obtener la distancia desde el lago Abis a cada carretera:
SELECT c.descripcion,
SDO_GEOM.SDO_DISTANCE(l.geometria, g1.diminfo,
c.geometria, g2.diminfo)
FROM lago l, carretera c, sdo_geom_metadata g1, sdo_geom_metadata g2
WHERE l.descripcion=Lago Abis AND
g1.table_name=LAGO AND
g2.table_name=CARRETERA;
SDO_GEOM.SDO_AREA
donde:
-
Ejemplo:
Obtener el rea de todos los municipios:
SELECT m.nombre,
SDO_GEOM.SDO_AREA(m.geometria, g1.diminfo)
FROM municipio m, sdo_geom_metadata g1
WHERE g1.table_name=MUNICIPIO;
SDO_GEOM.SDO_LENGTH
Ejemplo:
Obtener el permetro de todos los municipios:
SELECT m.nombre,
SDO_GEOM.SDO_LENGTH(m.geometria, g1.diminfo)
FROM municipio m, sdo_geom_metadata g1
109
WHERE g1.table_name=MUNICIPIO;
110
1.
DESCRIPCION
AREA
3,9
Lago Bernacle
4,2
2.
CODIGO
DUENYO
---------- ---------------------------------------1001
5001
5002
5003
3.
CODIGO
DESCRIPCION
---------- -------------------------------------------------C3
Carretera 3 - Este-Oeste
C4
Carretera 4 - Circular
4.
NOMBRE
-----------------------------Abis
5.
NOMBRE
-----------------------------Abis
Abiside
6.
LAGO
CARRETERA
DISTANCIA
Carretera 1 - Noreste-Suroeste
Lago Abis
Carretera 2 - Norte-Sur
3,4
Lago Abis
Carretera 3 - Este-Oeste
Lago Abis
Carretera 4 - Circular
Lago Abis
Carretera 5 - Este-(Norte-Sur)
1,92937814
Lago Bernacle
Carretera 1 - Noreste-Suroeste
Lago Bernacle
Carretera 2 - Norte-Sur
Lago Bernacle
Carretera 3 - Este-Oeste
Lago Bernacle
Carretera 4 - Circular
Lago Bernacle
Carretera 5 - Este-(Norte-Sur)
7.
,9
,7
Cdigo, dueo y fecha de construccin de las casas en las que caben entre 5 y 10
personas en el total de habitaciones y cuya distancia al lago Abis sea menor de 3.
CODIGO
DUENYO
FECHA_CONSTRUCCION
21/10/80
2001
01/04/98
2003
01/02/95
5001
01/08/78
5003
08/08/88
112
8.
Cdigo de las casas rurales cuyo precio total es inferior a 50000 y cuya distancia a un
supermercado es inferior a 0.6, sabiendo que el tipo de servicio de un supermercado es
1. Mostrar tambin la distancia correspondiente.
CODIGO
DISTANCIA
---------- ---------2001
,559016994
3001
,55
3002
,2
5001
,5
9.
CODIGO
LONGITUD
---------- ---------C5
4,15138782
10. Cdigo y descripcin de las carreteras que pasan por todos los municipios.
CODIGO
DESCRIPCION
---------- -------------------------------------------------C4
Carretera 4 - Circular
113
Municipio: Bernacle
Dueo: Mnica Rodrguez Campos
Direccin: Calle Lago Bernacle, 3
Telfono: 650673256
Precio: 22000
Fecha construccin: enero-1994
Descripcin: amplio saln con chimenea, cocina office
Coordenadas: 5.1, 1.2
Habitacin 1:
-
nmero de plazas: 2
bao: S
Habitacin 2:
-
nmero de plazas: 4
bao: S
2.
3.
4.