Lenguajes Formales
Lenguajes Formales
Lenguajes Formales
Bases de Datos
σ Π ٨ ρ Æ select, where, from, …
Ingenierí
Ingeniería Té
Técnica en Informá
Informática de Sistema
Introducció
Introducción 2
SQL Índice
Lenguaje comercial de mayor popularidad e influencia ¾ Historia y Componentes del SQL
¾ Lenguaje de Definición de Datos
Usa una combinación de álgebra relacional
y cálculo relacional ¾ Estructura Básica
Introducció
Introducción 3 Introducció
Introducción 4
Versió
Versión Original
Componentes
Originariamente se llamó
Sequel como parte del
Proyecto System R
del SQL
SQL: Structured Query Language
1
1986 SQL-
SQL-89 y posteriores
Se publica la norma SQL-86 Actualmente los sistemas de bases de datos son
ANSI: American National Standards Institute normalmente compatibles con las características
Instituto Nacional Americano de Normalización de SQL-89
ISO: International Standards Organization
Organización Internacional de Normalización SQL-92 Æ Ampliamente implementada
pero no íntegramente
SQL:1999 Æ Superconjunto de SQL-92;
ningún sistema de bases de datos
soporta todo el estándar
En 1987, IBM publica su nueva norma SAA-SQL
Muchos sistemas de bases de datos
proporcionan características no estándar
Historia y Componentes del SQL 7 Historia y Componentes del SQL 8
2
Especificar Relaciones
de Definición ¾
¾
El esquema de cada relación
El dominio de valores asociado a cada atributo
de Datos
¾ Las restricciones de integridad
¾ El conjunto de índices que se deben mantener por
cada relación
¾ Información de seguridad y autorización para cada
relación
SQL ¾ La estructura de almacenamiento físico de cada
Bases de Datos relación
Ingenierí
Ingeniería Té
Técnica en Informá
Informática de Sistemas
Lenguaje de Definició
Definición de Datos 14
Dominios Dominios
¾ char (n) es una cadena de caracteres de longitud fija, con ¾ real, double precision son respectivamente números en
una longitud n especificada por el usuario (character) punto flotante y números en punto flotante de doble
precisión
¾ varchar (n) es una cadena de caracteres de longitud
variable, con una longitud n especificada por el usuario ¾ float (n) es un número en punto flotante, cuya precisión
(character varying) es la menos de n dígitos
¾ int es un entero (integer) ¾ date es una fecha del calendario, que contiene un año de
cuatro dígitos, un mes y un día del mes
¾ smallint es un entero pequeño
¾ time es la hora del día, expresada en horas, minutos y
¾ numeric (p,d) es un número en punto flotante, cuya
segundos
precisión la especifica el usuario; el número está formado
por p dígitos y, de esos p dígitos, d pertenecen a la parte ¾ timestamp es una combinación de date y time
decimal
Lenguaje de Definició
Definición de Datos 15 Lenguaje de Definició
Definición de Datos 16
Coerció
Coerción de Tipos not null
En los sistemas de bases de datos se usa coerción SQL permite incluir en la declaración de dominio de
de tipos para permitir la comparación de valores un atributo la cláusula not null que prohíbe la
compatible inserción de valores nulos en ese atributo
Lenguaje de Definició
Definición de Datos 17 Lenguaje de Definició
Definición de Datos 18
3
Definició
Definición de Esquemas Restricciones Integridad
Un esquema se define mediante la orden Restricciones de integridad más usadas:
create table r (A1D1, A2D2, …, AnDn, primary key (Aj1, Aj2, …, Ajn) define la clave
restricción-integridad1, primaria de la relación; los atributos que la
…, forma deben ser no nulos y únicos
restricción-integridadk)
check (P) define un predicado que debe
satisfacer cada tupla de la relación
r nombre de la relación unique (Aj1, Aj2, …, Ajn) define una clave
Ai nombre del atributo candidata; atributos únicos pero pueden ser
nulos
Di dominio del atributo Ai
Lenguaje de Definició
Definición de Datos 19 Lenguaje de Definició
Definición de Datos 20
Lenguaje de Definició
Definición de Datos 21 Lenguaje de Definició
Definición de Datos 22
Estructura
una relación existente
Básica
alter table r add A D
SQL
Bases de Datos
Ingenierí
Ingeniería Té
Técnica en Informá
Informática de Sistemas
Lenguaje de Definició
Definición de Datos 23
4
Expresió
Expresión SQL Base Típica en SQL
Consulta Tí
La estructura básica de una expresión de consulta select A1, A2, …, An Ai representa un atributo
SQL consiste en tres cláusulas: select, from y where from r1, r2, …, rn ri representa una relación
where P P representa un predicado
select: corresponde a la operación proyección
del álgebra relacional Π A1, A2, …, An (σP (r1 x r2 x … x rn))
from: corresponde a la operación producto
cartesiano del álgebra relacional
where: corresponde al predicado de la
select where from
operación selección del álgebra relacional
Hecho histórico desafortunado: select tiene un El resultado de una consulta SQL es una relación
significado diferente en SQL y en el álgebra relacional
Estructura Bá
Básica 25 Estructura Bá
Básica 26
select select:
select: duplicados
Obtener los nombre de todas las sucursales que Obtener los nombre de todas las sucursales, sin
aparecen en la relación prestamo duplicados, que aparecen en la relación prestamo
Estructura Bá
Básica 27 Estructura Bá
Básica 28
select:
select: asterisco select:
select: expr.
expr. aritmé
aritméticas
Se puede utilizar el símbolo * para hacer referencia La cláusula select puede contener expresiones
a todos los atributos aritméticas que contengan los operadores +, -, * y /
Estructura Bá
Básica 29 Estructura Bá
Básica 30
5
where where:
where: conectivas ló
lógicas
Obtener todos los números de préstamo para SQL usa las conectivas lógicas and, or y not y
préstamos hechos en la sucursal de nombre Fingoi los operadores de comparación matemáticos
Estructura Bá
Básica 31 Estructura Bá
Básica 32
where:
where: rangos de valores from
Obtener el número de préstamo de aquellos Obtener los nombre, números de préstamo e importes de
préstamos por importes entre 9000€ y 11000€ todos los clientes que tienen un préstamo en el banco
not between
select numero_prestamo select nombre_cliente, prestatario.numero_prestamo,
from prestamo importe
where importe between 9000 and 11000 from prestatario, prestamo
where prestatario.numero_prestamo
= prestamo.numero_prestamo
select numero_prestamo
from prestamo
where importe >=9000 and importe <=11000 nombre_relacion.nombre_atributo evita ambigüedad
Estructura Bá
Básica 33 Estructura Bá
Básica 34
nombre_antiguo as nombre_nuevo
select nombre_cliente, T.numero_prestamo, importe
from prestatario as T, prestamo as S
select nombre_cliente, prestatario.numero_prestamo where T.numero_prestamo = S.numero_prestamo
as id_prestamo, importe
from prestatario, prestamo
where prestatario.numero_prestamo
= prestamo.numero_prestamo
Estructura Bá
Básica 35 Estructura Bá
Básica 36
6
Tuplas misma Relació
Relación Cadenas de Caracteres
Las variables tupla son de gran utilidad para En SQL las cadenas de caracteres se especifican
comparar dos tuplas de la misma relación encerrándolas entre cadenas simples
Un carácter comilla dentro de una cadena se
Obtener los nombres de las sucursales que poseen unos especifica usando dos caracteres comilla
activos mayores que al menos una sucursal de Santiago
Se emplea el operador like para el encaje de patrones
select distinct T.nombre_sucursal
from sucursal as T, sucursal as S %: Encaja con cualquier subcadena
where T.activos > S.activos _: Encaja con cualquier caracter
and S.ciudad_sucursal=‘Santiago’
Estructura Bá
Básica 37 Estructura Bá
Básica 38
Operadores like/
like/not like Ordenació
Ordenación
Obtener los nombres de todos los clientes cuyo La cláusula order by permite un cierto control sobre
nombre de calle contenga/no contenga la cadena ‘el’ el orden en el que se presentan las tuplas del resultado
Estructura Bá
Básica 39 Estructura Bá
Básica 40
Ascendente/Descendente
La ordenación por defecto de SQL es ascendente
select *
Conjuntos y
Agregación
from prestamo
order by importe desc, número_prestamo asc
7
Operaciones sobre Conjuntos Unió
Unión
Las operaciones sobre conjuntos corresponden
U Clientes que posean un préstamo, una cuenta o las
con las operaciones del álgebra relacional U, y - dos cosas
Conjuntos y Agregació
Agregación 43 Conjuntos y Agregació
Agregación 44
Intersecció
Intersección Excepto
Clientes que posean tanto un préstamo como una Clientes que posean una cuenta pero que no tienen
cuenta ningún préstamo
La operación intersección, por defecto, elimina duplicados La operación excepto, por defecto, elimina duplicados
Conjuntos y Agregació
Agregación 45 Conjuntos y Agregació
Agregación 46
Funciones de Agregació
Agregación Media
Son funciones que toman una colección de valores Obtener la media de saldos de las cuentas de la
como entrada y produce un único valor como salida sucursal de ‘Fingoi’
Conjuntos y Agregació
Agregación 47 Conjuntos y Agregació
Agregación 48
8
Agrupació
Agrupación Contar
Obtener el saldo medio de las cuentas de cada Obtener el número de impositores de cada sucursal
sucursal
select nombre_sucursal,
select nombre_sucursal, avg (saldo) count (distinct nombre_cliente)
from cuenta from impositor, cuenta
group by nombre_sucursal where
impositor.numero_cuenta=cuenta.numero_cuenta
group by nombre_sucursal
Conjuntos y Agregació
Agregación 49 Conjuntos y Agregació
Agregación 50
Conjuntos y Agregació
Agregación 51 Conjuntos y Agregació
Agregación 52
Secuencia Ló
Lógica Secuencia Ló
Lógica
Obtener el saldo medio de los clientes que viven Obtener el saldo medio de los clientes que viven
en Santiago y tienen dos ó más cuentas en Santiago y tienen dos ó más cuentas
Conjuntos y Agregació
Agregación 53 Conjuntos y Agregació
Agregación 54
9
Secuencia Ló
Lógica Secuencia Ló
Lógica
Obtener el saldo medio de los clientes que viven Obtener el saldo medio de los clientes que viven
en Santiago y tienen dos ó más cuentas en Santiago y tienen dos ó más cuentas
Conjuntos y Agregació
Agregación 55 Conjuntos y Agregació
Agregación 56
Subconsultas
Una subconsulta es una expresión
Anidación de
select-from-where dentro de
una consulta
SQL
Bases de Datos
Ingenierí
Ingeniería Té
Técnica en Informá
Informática de Sistemas
Anidació
Anidación de Consultas 58
10
Comparació
Comparación de Conjuntos Comparació
Comparación de Conjuntos
La cláusula some permite expresar la idea “que al Obtener los nombre de las sucursales que poseen
menos una” y la cláusula all permite expresar la idea un activo mayor que al menos una sucursal en
“que todas”, útiles para comparar un valor con un Santiago
conjunto de valores dados por una consulta select
select nombre_sucursal
>some >=some from sucursal
>all >=all where activo >some
<some <=some
<all <=all (select activo from sucursal
=some <>some where ciudad_sucursal=‘Santiago’)
=all <>all
any=some
Anidació
Anidación de Consultas 61 Anidació
Anidación de Consultas 62
Cardinalidad Vacías
Relaciones Vací
La cláusula exists devuelve el valor lógico Obtener todos los cliente que tienen tanto una
cierto si la subconsulta no está vacía cuenta como un préstamo en el banco
Anidació
Anidación de Consultas 63 Anidació
Anidación de Consultas 64
Tuplas Duplicadas
Obtener todos los clientes que tienen sólo una
Consultas
cuenta en la sucursal de Fingoi
Complejas
select T.nombre_cliente
from impositor as T
where unique
(select R.nombre_cliente
from cuenta, impositor as R
where T.nombre_cliente=R.nombre_cliente
and R.numero_cuenta=
cuenta.numero_cuenta SQL
and cuenta.nombre_sucursal=‘Fingoi’ Bases de Datos
Ingenierí
Ingeniería Té
Técnica en Informá
Informática de Sistemas
Anidació
Anidación de Consultas 65
11
Consultas Complejas Relaciones Derivadas
Cuando las consultas crecen en complejidad llega un Obtener el saldo medio de las cuentas de aquellas
momento que resulta imposible escribir toda la sucursales donde dicho saldo medio sea superior a 1200€
consulta en un único bloque SQL (select-from-
where-group by-having)
select nombre_sucursal, saldo_medio
from (select nombre_sucursal, avg(saldo)
from cuenta
Relaciones derivadas
group by nombre_sucursal)
Cláusula with as resultado(nombre_sucursal, saldo_medio)
where saldo_medio>1200
with
Obtener el saldo medio de las cuentas de aquellas
sucursales donde dicho saldo medio sea superior a 1200€ Modificación
with resultado(nombre_sucursal, saldo_medio) as de la Base
de Datos
select nombre_sucursal, avg(saldo)
from cuenta
group by nombre_sucursal
select nombre_sucursal, saldo_medio
from resultado
where saldo_medio>1200 SQL
Bases de Datos
Ingenierí
Ingeniería Té
Técnica en Informá
Informática de Sistemas
Consultas Complejas 69
Modificar Borrado
Las cláusulas de modificación del SQL permiten El borrado tiene una expresión similar a las consultas
añadir, eliminar o cambiar información
Sólo se pueden borrar tuplas completas
delete from r
where P
Modificació
Modificación de la Base de Datos 71 Modificació
Modificación de la Base de Datos 72
12
Borrar Tuplas Insercció
Insercción
Borrar todos los préstamos en los que la cantidad La inserción se realiza especificando la tupla a insertar o
esté comprendida entre 1300€ y 1500€ mediante una expresión similar a las consultas que
genere las tuplas a insertar
Modificació
Modificación de la Base de Datos 73 Modificació
Modificación de la Base de Datos 74
Modificació
Modificación de la Base de Datos 75 Modificació
Modificación de la Base de Datos 76
Insercció
Insercción Infinita Actualizaciones
Error muy común Æ produce un número infinito En muchos casos es interesante cambiar el valor
de tuplas Æ caída del servidor de Bases de Datos de un atributo dentro de una tupla, sin cambiar
todos los valores
inser into r
select *
from r
update r
set (…)
Modificació
Modificación de la Base de Datos 77 Modificació
Modificación de la Base de Datos 78
13
Actualizar Atributos Transacciones
Pagar un interés del 5% a todas las cuentas con un Una transacción consiste en una secuencia de
saldo superior a 1000€ instrucciones de consulta y modificación que deben
realizarse o todas o ninguna
Modificació
Modificación de la Base de Datos 79 Modificació
Modificación de la Base de Datos 80
Tipos de Reuniones
Además de proporcionar el mecanismo básico de producto
cartesiano, existen cláusulas especiales para controlar con
más precisión el tipo de reunión: interna, externa por
Reuniones 83 Reuniones 84
14
natural inner join Tipos y Condiciones
La reunión natural se indica mediante la cláusula Cada variante de las operaciones de reunión
natural inner join está formado por un tipo de reunión y una condición
de reunión
prestamo natural inner join prestatario
Reuniones 85 Reuniones 86
Reunió
Reunión
Listar todos los clientes que poseen una cuenta pero
Vistas y
no tienen un préstamo en el banco
select imp_NC
from (impositor left outer join prestatario
on impositor.nombre_cliente=
Valores Nulos
prestatario.nombre_cliente)
as db1(imp_NC, numero_cuenta,
pres_NC, numero_prestamo)
where pres_NC is null SQL
Bases de Datos
Ingenierí
Ingeniería Té
Técnica en Informá
Informática de Sistemas
Reuniones 87
15