0% encontró este documento útil (0 votos)
3 vistas12 páginas

Leccion9 PostgresSQL PostGIS

Leccion novena PostgresSQL_PostGIS

Cargado por

maria
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
3 vistas12 páginas

Leccion9 PostgresSQL PostGIS

Leccion novena PostgresSQL_PostGIS

Cargado por

maria
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 12

Curso de Especialización UNIGIS 7ª Edición, 2010

Bases de datos espaciales: estructuras y modelos

Lección 9: Lenguaje de Consulta Estructurado (SQL)

Creación: Marc Compte


Revisión: Toni Hernández

SIGTE, 1999 – 2010

© UNIGIS – Universitat de Girona


Bases de datos espaciales: estructuras y 9. Lenguaje de Consulta Estructurado (SQL)
modelos

9. Lenguaje de Consulta Estructurado después usarla, con el SQL tenemos una serie
completa de herramientas de base de datos en un
(SQL) formato consistente. En la jerga del modelo se dice
que el SQL es un lenguaje ‘relacionalmente
El álgebra y el cálculo relacional son parte del Modelo completo’.
Relacional y los teóricos los utilizan para determinar qué
es posible hacer dentro del modelo. Sin embargo, los • Simplicidad: A pesar de su naturaleza completa,
usuarios no tienen por qué saber manipular el álgebra hay menos de treinta comandos SQL, lo que hace
relacional directamente ya que todos los SGBDR deberían que aprender este lenguaje no sea una tarea tan
contener uno o dos lenguajes prácticos que, aunque se ardua. Los nuevos usuarios pueden adquirir
derivan del álgebra o el cálculo, se presentan al usuario de rápidamente los conocimientos suficientes para ser
un modo conveniente para gestionar su base de datos. El capaces de llevar a cabo la mayoría de las
Structured Query Language (SQL) o Lenguaje de Consulta operaciones. Al mismo tiempo, la flexibilidad del SQL
Estructurado es el más popular y el que vamos a utilizar permite a los usuarios experimentados realizar
en los ejercicios prácticos de este curso. operaciones complejas.

Estrictamente, SQL no forma parte del modelo relacional • Declarativo: El SQL es un lenguaje declarativo en el
teórico, que consiste simplemente en los elementos sentido que las sentencias SQL dicen al ordenador lo
Estructurales, de Manipulación e Integridad descritos que se le pide, pero le dan completa libertad para
anteriormente. Sin embargo, SQL ha devenido tan determinar la manera de conseguir el resultado. Esto
ampliamente implementado en los SGBDR que creemos contrasta con los métodos de bajo nivel de los
apropiado y conveniente tratarlo aquí. lenguajes de tercera generación, como el COBOL,
que precisan que el usuario sea capaz de escribir un
Como lenguaje de bases de datos, SQL tiene un programa para explicarle al ordenador qué debe
determinado número de ventajas que le ha llevado a su hacer (¡y cómo!) para extraer la información.
actual popularidad: Mientras que los lenguajes de tercera generación
tienden a operar registro a registro, las sentencias
• Completo: El SQL contiene instrucciones que SQL, como el álgebra relacional, operan sobre un
implementan la mayoría de los requerimientos de conjunto de registros. Los inputs de las sentencias
integridad, manipulación y estructura del Modelo SQL son conjuntos de registros (y condiciones lógicas
Relacional. Así, ofrece un lenguaje de base de datos que debe cumplir cada fila) y los outputs son nuevos
completo que permite crear, usar y borrar bases de conjuntos de registros.
datos. Mientras que con otros sistemas podría ser
necesario aprender diferentes conjuntos de
comandos para establecer una base de datos y

© 1999 Universitat de Girona – SIGTE. Actualización 2010 Página -1 Página -2 © 1999 Universitat de Girona – SIGTE. Actualización 2010
Bases de datos espaciales: estructuras y 9. Lenguaje de Consulta Estructurado (SQL)
modelos

