Вы находитесь на странице: 1из 7

1 ASIR GTB Lenguaje SQL

Introduccin

El lenguaje SQL (Structured Query Language) permite formular operaciones
relacionales, es decir, operaciones que permiten definir y manipular una base de datos
relacional.

No es un lenguaje procedural porque:
Procesa varias filas a la vez, mejor que una sola.
La navegacin para buscar los datos es automtica.

El lenguaje es sencillo, muy similar al idioma ingls y los comandos bsicos pueden aprenderse
en pocas horas. Es el mismo lenguaje para todos los tipos de usuarios desde cualquier
herramienta y para cualquier tipo de actividad incluyendo:
Administradores del sistema y de Base de Datos.
Programadores de Aplicaciones.
Usuarios finales.

Las tablas que los usuarios pueden manejar son de dos tipos: tablas base y vistas.
1. Una tabla base, es una tabla que tiene existencia por s misma, es decir, sus filas
(registros) se encuentran almacenados fsicamente en uno o varios ficheros fsicos.
2. Una vista es una tabla virtual, esto es, no tiene existencia por s misma, se definen
a partir de una o ms tablas base. De ellas solamente existe su definicin en el
diccionario de datos, y cuando se opera con ellas, se opera en realidad con las
tablas base sobre las que est definida.

Los SGBDR tienen una base de datos propia del sistema, que se llama catlogo o
diccionario de datos y que contiene el esquema de las bases de datos de usuario, es
decir, contiene informacin sobre las tablas base, las vistas, ndices, los derechos de
acceso, identificacin de usuarios, etc. El catlogo no es propio del lenguaje SQL, sino
de cada sistema en particular, pero puede consultarse utilizando el lenguaje SQL.

El lenguaje SQL tiene varios componentes:
Lenguaje de definicin de datos (LDD): proporciona rdenes para la definicin de
esquemas de relacin, borrado de relaciones, creacin de ndices y modificacin de
esquemas de relacin. Por otro lado, incluye rdenes para la definicion de vistas.
Adems nos permite definir restricciones de integridad sobre los datos y de acceso
de los usuarios.
Lenguaje de manipulacin de datos (LMD): est compuesto por el lenguaje de
consultas y por rdenes para insertar, borrar y modificar tuplas. Se puede utilizar:
de forma interactiva, escribiendo la orden SQL directamente en un terminal y
obteniendo una respuesta inmediata, o
de forma embebida en un lenguaje de programacin de propsito general.
Lenguaje de control de datos (LCD): SQL incluye rdenes para la especificacin del
comienzo y final de transacciones. Una transaccin es una coleccin de
operaciones que se llevan a cabo como una funcin lgica simple en un aplicacin
de BD, y no pueden violar ninguna ligadura de consistencia, aunque
temporalmente, durante la transaccin, puede ser necesario permitir
inconsistencias.


1 ASIR GTB Lenguaje SQL

Lenguaje de manipulacin de datos (LMD)

Se distinguen dos tipos de operaciones:

Operaciones de Actualizacin (actan sobre una nica tabla)
INSERT: insercin de filas
DELETE: eliminacin de filas
UPDATE: modificacin de filas
Operaciones de Consulta (actan sobre varias tablas)
SELECT: consulta sobre la Base de Datos

Operaciones de consulta

Sintaxis de la instruccin SELECT:

SELECT [UNIQUE/DISTINCT] <expresin>
FROM <lista_de_tablas>
[WHERE <condicion>]
[GROUP BY <lista_de_atributos>
[HAVING <condicin_de_grupo>]]
[ORDER BY <lista_de_atributos>[ASC/DESC] ];

La estructura bsica de una expresin de consulta en SQL consiste en tres clusulas:
select, from y where.

