Notación del CRT Definición Formal del CRT Definición Formal del

Anuncio
Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación
Elementos de Bases de Datos – 2do. Cuatrimestre de 2004
Cálculo Relacional de Tuplas (CRT)
Elementos de
Bases de Datos
Una expresión del álgebra relacional es una
secuencia de procedimientos que genera
respuestas a consultas. Respeta la definición de
lenguajes de consulta procedurales.
Dpto.Ciencias e Ingeniería de la Computación
Universidad Nacional del Sur
El cálculo relacional de tuplas es un lenguaje de
consulta declarativo / no procedural.
Lic. María Mercedes Vitturini
[[email protected]]
Clase 7
1er. Cuatrimestre de 2004
Elementos de Bases de Datos
Clase 7
2
Notación del CRT
CRT
Las consultas en CRT se expresan de manera
declarativa, sin expresar el procedimiento
efectivo para obtener la información.
t[A]: denota el valor de la tupla t en el atributo A.
t ∈ r: denota que la tupla t está en relación de
pertenencia con la relación r.
Formato general de una consulta:
{ t : P(t) }
Se lee: “es el conjunto de tuplas t que
satisfacen el predicado P”. Esto es, el
resultado es un conjunto de tuplas t que
satisfacen el predicado P.
∀: cuantificador universal “para todo”.
∃: cuantificador existencial “existe”.
∧: conjunción lógica “y”.
∨: disyunción lógica “o”.
¬: negación lógica “no”.
⇒: implicación o entonces.
Elementos de Bases de Datos
Clase 7
Definición Formal del CRT
Cada variable que se usa en una fórmula puede
estar libre o ligada.
Una variable está ligada cuando está cuantificada
universalmente (∀) o existencialmente (∃).
Ejemplo:
{t : ∃s ∈Clientes (s[localidad]=“Bahia Blanca” ∧ t=s)}
En el ejemplo t es una variable libre y s está ligada.
Elementos de Bases de Datos
Clase 7
4
Definición Formal del CRT
Dada una expresión en el CRT de la forma {t : P(t)}
P es una fórmula que puede contener variables.
„
Elementos de Bases de Datos
Clase 7
3
Una fórmula del cálculo relacional de tuplas está
compuesta de átomos. Un átomo puede ser de la
forma:
„
„
„
5
s ∈ r donde s es una variable tupla y r una relación.
s[X] θ u[Y] donde s y u son variables de tupla, X un
atributo definido en s, Y un atributo definido en u, y θ
un operador relacional en el conjunto {<, ≤, >, ≥, =,
≠}.
s[X] θ c donde s es una variable tupla, θ un operador
relacional y c una constante en el dominio del atributo
X.
Elementos de Bases de Datos
Clase 7
6
1
Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación
Elementos de Bases de Datos – 2do. Cuatrimestre de 2004
Definición Formal del CRT
Significado de expresiones
Las fórmulas se construyen usando las reglas:
„
Un átomo es una fórmula.
„
Si P es una fórmula entonces lo son ¬P y (P).
„
„
∃t ∈ r (Q(t)) significa que “existe una tupla t en la
relación r tal que el predicado Q(t) es verdadero”.
Si P1 y P2 son fórmulas entonces lo son P1 ∧ P2, P1 ∨
P2 y P1 ⇒ P2.
Si P(s) es una fórmula con variable libre s, y r es
una relación, entonces son fórmulas:
∀t ∈ r (Q(t)) significa que “Q es verdadera para
todas las tuplas t pertenecientes a r”.
P1 ∧ P2 es equivalente a ¬(¬P1 ∨ ¬P2).
P1 ⇒ P2 es equivalente a ¬P1 ∨ P2.
∀t ∈ r (Q(t)) es equivalente a ¬(∃t ∈ r (¬Q(t))).
Š ∃s ∈ r (P(s)) y
Š ∀s ∈ r (P(s)).
Elementos de Bases de Datos
Clase 7
7
Elementos de Bases de Datos
Clase 7
8
Diagrama E-R para un Banco
Nro-Cuenta
Saldo
Ciu-Sucur
Nom-Sucur
Dom-Sucur
Cuentas
Sucursales
Cta-Suc
Deposita
Esquema Relacional
Relaciones del Modelo E/R anterior:
Cuentas (Nro_Cuenta, Nom_Sucur, Saldo).
Clientes (Nom_Cliente, Dir_Cliente,
Ciu_Cliente).
Suc-Pre
Préstamos (Nro_Prest, Nom_Sucur, Monto).
Clientes
Nom-Cliente
Ciu-Cliente
Ciu-Cliente
Sucursales (Nom_Sucur, Dir_Sucur, Ciu_Sucur).
Préstamos
Presta
Nro-Prest
Deposita (Nom_Cliente, Nro_Cuenta).
Presta (Nom_Cliente, Nro_Prest).
Monto
Elementos de Bases de Datos
Clase 7
9
10
Ejemplos de consultas
Ejemplos de consultas
Encontrar los números de préstamos de monto mayor
a $1200.
{ t : ∃s ∈ Préstamos (s[Monto] > 1200)
∧ t [Nro-Prest]=s [Nro-Prest]}
Esto se lee como "el conjunto de todas las tuplas t tales que
existe una tupla s en la relación Préstamos para las cuales
coinciden los valores del atributo Nro-Prest y el valor del atributo
Monto es mayor que 1200".
La variable tupla t se define solamente sobre el atributo NroPrest, puesto que es el único atributo que se pide como
resultado.
Elementos de Bases de Datos
Clase 7
Elementos de Bases de Datos
Clase 7
11
Encontrar los nombres de los clientes que tienen un
préstamo de la sucursal Universitario:
{ t : ∃s ∈ Presta (t[Nom-Cliente]=s[Nom-Cliente]
∧ ∃u ∈ Préstamos (u[Nro-Prest]=s[Nro-Prest]
∧ u[Nom-Sucur]="Universitario")) }
Esto se lee como "el conjunto de todas las tuplas (con atributo
Nom-Cliente) para las cuales el Cliente tiene un préstamo en la
sucursal Universitario".
La variable tupla u asegura que el cliente tiene un préstamo en
la sucursal Universitario.
Elementos de Bases de Datos
Clase 7
12
2
Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación
Elementos de Bases de Datos – 2do. Cuatrimestre de 2004
Ejemplos de consultas
Ejemplos de consultas
Encontrar todos los clientes que tienen un préstamo,
una cuenta, o ambos en un banco:
{ t : ∃s ∈ Presta(t[Nom-Cliente]=s[Nom-Cliente]) ∨
∃u ∈ Deposita(t[Nom-Cliente]=u[Nom-Cliente]) }
Esto es, el conjunto de todas las tuplas (con atributo
Nom-Cliente) para las cuales vale una de las siguientes
condiciones:
„ Nom-Cliente aparece en alguna tupla de la relación Presta
como prestatario del banco.
„
Nom-Cliente aparece en alguna tupla de la relación Deposita
Encontrar todos los clientes que tienen un
préstamo y una cuenta en un banco:
{ t : ∃s ∈ Presta(t[Nom-Cliente]=s[Nom-Cliente]) ∧
∃u ∈ Deposita(t[Nom-Cliente]=u[Nom-Cliente]) }
Encontrar todos los clientes que tienen un
préstamo pero no una cuenta en un banco:
{ t : ∃s ∈ Presta(t[Nom-Cliente]=s[Nom-Cliente]) ∧
¬(∃u ∈ Deposita(t[Nom-Cliente]=u[Nom-Cliente])) }
como depositante del banco.
Elementos de Bases de Datos
Clase 7
Elementos de Bases de Datos
Clase 7
13
Ejemplos de consultas
Seguridad de las Expresiones
Encontrar todos los clientes que tienen una cuenta en
todas las sucursales situadas en Tres Arroyos:
{t : ∀u ∈ Sucursales (u [Ciu-Sucur]="Tres Arroyos" ⇒
∃s ∈ Deposita(t [Nom-Cliente]=s [Nom-Cliente] ∧
∃w ∈ Cuentas(w [Nro-Cuenta]=s [Nro-Cuenta]
∧ w [Nom-Sucur] =u [Nom-Sucur]))) }
Supongamos que deseamos escribir una consulta del
tipo { t : ¬( t ∈ Préstamo) }.
Existen infinitas tuplas que no pertenecen a Préstamo,
por lo que no se desean estos tipos de expresiones.
El dominio de una fórmula P en el CRT es el conjunto
de todos los valores que aparecen explícitamente en P.
„
Esto es, el conjunto de todos los clientes (con atributo NomCliente) tales que, para todas las tuplas en la relación Sucursales
cuyo atributo Ciu-Sucur es Tres Arroyos, cada Cliente tiene una
cuenta en la Sucursal cuyo nombre aparece en el atributo NomSucur de u.
Elementos de Bases de Datos
Clase 7
15
Seguridad de las Expresiones
Una expresión {t : P(t)} es segura si todos los valores
que aparecen en el resultado son valores de dom(P).
La expresión { t : ¬( t ∈Préstamo) } no es segura.
Sabemos que dom(¬( t ∈Préstamo)) es el conjunto de
valores que aparecen en Préstamo.
Sin embargo, es posible tener una tupla t que no esté
en Préstamo que contenga valores que no aparecen
en Préstamo.
El resto de las expresiones que presentamos hasta
ahora eran seguras.
Elementos de Bases de Datos
Clase 7
14
17
„
dom(t ∈ Préstamo ∧ t[Monto] > 1200) es el conjunto de
valores que aparecen en Préstamo (sin restringirnos al valor
1200).
dom(¬(t ∈ Préstamo)) es el conjunto de valores que aparecen
en Préstamo.
Elementos de Bases de Datos
Clase 7
16
Ejercicios propuestos
Encontrar los saldos de las cuentas de Pablo García.
Encontrar todos los clientes con dos o más cuentas.
Encontrar todos los clientes con más de una cuenta
en las sucursales Almafuerte y Universitario.
Encontrar todos los clientes que tienen préstamos
en dos sucursales distintas.
Encontrar todas las sucursales que comparten
clientes con otras sucursales.
Elementos de Bases de Datos
Clase 7
18
3
Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación
Elementos de Bases de Datos – 2do. Cuatrimestre de 2004
STRUCTURED QUERY LANGUAGE - SQL
STRUCTURED QUERY LANGUAGE – SQL
Es el lenguaje comercial de mayor influencia.
Combina el AR y CRT.
Incluye capacidades para:
Lenguaje de Consulta Comercial
Apunte sobre SQL standard
„
„
„
„
Definir consultas sobre los datos.
Modificar el contenido de los datos.
Definir la estructura de datos,
Especificar ligaduras de integridad.
DML
DDL
Elementos de Bases de Datos
Clase 7
Capacidades del Lenguaje
Ejemplo Sistema Obra Social
DDL - Lenguaje de definición de datos.
„
„
„
Se desea diseñar un sistema de Base de Datos para
un Obra Social.
La obra social trabaja con médicos, afiliados
asociados y prácticas reconocidas (por ejemplo:
análisis de distintos tipos, extracción de dentición,
operaciones, etc.).
Interesa mantener información de las atenciones de
sus afiliados, constatando el médico que las realizó.
En caso que el médico lo indique, se quiere mantener
información de las prácticas indicadas.
Definición de relaciones y vistas.
Instrucciones para autorización.
Definición de reglas de integridad.
DML - Lenguaje interactivo de manipulación
de datos. DML se incorpora a lenguajes de
propósito general.
„
„
Consultar datos almacenados.
Modificar el contenido de los datos almacenados.
Elementos de Bases de Datos
Clase 7
21
Modelo Entidad Relación
Precio_Real
atenciones
22
PRACTICAS (pr_numero, pr_nombre,
pr_valor_est).
MEDICOS (me_numero, me_apellido,
me_nombre, me_especialidad).
PACIENTES (pa_numero, pa_nombre,
pa_apellido, pa_fechanac).
ATENCIONES (at_numero,pa_numero,
me_numero, at_fecha).
PRACTICAS_REALIZADAS (at_numero,
pr_numero, re_precio_real).
PACIENTES
pr_realizadas
PRACTICAS
Elementos de Bases de Datos
Clase 7
Elementos de Bases de Datos
Clase 7
Modelo Relacional
fecha
MEDICOS
20
23
Elementos de Bases de Datos
Clase 7
24
4
Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación
Elementos de Bases de Datos – 2do. Cuatrimestre de 2004
Medicos
me_nro me_apellido me_nombre
m1
Carpio
Juan José
m2
Benitez
Ana Belén
m3
Rossi
Ramiro
m4
Sardi
Juan Martín
m5
Zunni
Cecilia
m6
Marino
Tomás
m7
Dellia
Francisco
ER Actualizado
número
MEDICOS
Precio_Real
fecha
PACIENTES
atenciones
pr_realizadas
Ejemplo
Instancias
me_especial
Traumatólogo
Dentista
Dentista
Pediatra
Pediatra
Traumatólogo Pacientes
par_nro pa_apellido pa_nombre pa_fechanac
Traumatólogo
Atenciones
at_nro pa_numero me_número
at1
p1
m1
at2
p1
m2
at3
p1
m1
at4
p2
m3
at5
p3
m4
at6
p3
m2
at7
p4
m4
PRACTICAS
Elementos de Bases de Datos
Clase 7
25
p1
p2
p3
p4
p5
p6
Ruiz
Molino
Ferro
Gadio
Ruiz
Escala
Agustina
Mariano
Federico
Luciana
Verónica
Clara
02/10/89
15/08/70
19/01/01
25/04/94
06/11/45
18/06/60
at_fecha
10/04/02
10/05/02
25/05/02
03/03/02
10/04/02
26/07/02
30/06/02
Elementos de Bases de Datos
Clase 7
26
Estructura Básica
LENGUAJE DE MANIPULACIÓN
DE DATOS - DML
•Estas operaciones están disponibles a cualquier tipo de usuario que
este autorizado a modificar los datos.
•El programador de aplicación desarrolla en un lenguaje con
sentencias SQL embebidas.
•Un usuario más experto puede realizar sus propias consultas para
obtener los datos que desea.
La estructura básica consiste de tres
cláusulas: SELECT, FROM y WHERE.
SELECT, corresponde con la operación de
proyección del álgebra relacional.
FROM, corresponde con la operación
producto cartesiano del álgebra relacional.
WHERE, corresponde con el predicado de
selección del álgebra relacional.
Elementos de Bases de Datos
Clase 7
Consulta Simples
Selección: se usa
para obtener de una
tabla aquellas filas
que satisfacen una
dada condición
Estructura básica
28
Aplicación de la consulta
Medicos
me_nro me_apellido me_nombre
m1
Carpio
Juan José
m2
Benitez
Ana Belén
m3
Rossi
Ramiro
m4
Sardi
Juan Martín
m5
Zunni
Cecilia
m6
Marino
Tomás
m7
Dellia
Francisco
SELECT *
FROM medicos
WHERE
me_especialidad
=“Dentista”
me_nrome_apellidme_nombreme_especial
m2
Benitez Ana Belén
Dentista
m3
Rossi
Ramiro
Dentista
SELECT * FROM <relación>
[WHERE <condición sobre
las columnas>]
Elementos de Bases de Datos
Clase 7
me_especial
Traumatólogo
Dentista
Dentista
Pediatra
Pediatra
Traumatólogo
Traumatólogo
SELECT * FROM Medicos WHERE me_especialidad="Dentista"
29
Elementos de Bases de Datos
Clase 7
30
5
Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación
Elementos de Bases de Datos – 2do. Cuatrimestre de 2004
Aplicación de la consulta
Consulta Simples
Proyección: se usa
para obtener de una
tabla solo algunas
columnas
SELECT <lista de
columnas>
FROM <relación>
SELECT me_apellido,
me_especialidad
FROM medicos
Observación: en las
consultas SQL no se
eliminan las tuplas
duplicadas. Para eliminar
usar la palabra reservada
DISTINCT
Elementos de Bases de Datos
Clase 7
31
Selección + Proyección
me_apellid
Carpio
Benitez
Rossi
Sardi
Zunni
Marino
Dellia
me_especial
Traumatólogo
Dentista
Dentista
Pediatra
Pediatra
Traumatólogo
Traumatólogo
Medicos
me_nro me_apellido me_nombre
m1
Carpio
Juan José
m2
Benitez
Ana Belén
m3
Rossi
Ramiro
m4
Sardi
Juan Martín
m5
Zunni
Cecilia
m6
Marino
Tomás
m7
Dellia
Francisco
me_especial
Traumatólogo
Dentista
Dentista
Pediatra
Pediatra
Traumatólogo
Traumatólogo
SELECT me_apellido, me_especialidad
FROM Medicos
Elementos de Bases de Datos
Clase 7
32
Aplicación de la consulta
Medicos
me_nro me_apellido me_nombre
m1
Carpio
Juan José
m2
Benitez
Ana Belén
m3
Rossi
Ramiro
m4
Sardi
Juan Martín
m5
Zunni
Cecilia
m6
Marino
Tomás
m7
Dellia
Francisco
Ejemplo: para obtener sólo los datos
nombre y apellido de los médicos que
son dentistas
SELECT me_nombre, me_apellido
FROM medicos
WHERE me_especialidad=“dentista”
me_especial
Traumatólogo
Dentista
Dentista
Pediatra
Pediatra
Traumatólogo
Traumatólogo
me_apellido me_nombre
Benitez
Ana Belén
Rossi
Ramiro
SELECT me_nombre, me_apellido
FROM medicos
WHERE me_especialidad=“dentista”
Elementos de Bases de Datos
Clase 7
33
El operador selección en SQL
34
Ordenar la Salida
Se implementa a través de las expresiones
condicionales en el WHERE.
Las expresiones se arman con los operadores
de comparación >, <, =, <>, >=, <= y los
conectores AND, OR, NOT.
Los valores que se comparan pueden incluir
atributos de las relaciones mencionadas en el
FROM y/o constantes.
Pueden usarse operadores aritméticos
Elementos de Bases de Datos
Clase 7
Elementos de Bases de Datos
Clase 7
35
La cláusula ORDER BY <lista de atributos>
permite ordenar la salida.
En la lista de atributos puede aparecer
cualquier atributo de las relaciones que
aparecen en la cláusula FROM.
Por defecto la salida se ordena en forma
ascendente. Se puede indicar el orden con
las palabras reservadas DESC y ASC.
Elementos de Bases de Datos
Clase 7
36
6
Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación
Elementos de Bases de Datos – 2do. Cuatrimestre de 2004
Consultas sobre más de una
Relación
Para un resultado ordenado
Producto cartesiano: si después de la
palabra reservada FROM se enumera
más de una relación, SQL hace el
producto cartesiano entre ellas.
Ejemplo: obtener los datos apellido y
nombre de médicos traumatólogos
ordenados alfabéticamente
SELECT me_apellido, me_nombre
FROM medicos
WHERE me_especialidad=“traumatólogo”
ORDER BY me_apellido, me_nombre
Elementos de Bases de Datos
Clase 7
Atenciones
at_nro pa_numero me_número
at1
p1
m1
at2
p1
m2
at3
p1
m1
at4
p2
m3
at5
p3
m4
at6
p3
m2
at7
p4
m4
at_nro
m1
m1
m1
m1
m1
m1
m1
m2
m2
m2
m2
m2
m2
m2
…
m7
m7
m7
m7
m7
m7
m7
me_apellido me_nombre
Carpio
Juan José
Carpio
Juan José
Carpio
Juan José
Carpio
Juan José
Carpio
Juan José
Carpio
Juan José
Carpio
Juan José
Benitez
Ana Belén
Benitez
Ana Belén
Benitez
Ana Belén
Benitez
Ana Belén
Benitez
Ana Belén
Benitez
Ana Belén
Benitez
Ana Belén
…
…
Dellia
Francisco
Dellia
Francisco
Dellia
Francisco
Dellia
Francisco
Dellia
Francisco
Dellia
Francisco
Dellia
Francisco
Especialidad
Traumatólogo
Traumatólogo
Traumatólogo
Traumatólogo
Traumatólogo
Traumatólogo
Traumatólogo
Dentista
Dentista
Dentista
Dentista
Dentista
Dentista
Dentista
…
Traumatólogo
Traumatólogo
Traumatólogo
Traumatólogo
Traumatólogo
Traumatólogo
Traumatólogo
at_nro
at1
at2
at3
at4
at5
at6
at7
at1
at2
at3
at4
at5
at6
at7
…
at1
at2
at3
at4
at5
at6
at7
pa_numerome_número
p1
m1
p1
m2
p1
m1
p2
m3
p3
m4
p3
m2
p4
m4
p1
m1
p1
m2
p1
m1
p2
m3
p3
m4
p3
m2
p4
m4
…
…
p1
m1
p1
m2
p1
m1
p2
m3
p3
m4
p3
m2
p4
m4
Elementos de Bases de Datos
Clase 7
Elementos de Bases de Datos
Clase 7
me_especial
Traumatólogo
Dentista
Dentista
Pediatra
Pediatra
Traumatólogo
Traumatólogo
38
Join Natural
El join natural entre dos o más relaciones
no es una operación provista en SQL.
at_fecha
10/04/02
10/05/02
25/05/02
03/03/02
10/04/02
26/07/02
30/06/02
10/04/02
10/05/02
25/05/02
03/03/02
10/04/02
26/07/02
30/06/02
…
10/04/02
10/05/02
25/05/02
03/03/02
10/04/02
26/07/02
30/06/02
Para realizar una consulta con el operador
join natural, es necesario implementarlo
manualmente, esto es, imponiendo la/s
condición/es de igualdad sobre el/los
campos de join en la expresión de
condición del WHERE.
Elementos de Bases de Datos
Clase 7
39
Ejemplo
SELECT medicos.me_número, me_apellido,
me_especialidad, at_numero, at_fecha,
pacientes.pa_numero,
pa_apellido,pa_nombre,
pa_fechaNac
FROM pacientes, medicos, atenciones
WHERE pacientes.pa_numero=atenciones.pa_numero
AND
medicos.me_numero = atenciones.me_numero
Muestra datos más claros de leer que un listado de atenciones
Elementos de Bases de Datos
Clase 7
SELECT *
FROM medicos, atenciones
37
Medicos
me_nro me_apellid me_nombre
m1
Carpio
Juan José
m2
Benitez
Ana Belén
m3
Rossi
Ramiro
m4
Sardi
Juan Martín
m5
Zunni
Cecilia
m6
Marino
Tomás
m7
Dellia
Francisco
at_fecha
10/04/02
10/05/02
25/05/02
03/03/02
10/04/02
26/07/02
30/06/02
Este tipo de consulta sin imponer
condiciones en el WHERE generalmente
da resultados sin significado semántico
41
Medicos
me_nro me_apellido me_nombre
m1
Carpio
Juan José
m2
Benitez
Ana Belén
m3
Rossi
Ramiro
m4
Sardi
Juan Martín
m5
Zunni
Cecilia
m6
Marino
Tomás
m7
Dellia
Francisco
me_nro
m1
m2
m1
m3
m4
m2
m4
Atenciones
at_nro pa_numero me_número
at1
p1
m1
at2
p1
m2
at3
p1
m1
at4
p2
m3
at5
p3
m4
at6
p3
m2
at7
p4
m4
me_especial
Traumatólogo
Dentista
Dentista
Pediatra
Pediatra
Traumatólogo
Traumatólogo
me_apellido me_nombre
me_especial
at_nro
at_fecha
Carpio
Benitez
Carpio
Rossi
Sardi
Benitez
Sardi
Traumatólogo
Dentista
Traumatólogo
Dentista
Pediatra
Dentista
Pediatra
at1
at2
at3
at4
at5
at6
at7
10/04/02
10/05/02
25/05/02
03/03/02
10/04/02
26/07/02
30/06/02
Juan José
Ana Belén
Juan José
Ramiro
Juan Martín
Ana Belén
Juan Martín
pa_nro
p1
p1
p1
p2
p3
p3
p4
pa_apellido
Ruiz
Ruiz
Ruiz
Molino
Ferro
Ferro
Gadio
40
Pacientes
pa_nro pa_apellido
pa_nombrepa_fechana
p1
Ruiz
Agustina
02/10/89
p2
Molino
Mariano
15/08/70
p3
Ferro
Federico
19/01/01
p4
Gadio
Luciana
25/04/94
p5
Ruiz
Verónica
06/11/45
p6
Escala
Clara
18/06/60
at_fecha
10/04/02
10/05/02
25/05/02
03/03/02
10/04/02
26/07/02
30/06/02
pa_nombre
Agustina
Agustina
Agustina
Mariano
Federico
Federico
Luciana
pa_fechana
02/10/89
02/10/89
02/10/89
15/08/70
19/01/01
19/01/01
25/04/94
SELECT medicos.me_número, me_apellido, me_especialidad, at_numero,
at_fecha, pacientes.pa_numero, pa_apellido, pa_nombre, pa_fechaNac
FROM pacientes, medicos, atenciones
WHERE pacientes.pa_numero=atenciones.pa_numero AND
medicos.me_numero=atenciones.me_numero
Elementos de Bases de Datos
Clase 7
42
7
Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación
Elementos de Bases de Datos – 2do. Cuatrimestre de 2004
Cómo se resuelven las consultas
en SQL?
El operador renombrar
Cada vez que en la cláusula FROM de una
instrucción SELECT se menciona a más de
una relación, para resolver la consulta, se
realiza el producto cartesiano de todas las
relaciones involucradas y a continuación se
filtran aquellas que cumplen con la condición
del WHERE.
El join es una operación muy costosa en
tiempo.
Elementos de Bases de Datos
Clase 7
43
Ejemplo
SQL proporciona un mecanismo para
renombrar columnas (atributos) y/o
relaciones.
Para renombrar se usa la palabra reservada
AS.
La cláusula AS puede aparecer
„
„
Siguiendo a los atributos que aparecen en el
SELECT, para renombrar atributos.
Siguiendo a las relaciones del FROM, para
renombrar relaciones.
Elementos de Bases de Datos
Clase 7
44
En el ejemplo
SELECT DISTINCT T1.pa_numero AS Nro_Pac,
T1.at_fecha AS Fecha
FROM atenciones AS T1, atenciones AS T2
WHERE T1. pa_numero=T2.pa_numero AND
T1.at_número<>T2.at_número
ORDER BY t1.pa_numero, t1_at_fecha
Atenciones
Número pa_numero me_número
at1
p1
m1
at2
p1
m2
at3
p1
m1
at4
p2
m3
at5
p3
m4
at6
p3
m2
at7
p4
m4
SELECT DISTINCT T1.pa_numero AS Nro_Pac, T1.at_fecha
AS Fecha
T1 y T2 actúan como variables de tuplas del CRT.
La forma de resolver esta consulta es hacer el
producto cartesiano y dejar solo las tuplas que
cumplen las condiciones del WHERE.
Se uso de DISTINCT para no repetir tuplas.
Elementos de Bases de Datos
Clase 7
FROM atenciones AS T1, atenciones AS T2
WHERE T1. pa_numero=T2.pa_numero AND
T1.at_número<>T2.at_número
ORDER BY t1.pa_numero, t1_at_fecha
45
Nro_Pac
p1
p1
p1
p3
p3
Fecha
4/10/2002
5/10/2002
5/25/2002
4/10/2002
7/26/2002
Elementos de Bases de Datos
Clase 7
46
Condiciones sobre relaciones
Operaciones sobre conjuntos
Las cláusulas UNION, UNION ALL,
INTERSECT, INTERSECT ALL, EXCEPT, EXCEPT
ALL permiten vincular dos consultas del
con la misma estructura.
(SELECT pa_numero FROM atenciones WHERE
at_fecha=“10/04/2002”)
UNION
(SELECT pa_numero FROM atenciones WHERE
at_fecha=“10/05/2002”)
Elementos de Bases de Datos
Clase 7
at_fecha
4/10/2002
5/10/2002
5/25/2002
3/3/2002
4/10/2002
7/26/2002
6/30/2002
47
s IN R es verdadero si el atributo s está en el
conjunto R.
s NOT IN R es verdadero si el atributo s no está
en el conjunto R.
s > ALL R es verdadero si el atributo s es mayor
que todos los elementos de R.
s > ANY R es verdadero si el atributo s es mayor
que alguno de los elementos de R.
En todos los casos anteriores, R puede ser el
resultado de una subconsulta anidada “SELECT ..
FROM .. WHERE ..”
Elementos de Bases de Datos
Clase 7
48
8
Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación
Elementos de Bases de Datos – 2do. Cuatrimestre de 2004
Pacientes
pa_nro pa_apellido
p1
Ruiz
p2
Molino
p3
Ferro
p4
Gadio
p5
Ruiz
p6
Escala
Ejemplos
SELECT p.pa_apellido, p.pa_nombre
FROM pacientes AS p
WHERE p.pa_numero IN
(SELECT a.pa_numero
FROM atenciones AS a)
pa_apellido
Ruiz
Molino
Ferro
Gadio
Da por resultado el apellido y nombres de pacientes que
recibieron al menos una atención.
Elementos de Bases de Datos
Clase 7
pa_nombre pa_fechanac
Agustina
02/10/89
Mariano
15/08/70
Federico
19/01/01
Luciana
25/04/94
Verónica
06/11/45
Clara
18/06/60
49
Observaciones
Atenciones
at_nro pa_numero me_número
at1
p1
m1
at2
p1
m2
at3
p1
m1
at4
p2
m3
at5
p3
m4
at6
p3
m2
at7
p4
m4
at_fecha
10/04/02
10/05/02
25/05/02
03/03/02
10/04/02
26/07/02
30/06/02
pa_nombre
Agustina
Mariano
Federico
Luciana
SELECT p.pa_apellido, p.pa_nombre
FROM pacientes AS p
WHERE p.pa_numero IN
(SELECT a.pa_numero
FROM atenciones AS a)
Elementos de Bases de Datos
Clase 7
50
Funciones Agregadas
Las mismos resultados pueden se pueden
obterner con distintas consultas.
Las consultas anidadas son más eficientes en
tiempo que las consultas que tienen muchas
relaciones siguiendo a la cláusula FROM.
Son funciones que toman un conjunto
de valores de entrada y producen un
único valor de salida.
Las sentencias SELECT se pueden anidar en
dos o más niveles.
Elementos de Bases de Datos
Clase 7
51
Funciones Agregadas
Elementos de Bases de Datos
Clase 7
52
Ejemplos simples
AVG (atributo) o promedio. Se aplica sobre
columnas numéricas. No cuenta los valores nulos.
SELECT AVG(pr_valor_est) FROM practicas.
COUNT (atributo) retorna el número de valores no
nulos.
SELECT MAX(re_precio_real) FROM
practicas_realizadas.
MAX (atributo) retorna el valor máximo.
SELECT COUNT(at_numero) FROM atenciones.
MIN (atributo) retorna el valor mínimo.
SELECT COUNT(DISTINCT pa_numero) FROM
atenciones.
SUM (atributo) retorna la suma.
Se pueden combinar con DISTINCT u ALL (por defecto)
Elementos de Bases de Datos
Clase 7
53
Elementos de Bases de Datos
Clase 7
54
9
Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación
Elementos de Bases de Datos – 2do. Cuatrimestre de 2004
Agrupación
Agrupación: GROUP BY
Existen situaciones donde sería
deseable aplicar la funciones agregadas
a grupos de conjuntos de tuplas.
SELECT pr_numero, SUM (re_precio_real)
FROM practicas_realizadas
GROUP BY pr_numero
En estas situaciones de usa la cláusula
GROUP BY.
El resultado de la consulta es para cada número de
práctica y la suma total de lo pagado por esa práctica.
Elementos de Bases de Datos
Clase 7
Cuando se usa la palabra reservada GROUP BY,
siguiendo al SELECT sólo se admiten a los atributos del
GROUP BY o funciones agregadas.
Elementos de Bases de Datos
Clase 7
55
En el ejemplo
56
Cláusula HAVING
Practicas_Realizadas
at_numero pr_numero re_precio_real
at3
pr1
$ 20
at7
pr1
$ 25
at1
pr2
$ 100
at2
pr2
$ 90
at1
pr4
$ 25
at6
pr4
$ 30
at3
pr5
$ 10
SELECT pr_numero, SUM (re_precio_real)
FROM practicas_realizadas
GROUP BY pr_numero
pr_numero
pr1
pr2
pr4
pr5
Elementos de Bases de Datos
Clase 7
SUM
$ 45
$ 190
$ 55
$ 10
SELECT pr.pr_numero, pr_nombre,
SUM(re_precio_real)
FROM practicas_realizadas re , practicas pr
WHERE re.pr_numero=pr.pr_numero
GROUP BY pr_numero, pr_nombre
HAVING SUM(re_precio_real) > 10.00$
Se utiliza para imponer condiciones sobre columnas
con agregados
Elementos de Bases de Datos
Clase 7
57
En el ejemplo
58
RESUMEN
Practicas_Realizadas
at_numero pr_numero re_precio_real
at1
pr2
$ 100
at1
pr4
$ 25
at2
pr2
$ 90
at3
pr1
$ 20
at3
pr5
$ 10
at6
pr4
$ 30
at7
pr1
$ 25
SELECT <lista de atributos y agregados>
FROM <lista de relaciones>
WHERE <condición sobre los atributos de las
pr_numero
pr_nombre
pr1
Fondo de Ojo
pr2
Aplicaciones XX
pr4
Radiografia de Rodilla
SELECT pr.pr_numero, pr_nombre,
SUM(re_precio_real)
FROM practicas_realizadas re , practicas pr
WHERE re.pr_numero=pr.pr_numero
GROUP BY pr_numero, pr_nombre
HAVING SUM(re_precio_real) > 10.00$
Elementos de Bases de Datos
Clase 7
SUM
$ 45
$ 190
$ 55
59
relaciones>
GROUP BY <lista de atributos>
HAVING <condiciones sobre los agregados>
ORDER BY <lista de atributos>
Elementos de Bases de Datos
Clase 7
60
10
Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación
Elementos de Bases de Datos – 2do. Cuatrimestre de 2004
Agregar filas
Actualizando el contenido de
la Base de Datos
Agregar una fila a
una tabla:
INSERT INTO tab_name
(<column_name>,)
VALUES (<valor>,):
Las siguientes instrucciones también son parte del
DML y sirven para actualizar (agregar, borrar o
modificar) el contenido de las relaciones.
Agregar una fila
INSERT INTO pacientes
(pa_numero,pa_apellido,
pa_fechanac) VALUES
(15, “Polo”,
25/03/1992)
INSERT INTO pacientes
VALUES (16, “Polo”,“José”,
25/03/1992)
Elementos de Bases de Datos
Clase 7
Observaciones sobre INSERT
Borrar Filas de una tabla
Existen dos maneras básicas de insertar.
„
„
Borrar una o mas
filas de una tabla:
Insertar la fila completa
Insertar sólo algunas columnas de una fila
En el segundo caso se debe necesariamente
especificar los nombres de las columnas que
se van a completar.
La operación se INSERT será rechazada
cuando los atributos que se inserten no
cumplan con las restricciones preexistentes.
Elementos de Bases de Datos
Clase 7
63
La operación DELETE sin cláusula de
condición borra todas las filas de una tabla,
no su esquema de relación.
La operación de DELETE será exitosa siempre
y cuando no se violen las restricciones
preexistentes.
Ejemplo: no será posible borrar una tupla de
médicos, si dicho médico participa en alguna tupla
de atenciones porque se estaría violandola
resctricción de clave foránea de la relación
atenciones.
Elementos de Bases de Datos
Clase 7
DELETE FROM tab_name
[WHERE condición];
Borrar una/s fila/s
DELETE FROM pacientes
DELETE FROM medicos
WHERE me_especialidad
=“Pediatra”
DELETE FROM practicas
WHERE pr_numero=p4
Elementos de Bases de Datos
Clase 7
64
DML – Actualizar filas de una
tabla
Observaciones sobre DELETE
„
62
65
Actualizar los datos
de una o más filas
de una tabla:
UPDATE tab_name SET
<nueva asignación de
valores> [WHERE
condición];
Actualizar una/s fila/s
UPDATE practicas
SET pr_valor_est =
pr_valor_est - 10
UPDATE paciente
SET pa_apellido =
“Preda” WHERE
pa_numero = p4
Elementos de Bases de Datos
Clase 7
66
11
Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación
Elementos de Bases de Datos – 2do. Cuatrimestre de 2004
Observaciones sobre UPDATE
Resumen
Al igual que en el caso de INSERT y
DELETE esta operación solo será
exitosa si como resultado de la
modificación se siguen respetando
todas las restricciones preexistenes.
Elementos de Bases de Datos
Clase 7
DML sobre el contenido de las tablas:
„
„
„
67
Agregar una o mas filas INSERT INTO
Borrar una o mas filas DELETE FROM
Actualizar el contenido de una o mas filas
UPDATE ... SET
Elementos de Bases de Datos
Clase 7
68
Instrucciones del LDD
Lenguaje de Definición de
Datos
Para la definición de esquemas:
CREATE TABLE tab_nombre (
atrib1 TIPO [restricción1],
atrib2 TIPO [restricción2],
....
<restriccion_integridad1>,
....
<restriccion_integridadn>);
Estas operaciones sólo está autorizado a realizarla el DBA
o administrador de la base de datos
Elementos de Bases de Datos
Clase 7
Creación de Esquemas
70
Instrucción ALTER TABLE
Definir el esquema de la tabla (atributos y sus
tipos).
Permite modificar definiciones del esquema de una
tabla.
Definir, si existen, restricciones sobre los
atributos.
En líneas generales la definición de las tablas debe
ser estática, una vez creado todo el esquema para la
base de datos se espera no tener que modificarlo.
„
Condición de no nulo, restricciónes de valores,
subconjunto válido, etc.
ALTER TABLE <nombre_tabla>
DROP columna1
MODIFY columna2 <modificación>,
ADD column3 INTEGER,
ADD/DROP CONSTRAINT restricción1 ...
Definir restricciones a nivel de tabla
„
Clave primaria, clave foránea, índices,
restricciones entre columnas.
Elementos de Bases de Datos
Clase 7
71
Elementos de Bases de Datos
Clase 7
72
12
Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación
Elementos de Bases de Datos – 2do. Cuatrimestre de 2004
Borrado de Esquemas
Temas de la Clase de Hoy
Lenguaje de Consulta Relacional Formal
La instrucción DROP TABLE permite
borrar el contenido y el esquema de
una tabla.
Para poder borrar una tabla la misma
no debe estar referenciada.
„
Calculo Relacional de Tuplas (CRT)
Š Estructura general.
Š Átomos y Fórmulas.
Š Fórmulas Seguras.
Lenguajes Consulta Relacional Comercial
„
SQL
Š Instrucción SELECT/FROM/WHERE.
Š Instrucciones de actualización de contenido.
Š Instrucciones de DLL.
Elementos de Bases de Datos
Clase 7
73
Elementos de Bases de Datos
Clase 7
74
Bibliografía
Bibliografía
„
„
“Fundamentos de Bases de Datos” – A.
Silberschatz. Capítulo 4.
“Database and Knowledge Base System” –
J. Ullman. Capítulo 4.
Elementos de Bases de Datos
Clase 7
75
13
Descargar