La ventaja de este método es que el usuario no Windows, como MS Access, que presentan una
necesita ser programador. Para utilizar el SQL, los interfaz gráfica bastante agradable para el usuario,
usuarios necesitan conocer la manera de formular la utilizan normalmente el SQL. La mayoría de los
pregunta: el software determina el mecanismo paquetes SIG, incluso los destinados a usuarios no
mediante el que encontrará la respuesta. especialistas asumen que se tiene cierta familiaridad
con el SQL. El conocimiento sobre SQL es,
Codd contempla esto como uno de los beneficios simplemente, esencial para cualquiera que desee
principales del método relacional. En los años utilizar los sistemas de información más allá del nivel
setenta, la necesidad de emplear programas básico.
especializados para operar sobre bases de datos
existentes estaba causando serias dificultades. Codd Además de lo ya señalado, hoy en día existen varios
interpretó la facilidad de uso del SQL y otros intentos para producir un SQL geográfico, mediante el cual
lenguajes relacionales como un aumento de la el usuario podría llegar a realizar cualquiera de las
productividad de los profesionales y como una ayuda consultas geográficas típicas con tan solo escribir una
para los usuarios. ‘pequeña’ frase en pseudo-inglés. Productos tales como el
ArcSDE de ESRI, Oracle Spatial o PostGIS ofrecen este
• Estructura de Comandos ‘Pseudo Inglesa’: Un tipo de lenguaje.
primer prototipo del SQL fue el ‘Structured English
Query Language’ (SEQUEL) que introdujo IBM en Además de utilizarse en paquetes SGBDR individuales, el
1974, por lo que el SQL aún conserva una sintaxis SQL también se utilizaba como mecanismo para transferir
similar al idioma inglés. Todas las sentencias SQL la información de una base de datos a otra en sistemas en
pueden verse como frases en inglés muy restringidas red. Supón que hay diferentes usuarios que quieren
y estructuradas. Los comandos SQL siempre acceder a una serie de datos común, pero que cada uno
empiezan con un verbo que especifica la acción que de ellos quiere utilizar en su PC su paquete de base de
debe realizar el software (Create, Select, Grant, datos preferido. Una solución a este problema consiste en
Drop, Insert, ...) y siempre hay un objeto que es el almacenar los datos en un servidor de red utilizando un
sujeto de la acción (normalmente una tabla). gestor de bases de datos que se base totalmente en SQL.
El software de base de datos del usuario, no importa cuál,
• Ampliamente utilizado: El SQL se ha convertido en puede entonces utilizar SQL para extraer los datos del
un lenguaje de base de datos ampliamente utilizado. servidor y modificarlos para convertirlos a un formato
Los SGBDR de los grandes ordenadores (mainframe) familiar para el usuario. Los usuarios no necesitan ser
han utilizado el SQL durante muchos años y, cada conscientes que ambos paquetes han utilizado SQL para
vez más, se está incorporando en paquetes SGBD transferir los datos requeridos.
para microordenadores. Incluso los SGBDR para MS

© 1999 Universitat de Girona – SIGTE. Actualización 2010 Página -3 Página -4 © 1999 Universitat de Girona – SIGTE. Actualización 2010
Bases de datos espaciales: estructuras y 9. Lenguaje de Consulta Estructurado (SQL)
modelos

El estándar ODBC (Open Database Connectivity) de 9.1 Comandos SQL de definición de


Microsoft es un ejemplo conocido de este método. Los
SGBDR para los que están disponibles los drivers del
bases de datos
ODBC pueden intercambiar datos en base a sentencias
Como se explicó en lecciones anteriores, cualquier
SQL. De forma similar, IBM ofrece un servicio SQL como
software SGBD necesita un Lenguaje de Definición de
parte integrante de su sistema operativo OS2.
Datos (Data Definition Language) que permita al usuario
proyectar un modelo de base de datos conceptual en
Aunque se supone que el SQL es un lenguaje estándar, su
términos comprensibles para el SGBD.
implementación difiere ligeramente de software a
software. Como con otros lenguajes, los vendedores de
El SQL ofrece cinco comandos que permiten al usuario
software no han sido capaces de resistirse a la tentación
emprender las tareas de definición de la base de datos:
de añadir sus propios códigos y a veces omiten códigos
SQL estándar, ya existentes. Estas diferencias CREATE TABLE
acostumbran a ser mínimas, por lo que los conocimientos ALTER TABLE
sobre SQL adquiridos con un sistema determinado son CREATE VIEW
válidos para cualquier otro sistema. ¡No hay que empezar CREATE INDEX
de nuevo cuando cambiamos de un sistema a otro! DROP TABLE/VIEW/INDEX