Select: Se usa para listar los atributos deseados del resultado de una consulta. Select
lista todos los valores asociados a los atributos, aunque estn duplicados. Donde se
quiera forzar la desaparicin de duplicados, se escribir select distinct (o select
unique). Tambin se puede especificar explcitamente que no se eliminen los
duplicados usando select all. El asterisco * se utiliza de comodn, para denotar todos
los atributos. Tambin puede contener expresiones aritmticas (+, - , . , /) que operan
sobre constantes o atributos.

From: Se utiliza para indicar de qu tablas se obtendrn los datos.

Where: Permite seleccionar las tuplas que cumplen una determinada condicin. SQL
usa las conectivas and, or y not en la clusula where y los operandos de las
conectivas pueden ser expresiones que contengan <,<=,>,>=,=,<> para comparar
expresiones aritmticas y cadenas.

Por ejemplo, para obtener los nombres y nmeros de prstamo de todos los clientes
que tienen un prstamo en el banco:

select distinct nombre-cliente, prestatario.nmero-prstamo
from prestatario, prstamo
where prestatario.nmero-prstamo =prstamo.nmero-prstamo

Operadores en la clusula where:
De comparacin (<, <=, >, >=, <>, =)
Lgicos (AND, OR, NOT)

1 ASIR GTB Lenguaje SQL

BETWEEN ... AND ... : establece una comparacin dentro de un intervalo. Tambin
se puede utilizar NOT BETWEEN.
LIKE : Establece una comparacin entre cadenas de caracteres, empleando los
comodines '%' que sustituye a una cadena de caracteres cualquiera y '_' : sustituye
a un carcter cualquiera. Tambin se puede utilizar NOT LIKE.
IN : Indica pertenencia. Comprueba la pertenencia de una valor a un conjunto dado
(que debe ir entre parntesis). Este conjunto puede especificarse por enumeracin
de sus elementos o por el resultado de la ejecucin de una sentencia SELECT.
Tambin se puede utilizar NOT IN.
IS NULL : Comprueba si un valor determinado es nulo (NULL). Tambin se puede
utilizar IS NOT NULL.
Cuantificadores (ANY, ALL) : ALL: todos, ANY: alguno. Van acompaados de un
operador de comparacin: >ALL, >=ALL, <ALL, ..., >ANY, >=ANY, <ANY, .
Van asociados a un conjunto o a una subconsulta.
Existencial (EXISTS, NOT EXISTS) : Indica la existencia o no de un conjunto. Va
asociado a una subconsulta.

Orden en la recuperacin de las tuplas:
order by hace que las tuplas resultantes de una consulta se presenten en orden
ascendente. Para que el orden sea descendente se utiliza desc, y asc para que sea
ascendente. Por ejemplo, para listar la relacin prstamo en orden descendente para
importe y ascendente para nmero-prstamo
select *
from prstamo
order by importe desc, nmero-prstamo asc

Funciones de agregacin
Son funciones que toman una coleccin de valores como entrada y producen un nico
valor de salida. SQL proporciona cinco funciones de agregacin primitivas:
avg: media aritmtica de un atributo o una expresin numrica
min: mnimo de un atributo o expresin numrica
max: mximo de un atributo o expresin numrica
sum: suma total de atributos o expresiones numricas
count (*): contador de tuplas
count (distinct): contador de tuplas parcial, no tiene en cuenta
valores nulos ni duplicados

Todos los operadores, excepto avg y sum, pueden operar con nmeros y cadenas de
caracteres. La funcin de agregacin se coloca en la lnea select. La clusula group
by se utiliza cuando las funciones de agregacin se aplican a un grupo de conjuntos
de tuplas, y la clusula having se utiliza para poner una condicin a los grupos. Si en
una misma consulta aparece where y having, se aplica primero el predicado de where.

Por ejemplo, obtener el saldo medio de cada cliente que vive en Madrid y tiene como
mnimo tres cuentas:
select impositor.nombre-cliente, avg (saldo)
from impositor, cuenta, cliente
where impositor.nmero-cuenta =cuenta.nmero-cuenta and
impositor.nombre-cliente =cliente.nombre-cliente and
ciudad-cliente =Madrid
group by impositor.nombre-cliente
having count (distinct impositor.nmero-cuenta) >=3