En las prácticas de este curso nos centraremos en la


implementación del SQL en PostgreSQL y tendremos la • CREATE TABLE
oportunidad de desarrollar nuestra habilidad para utilizar
SQL a través de una serie de ejercicios prácticos. También El comando create table permite crear una nueva tabla y
tendremos la oportunidad de practicar con las consultas especificar los tipos de datos que contendrá cada columna.
geográficas mediante SQL. Lo que sigue ahora, sin
embargo, es una descripción de las sentencias SQL, La sintaxis del comando es:
independientes de cualquier implementación particular, CREATE TABLE < nombre_tabla>
para ofrecerte una pequeña muestra de la apariencia y ( <nombre_columna> <tipo_de_dato>
método de funcionamiento del SQL. [NOT NULL]
[, <nombre_columna> <tipo_de_dato>
[NOT NULL]...]);

Para describir la sintaxis de los comandos SQL hemos


optado por las siguientes convenciones:

© 1999 Universitat de Girona – SIGTE. Actualización 2010 Página -5 Página -6 © 1999 Universitat de Girona – SIGTE. Actualización 2010
Bases de datos espaciales: estructuras y 9. Lenguaje de Consulta Estructurado (SQL)
modelos

• Los comandos y palabras clave se muestran en CREATE TABLE Propiedad


MAYÚSCULAS. Los comandos, además, aparecen en (NumId integer NOT NULL,
Ocupante char(20),
negrita. Direccion char(30),
Valor decimal(10.2));
• < > (menor que y mayor que) significa que debemos
incluir el elemento que está dentro de estos dos Fíjate que hemos utilizado la palabra clave NOT NULL para
símbolos. Así, en el ejemplo anterior debe haber, insistir en que cada registro entrado en la tabla debe
obligatoriamente, un nombre de tabla directamente tener, obligatoriamente, un valor NúmId.
después del comando y, además, también debe
haber al menos una columna definida en la tabla. CREATE TABLE crea la cabecera de la tabla, es decir, una
tabla vacía en la que se han definido los campos y en la
• [ ] (Corchetes) indican que puede (o no) haber que luego podremos importar los datos.
información dentro de los corchetes, es decir, los
corchetes encierran partes opcionales del comando. Debes poner atención en que cada definición de campo
En el ejemplo anterior, vemos que la palabra clave debe tener obligatoriamente, al menos, dos detalles: el
NOT NULL es opcional y que la descripción de la nombre de dicho campo y el tipo de datos que alberga.
segunda columna (pero no la primera) es opcional.
El nombre del campo puede ser cualquier cadena de texto
• ... (puntos suspensivos) indican que esta parte del que deseemos sobre la que cada SGBDR puede imponer
comando puede ser repetida tantas veces como sea algunas restricciones. Un ejemplo de restricción puede ser
necesario. En el ejemplo anterior vemos que la que no contenga espacios o que dicha cadena de texto sea
descripción de columna puede ser repetida tantas limitada a ambos lados por “ (comillas) o por otro carácter
veces como queramos. clave.

Fíjate que las expresiones SQL pueden escribirse en El tipo de dato, por el contrario, no puede ser una cadena
diferentes líneas ya que sólo el punto y coma final (;) de texto de nuestra invención sino que debe hacer
determina el final de la expresión. Los/las usuarios/as referencia a una de las palabras clave reservadas a este
pueden aprovecharse de esto para facilitar la lectura del efecto. En el ejemplo precedente hemos visto tres tipos de
comando en expresiones SQL complejas. datos distintos (números enteros, cadenas de caracteres y
números decimales) pero existen muchos tipos de datos
El siguiente ejemplo ilustrará la utilización del comando distintos, algunos comunes entre todos los SGBDR y otros
Create Table. Para crear la tabla PROPIEDAD, utilizaríamos más particulares. Para el caso de las prácticas evaluables
el siguiente comando: de esta lección puedes remitirte al documento Tipos de
datos que acompaña esta lección.

© 1999 Universitat de Girona – SIGTE. Actualización 2010 Página -7 Página -8 © 1999 Universitat de Girona – SIGTE. Actualización 2010
Bases de datos espaciales: estructuras y 9. Lenguaje de Consulta Estructurado (SQL)
modelos

• ALTER TABLE ALTER TABLE <nombre_tabla>


DROP (<nombre_columna>[,
<nombre_columna>...]);
A menudo ocurre que la estructura de una base de datos
tiene que ser revisada después de utilizarse durante un
tiempo, sea para arreglar un deterioro del diseño actual o • CREATE VIEW
para adaptar la base de datos a las nuevas necesidades.
Fíjate, por ejemplo, que en el ejemplo anterior hemos Supón que un usuario siempre quiere ver el nombre del
olvidado incluir el campo NumArea. área en la que se encuentra la propiedad, pero que no
está interesado en los aspectos financieros de la gestión
ALTER TABLE permite a los diseñadores añadir columnas de la propiedad (Evidentemente, los aspectos financieros
extra a una tabla y/o borrar una/s ya existente/s. pueden ser confidenciales y no estar disponibles para este
usuario). El comando CREATE VIEW puede ser utilizado
La sintaxis de ALTER TABLE es: para crear una tabla vista apropiada para las necesidades
del usuario.
ALTER TABLE < nombre_tabla>
ADD ( <nombre_columna> <tipo_de_dato> La sintaxis de CREATE VIEW es:
[NOT NULL]
[, <nombre_columna> <tipo_de_dato> [NOT CREATE VIEW <nombre_vista>
NULL]...] ); [(lista_columnas_vista)]
AS
< SELECT comando >;
Para añadir NumArea a Propiedad:

ALTER TABLE Propiedad Para crear el ejemplo citado, el diseñador debería escribir
ADD (NumArea integer); la línea siguiente:

ALTER TABLE puede utilizarse sobre tablas que ya tienen CREATE VIEW PropA
datos. El efecto de este comando es análogo a trazar una (Area,CodigoPostal,Ocupante,Direccion)
nueva columna en las tablas en papel. AS
SELECT
Area.Nombre,Area.CodigoPostal,Propiedad.Nombr
ALTER TABLE también puede utilizarse para borrar e,Propieda
columnas de una tabla, siendo la sintaxis necesaria: d.Direccion
FROM Propiedad,Area
WHERE Propiedad.NumArea = Area.NumArea;

© 1999 Universitat de Girona – SIGTE. Actualización 2010 Página -9 Página -10 © 1999 Universitat de Girona – SIGTE. Actualización 2010
Bases de datos espaciales: estructuras y 9. Lenguaje de Consulta Estructurado (SQL)
modelos

considerablemente en cada software. Algunos SGBDR sólo


Fíjate que en la tabla Propiedad hay una columna llamada permiten actualizar mediante vistas de ‘tabla única’, vistas
Nombre (nombre del ocupante) y que en la tabla Area que obtienen la información de una única tabla. Las vistas
también hay un campo con ese título (nombre del área), creadas por combinación de datos procedentes de más de
por lo que incluir ambas columnas, sin alterarlas, causaría una tabla están disponibles sólo para la consulta de datos.
problemas en la vista del Usuario A. Con el comando Esto contradice al modelo de Codd.
CREATE VIEW podemos utilizar la cláusula
lista_columnas_vista para indicar los encabezados de las
columnas que utilizará la vista. La columna nombre, de la • CREATE INDEX
tabla Area, se conocerá como Area en la vista PropA y la
columna nombre en la tabla Propiedad será la columna Como ya decíamos en lecciones anteriores, un index
Ocupante en la vista PropA. (índice) es un pequeño archivo que mantiene una
relación de la posición de las filas de una tabla y que
El fragmento SELECT...FROM...WHERE de la declaración permite al SGBDR ir directamente a la fila solicitada, en
CREATE VIEW es un comando SQL de manipulación de lugar de tener que leer secuencialmente la tabla hasta
datos, que comentaremos más adelante. Por ahora es encontrar el valor.
suficiente recordar que el efecto de SELECT consiste en
poblar la vista con las filas de datos apropiadas extraídas Los índices son particularmente importantes en un
de las tablas base Propiedad y Area. software de base de datos, ya que sin ellos el tiempo de
respuesta sería intolerablemente largo. Por otro lado,
Las vistas son dinámicas en el sentido que los cambios establecer y mantener índices hace incrementar el ‘peso’
realizados en la tabla base se reflejarán en las vistas que de la base de datos, por lo que decidir cuándo debemos
obtienen la información de esa tabla. En nuestro ejemplo, utilizar índices es una parte importante de la optimización
si cambiamos el nombre de un ocupante en la columna de la base de datos.
Nombre de la tabla Propiedad, el cambio aparecerá
inmediatamente en la columna Ocupante de la vista La sintaxis es:
PropA.
CREATE INDEX [UNIQUE] <nombre_indice>
En el Modelo Relacional teórico también deberían ser ON <nombre_tabla>
(<nombre_columna> [DESC]
posibles (excepto en el caso que no tenga sentido [,<nombre_columna> [DESC]]...);
permitirlo) los cambios en la dirección opuesta, es decir
permitir que los cambios realizados sobre la vista se Es habitual crear un índice para, al menos, la clave
actualicen en la tabla base. La posibilidad de actualizar la primaria de cada tabla y para las claves externas. En
tabla base a partir de la vista, sin embargo, cambia nuestro ejemplo de la tabla Propiedad utilizaríamos la