1 ASIR GTB Lenguaje SQL

Operaciones sobre conjuntos
Union: corresponde a la unin de conjuntos. Por ejemplo, para encontrar todos
los clientes que poseen un prstamo, una cuenta o ambas cosas
(select nombre-cliente
from impositor)
union
(select nombre-cliente
from prestatario)

La operacin union elimina duplicados automticamente. Para conservarlos se
utiliza union all.

Intersect: corresponde a la interseccin de conjuntos. Tambin elimina
duplicados, y se utiliza intersect all para que no los elimine.
Minus: equivale a la diferencia de conjuntos. Para conservar los duplicados se
utiliza minus all.

Subconsultas anidadas
Una subconsulta es una expresin select-from-where que se anida dentro de otra
consulta. Se utilizan habitualmente para comprobaciones sobre pertenencia a
conjuntos, comparacin de conjuntos y cardinalidad de conjuntos.

La operacin renombramiento (alias)
SQL proporciona un mecanismo para renombrar tanto relaciones como atributos,
utilizando la palabra as: nombre-antiguo as nombre-nuevo. Puede aparecer tanto en
select como en from. Se suele utilizar para abreviar el nombre de una tabla o columna
que se utiliza a menudo o cuando se necesita comparar dos tuplas de la misma
relacin.

Operaciones de actualizacin

Borrado: se expresa igual que una consulta, pudindose borrar solamente tuplas
enteras. Su forma es
delete from r
where P
donde P representa una condicin y r una relacin. Una orden delete opera sobre una
nica relacin, aunque puede contener un select anidado que use una relacin de la
cual se van a borrar las tuplas.

Insercin: para insertar datos, o se especifica la tupla que se desea insertar o se
formula una consulta cuyo resultado sea el conjunto de tuplas que se desee insertar.
Para la insercin de una tupla, los valores se especifican en el mismo orden que los
atributos de la relacin, aunque SQL permite especificar tambin los atributos. Por
ejemplo,
insert into cuenta (nombre-sucursal, nmero-cuenta, saldo)
values (Navacerrada,C-9732,24000)

La insercin tras una consulta se realiza igual que la anterior, pero en vez de values se
pone la consulta.

Actualizaciones: update se utiliza para cambiar un valor dentro de una tupla, sin
cambiar todos los valores de la misma. Por ejemplo, para pagar un inters de 5% a las
cuentas con saldo menor que 2000 euros

1 ASIR GTB Lenguaje SQL

update cuenta
set saldo =saldo * 1.05
where saldo <=2000

En general, la clusula where puede contener cualquiera de las construcciones vlidas
para una clusula where de un select, incluso instrucciones select anidadas.

Lenguaje de definicin de datos (LDD)

El LDD de SQL permite la especificacin no slo de un conjunto de relaciones, sino
tambin de alguna informacin relativa a esas relaciones, incluyendo:
el esquema de cada relacin
el dominio de valores asociado a cada atributo
las ligaduras de integridad
el conjunto de ndices que se deben mantener por cada relacin
informacin de seguridad y autorizacin para cada relacin
la estructura de almacenamiento fsico de cada relacin en el disco

Estas funciones permiten definir y modificar el esquema de una base de datos y por
tanto provocarn una modificacin del catlogo del sistema, que contiene el esquema
de la base de datos.

Tipos de dominios en SQL:
char (n) es una cadena de caracteres de longitud fija n
varchar (n) es una cadena de caracteres de longitud variable, con un mximo de n
int es un nmero entero
smallint es un entero pequeo
numeric (p,d) es un nmero en coma flotante, con p dgitos (ms el signo) y d que
son la parte decimal
real, double precision son respectivamente, nmeros en coma flotante y nmeros
en coma flotante en doble precisin
float (n) es un nmero en coma flotante, cuya precisin la especifica en usuario al
menos de n dgitos
date es una fecha (aaaa, mm, dd)
time es la hora