© 1999 Universitat de Girona – SIGTE. Actualización 2010 Página -11 Página -12 © 1999 Universitat de Girona – SIGTE. Actualización 2010
Bases de datos espaciales: estructuras y 9. Lenguaje de Consulta Estructurado (SQL)
modelos

siguiente expresión para crear un índice en la columna Por ejemplo:


NumId:
DROP TABLE Propiedad;
CREATE INDEX UNIQUE IdIndc
ON Propiedad (NumId); borraría toda la tabla Propiedad de la base de datos, y:

Este comando creará un índice en la columna NumId de la DROP INDEX IdIndc;


tabla Propiedad. Como no hemos incluido la palabra clave
opcional DESC, el índice estará por orden ascendente. Sin borraría el índice IdIndc de la base de datos.
embargo, hemos incluido la palabra clave UNIQUE, para
insistir que cada valor del índice es único, es decir, no DROP VIEW PropA;
puede haber dos filas con el mismo valor NumId.
borraría la vista PropA.
Al especificar NOT NULL en el comando CREATE TABLE y
utilizar UNIQUE en el comando CREATE INDEX, hemos
implementado, para la tabla Propiedad, la integridad de 9.2 Comandos SQL de Manipulación de
entidades requerido por el Modelo Relacional de Codd. Datos
Ahora no sería posible que un usuario entrara un NumId
que duplicase un valor previamente introducido ni entrar Los comandos del Lenguaje de Definición de Datos (DDL)
una nueva fila sin especificar un valor para el atributo permiten crear y mantener una estructura de base de
NumId. datos. Los datos pueden ser entrados, actualizados,
consultados y borrados mediante los siguientes cuatro
comandos SQL:
• DROP TABLE
INSERT INTO
Habrá momentos en que necesitaremos borrar una tabla, UPDATE
DELETE FROM
vista o índice de una base de datos. El comando DROP SELECT
realiza esta tarea, de la siguiente manera:

DROP TABLE <nombre_tabla>;


• INSERT INTO
DROP INDEX <nombre_indice>;
INSERT INTO permite añadir datos a una tabla mediante
DROP VIEW <nombre_vista>; la sintaxis:

INSERT INTO <nombre_tabla>

© 1999 Universitat de Girona – SIGTE. Actualización 2010 Página -13 Página -14 © 1999 Universitat de Girona – SIGTE. Actualización 2010
Bases de datos espaciales: estructuras y 9. Lenguaje de Consulta Estructurado (SQL)
modelos

[<lista_columnas>] [WHERE <condición>];


VALUES (<lista_valores>);
Así, si sabemos el valor de la propiedad con NúmId igual a
Supongamos que deseamos insertar un nuevo registro en 13 y que Jaime es la persona que vive allí:
la tabla Propiedad, pero de momento aún no sabemos su
valor o el nombre de su ocupante. UPDATE Propiedad
SET Nombre = ‘Jaime’,
INSERT INTO Propiedad Valor = 50000
(Direccion, NumId) WHERE NúmId = 13;
VALUES (‘Av. Girona, 6’);
Actualizará la base de datos convenientemente.
insertaría el nuevo registro en la tabla. Fíjate que si
hubiéramos sabido el valor y el nombre de los/as
ocupantes (o sea, que deseáramos introducir una fila • DELETE FROM
completa de datos) podríamos haber omitido la cláusula
lista_columnas y dar los datos en el orden especificado Para borrar una fila (o varias) de una tabla utilizaremos el
cuando creamos la tabla mediante CREATE TABLE. comando DELETE FROM.

La utilización de INSERT INTO puede ser extremadamente La sintaxis es:


tediosa cuando tratamos con series de datos muy
grandes, por lo que la mayoría de los SGBDR tienen una DELETE FROM <nombre_tabla>
utilidad que permite leer los datos de una tabla desde [WHERE <condicion>];
archivos externos. La sintaxis de estos comandos varia de
paquete en paquete. Por ejemplo, si la propiedad 5 ha sido destruida:

DELETE FROM Propiedad


WHERE NumId = 5;
• UPDATE
Fíjate que aunque este ejemplo de utilización del comando
Mientras que INSERT INTO crea una nueva fila de datos, DELETE sólo considera una fila, este comando puede
UPDATE tan sólo altera las filas ya existentes. utilizarse para llevar a cabo operaciones múltiples de
borrado. Entonces, si queremos borrar todas las
La sintaxis es: propiedades con un valor menor de 30.000:

UPDATE <nombre_tabla>
SET <nombre_columna> = <expresión> DELETE FROM Propiedad
[,<nombre_columna> = <expresión>]... WHERE Valor < 30000;

© 1999 Universitat de Girona – SIGTE. Actualización 2010 Página -15 Página -16 © 1999 Universitat de Girona – SIGTE. Actualización 2010
Bases de datos espaciales: estructuras y 9. Lenguaje de Consulta Estructurado (SQL)
modelos

• SELECT crearía un listado con sólo las columnas Nombre y


Direccion de la tabla Propiedad. Éste es el equivalente en
SELECT es el comando que utilizan los usuarios más SQL de una operación PROJECT del álgebra relacional.
frecuentemente, ya que permite consultar la base de
datos y esa es la operación realizada con mayor frecuencia SELECT * FROM Propiedad WHERE Valor > 40000;
en cualquier base de datos. Las consultas con SELECT
pueden ser muy complejas, puesto que hay un gran Esta expresión produciría una tabla con sólo esas filas
número de palabras clave y funciones que pueden cuyo Valor es mayor que 40.000. Éste es el equivalente de
utilizarse con este comando. Aquí sólo examinaremos una operación SELECT del álgebra relacional (ver Figura
unos pocos para que te hagas una idea de su uso. 9.1a).

La sintaxis es: Como vimos en el momento de tratar el comando CREATE


VIEW, es posible anidar un comando SQL dentro de otro.
SELECT <lista_columnas> Esto se hace a menudo con la sentencia SELECT. Para
FROM <lista_tablas> saber, por ejemplo, quién vive en una casa que cuesta
[WHERE condiciones_busqueda]; más que la de Jaime:

El resultado de esta sentencia SELECT es una nueva tabla SELECT Nombre


que contiene los datos que coinciden con la condición FROM Propiedad
especificada en la sentencia. La tabla resultado es WHERE Valor > (SELECT Valor
FROM Propiedad
transitoria (sólo existe en la pantalla) a menos que se WHERE Nombre = `Jaime´);
especifique lo contrario.
produciría la respuesta que se muestra en la Figura 9.1b.
La sentencia SELECT más simple de todas es:
Base de Datos
SELECT * FROM Propiedad;
PROPIEDAD
Esto crea una lista de toda la tabla Propiedad. En SQL, el NumId Nombre Direccion
asterisco (*) significa, como en el DOS (Disk Operating Valor NumArea
System), ‘todos’.
1 Jorge C/ Chamartín
SELECT Nombre, Direccion FROM Propiedad; 30000 1 2 Marcos
C/ Fuentes 60000 Nulo
3 Irene Parque la Paz
28000 2
4 Javier Av. F. Lorca
55000 1

© 1999 Universitat de Girona – SIGTE. Actualización 2010 Página -17 Página -18 © 1999 Universitat de Girona – SIGTE. Actualización 2010
Bases de datos espaciales: estructuras y 9. Lenguaje de Consulta Estructurado (SQL)
modelos

5 Marta Plaza de Mayo FROM Propiedad


25000 2 WHERE Nombre = `Jaime´);
6 Jaime Av. Girona
50000 Nulo Nombre
7 Pedro Av. Girona Marcos
50000 Nulo Javier