SQL proporciona adems un tipo de datos llamado interval y permite realizar clculos
basados en fechas, horas e intervalos.

A menudo es til comparar valores de dominios compatibles. Esto se lleva a cabo
transformando los dos valores a un mismo tipo de dominio, llamndose esta
transformacin coercin. SQL permite tambin incluir en la declaracin de dominio de
un atributo la especificacin not null, prohibiendo la insercin de valores nulos. Not
null se pone detrs del dominio. SQL permite la definicin de nuevos dominios
mediante create domain.

Manipulacin de esquemas en SQL

Para crear una nueva tabla se utiliza:
CREATE TABLE nombre_tabla
(<definicin_atributo_1>[UNIQUE] [NOT NULL],

1 ASIR GTB Lenguaje SQL

(<definicin_atributo_2>[UNIQUE] [NOT NULL],
.....................
(<definicin_atributo_n>[UNIQUE] [NOT NULL]);
donde:
definicin_atributo =nombre_atributo tipo_dato (tamao)
UNIQUE: no se permiten valores duplicados en la columna
NOT NULL: no se permiten valores nulos en la columna

Para borrar una relacin se utiliza drop table, y la instruccin alter table se utiliza
para aadir atributos a una relacin existente (alter table r add A) y para borrar
atributos se escribe alter table r drop A.

Definicin de vistas

Una vista en SQL se define utilizando la orden create view. La forma es create view v
as <expresin de consulta>donde v es el nombre que le damos a la vista. Estos
nombres, despus de ser creados, se pueden utilizar como cualquier relacin.
SQL incorporado

Es un lenguaje de consultas declarativo muy potente. Aunque la formulacin de
consultas suele ser ms sencilla en SQL que en un lenguaje de programacin de
propsito general se hace necesario el uso de este ya que no todas las consultas
pueden expresarse en SQL y las acciones declarativas (impresin de un informe,
interaccin con un usuario) tampoco no se pueden hacer con SQL.
La norma SQL define la utilizacin de SQL dentro de varios lenguajes de
programacin, llamados lenguaje anfitrin, como pascal, C, fortran, PL/I. Las
estructuras SQL que se admiten en el lenguaje anfitrin constituyen el SQL
incorporado. La forma de las consultas en SQL incorporado es EXEC SQL
<instruccin de SQL>END-EXEC (en pascal y C se acaba con ;). En el programa se
incluye SQL INCLUDE para identificar el lugar donde el procesador debe insertar las
variables especiales que se van a utilizar para la comunicacin entre el programa y el
SGBD. Para identificar variables del lenguaje anfitrin se preceden de ( : ).
Para formular una consulta relacional se utiliza declare cursor. La instruccin open
hace que se evale la consulta, y fetch permite que los valores de una tupla se
obtengan como variables del lenguaje anfitrin. La instruccin close indica al sistema
de base de datos que borre la relacin temporal que contiene el resultado de la
consulta.
Por ejemplo, en el prgrama se tiene una variable importe y se desea encontrar los
nombres y ciudades de residencia de aquellos clientes que superan esa cantidad

EXEC SQL
declare c cursor for
select nombre-cliente, ciudad-cliente
from impositor, cliente
where impositor.nombre-cliente =cliente.nombre-cliente and
cuenta.nmero-cuenta =impositor.nmero-cuenta and
impositor.saldo >:importe
END-EXEC

La variable c se denomina cursor de la consulta y se utiliza para identificar la consulta
en open:


1 ASIR GTB Lenguaje SQL

EXEC SQL open c END-EXEC

Se realiza la consulta y devuelve el resultado dentro de una relacin temporal. Para
hacer las tuplas visibles desde el programa se pondr:

EXEC SQL fetch c into :nc, :cc END-EXEC

nc y cc son los nombres de las variables del programa anfitrin que equivalen a
nombre-cliente y ciudad-cliente. Fetch devuelve nicamente una tupla y sita el cursor
en la siguiente tupla del resultado.