c) SELECT NúmId
AREA FROM Propiedad, Area
NúmArea Cod. Postal WHERE Area.Nombre = ‘Barrio San José’
Nombre AND Area.NumArea = Propiedad.NumArea
AND Valor < 30000;
1 17003
Centro Ciudad NúmId
2 17007 3
Barrio San José 5

Fig. 9.1: Operaciones SELECT en SQL

También es posible crear consultas que obtienen


información de más de una tabla (o vista). Para producir
a) Operaciones SELECT
una tabla que identifique cualquier casa en el área Barrio
SELECT * FROM Propiedad WHERE Valor > 40000; San José con un valor inferior a 30.000, por ejemplo, es
necesario extraer datos de las tablas Propiedad y Area. La
NumId Nombre Direccion Valor siguiente expresión:
NumArea
SELECT NumId
2 Marcos C/ Fuentes 60000 FROM Propiedad, Area
Nulo WHERE Area.Nombre = ‘Barrio San José’
4 Javier Av. F. Lorca 55000 AND Area.NumArea = Propiedad.NumArea
1 AND Valor < 30000;
6 Jaime Av. Girona 50000
Nulo
7 Pedro Av. Girona 50000 Produciría una lista de los NumId de las propiedades que
Nulo cumplen con nuestra pregunta (ver Figura 9.1c).

b) SELECT Nombre Es posible utilizar otras palabras clave como ‘ORDER BY’,
FROM Propiedad ‘DISTINCT’, ’HAVING’ y ‘GROUP BY’ para controlar el
WHERE Valor > (SELECT Valor formato de los resultados del comando SELECT, pero éstas

© 1999 Universitat de Girona – SIGTE. Actualización 2010 Página -19 Página -20 © 1999 Universitat de Girona – SIGTE. Actualización 2010
Bases de datos espaciales: estructuras y 9. Lenguaje de Consulta Estructurado (SQL)
modelos

se detallan en el caso práctico que acompaña a esta GRANT select on PropA to UsuA;
unidad didáctica.
Permitiría al Usuario A, que responde al nombre de
usuario UsuA, ver y seleccionar datos de la tabla vista
9.3 Lenguaje de Control de Datos PropA.

En sistemas multiusuario, es necesario un mecanismo


• REVOKE
para controlar el acceso a determinadas partes de la base
de datos. Como ya hemos visto, las VISTAS ofrecen un
El comando REVOKE elimina los privilegios dados
mecanismo que personaliza la apariencia de los datos para
previamente.
excluir determinados atributos (columnas). Pero no hay
quién evite que el Usuario A (que tiene la vista PropA
La sintaxis es:
creada para él) consulte la tabla Propiedad además de la
vista PropA. SQL ofrece dos comandos con los que REVOKE <lista_privilegios>
mantener la seguridad de los datos: On <lista_tablas>
From <lista_usuarios>;
- GRANT
- REVOKE

• GRANT 9.4 ¿Qué has aprendido en esta lección?

Las bases de datos en las que la seguridad es un elemento • Lenguaje de Consulta Estructurado (SQL):
importante se crean, normalmente, con una restricción
sobre todos los usuarios, excepto para los que el - lenguaje de BD relacionales dominante
administrador ha dado permiso explícitamente, mediante - declarativo
la sentencia GRANT del SQL. - de alto nivel
- completo
La sintaxis es: - fácil de usar

GRANT <lista_privilegios>
On <lista_tablas>
To <lista_usuarios>;

Entonces, para permitir que el Usuario A vea la vista


PropA:

© 1999 Universitat de Girona – SIGTE. Actualización 2010 Página -21 Página -22 © 1999 Universitat de Girona – SIGTE. Actualización 2010

También podría gustarte