Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1...

85
Manejadores de bases de datos Lenguaje SQL n Lenguaje de definición de datos (DDL) n Consultas: estructura básica n Operaciones de conjuntos n Funciones agregadas n Valores nulos n Subconsultas anidadas n Relaciones derivadas n Vistas n Modificaciones de Bases de Datos n Relaciones unidas (joined ) n SQL embebido, ODBC y JDBC

Transcript of Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1...

Page 1: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Manejadores de bases de datos

Lenguaje SQL

n Lenguaje de definición de datos (DDL)n Consultas: estructura básican Operaciones de conjuntosn Funciones agregadasn Valores nulosn Subconsultas anidadasn Relaciones derivadasn Vistasn Modificaciones de Bases de Datosn Relaciones unidas (joined)n SQL embebido, ODBC y JDBC

Page 2: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Manejadores de Bases de datos

EsquemaEsquema utilizadoutilizado en en loslos ejemplosejemplos

sucursal

ciudad-sucursal

activos

nombre-sucursal

cuenta

nombre-sucursal

saldo

numero-cuenta

prestamo

nombre-sucursal

cantidad

numero-prestamo

cliente

calle-cliente

ciudad-cliente

nombre-clientedepositante

nombre-cliente

numero-cuenta

prestatario

nombre-cliente

numero-prestamo

Page 3: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Manejadores de Bases de datos

LenguajeLenguaje de de definicidefinicióónn de de datosdatos (DDL)(DDL)

n El esquema de cada relación.n El dominio de los datos asociados a cada atributo.n Restricciones de integridad.n El conjunto de índices que se debe mantener para

cada relación.n Información de seguridad y autorización para cada

relación.n La estructura de almacenamiento físico de cada

relación en disco.

Permite la especificación de un conjunto de relaciones y además de información sobre cada una de las relaciones, incluyendo:

Page 4: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Manejadores de Bases 4

TiposTipos de de dominiodominio en SQLen SQLn char(n). Cadena de caracteres de longitud fija n indicada por el usuario.n varchar(n). Cadena de caracteres de longitud variable, con una longitud

máxima n indicada por el usuario.n int. Entero (un subconjunto finito de enteros dependiente de la máquina).n smallint. Entero corto (un subconjunto del dominio entero cuyo tamaño es

dependiente de la máquina).n numeric(p,d). Número en formato de punto fijo, con una precisión

indicada por el usuario de p digitos, con n digitos a la derecha del puntodecimal.

n real, double precision. Numeros en formato de punto flotante y puntoflotante de doble precisión, con precisión dependiente de la máquina.

n float(n). Númeor en punto flotante, conuna precisión indicada por el usuario de al menos n digitos.

n En todos los tipos de dominios se permiten valores nulos. Si un atributosedeclara not null, se prohiben los valores nulos para ese atributo.

n La construcción create domain de SQL-92 permite crear dominiosdefinidos por el usuario:

create domain nombre-persona char(20) not null

Page 5: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Manejadores de Bases de datos 5

TiposTipos de de Fecha/HoraFecha/Hora en SQL (Cont.)en SQL (Cont.)

n date. Fechas, conteniendo un año (4 dígitos) , mes y día.H P.e. date ‘2007-6-1’

n time. Horas, minutos y segundos.H P.e. time ’09:00:30’ time ’09:00:30.75’

n timestamp: Fecha y hora.H P.e. timestamp ‘2007-6-1 09:00:30.75’

n Interval: periodo de tiempoH P.e. Interval ‘1’ día

H Restar un valor date/time/timestamp de otro nos da un valor de tipo intervalo

H Valores de tipo intervalo se pueden sumar a valores date/time/timestamp

n Podemos extraer valores de campos de date/time/timestampH P.e. extract (year from r.fechainicio)

n Podemos transformar tipos cadena de caracteres a date/time/timestamp H P.e. cast <expresion-tipo-string> as date

Page 6: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Manejadores de Bases 6

ComandoComando Create TableCreate Table

n Una relación SQL se define mediante el comandocreate table:

create table r (A1 D1 RI1, A2 D2 RI2, ..., An Dn RIn,(restriccion-integridad1),...,(restriccion-integridadk))

H r es el nombre de la relación

H cada Ai es un nombre de atributo en el esquema de la relación r

H Di es el tipo de datos de los valores del dominio del atributo Ai

n Ejemplo:

create table sucursal(nombre-sucursal char(15) not null,ciudad-sucursal char(30),activos integer)

Page 7: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Manejadores de Bases 7

RestriccionesRestricciones de de integridadintegridad en Create Tableen Create Tablen not null

n primary key (A1, ..., An)

n check (P), donde P es un predicado

n foreign key (A1, ..., An) references r (B1, ..., Bn)

Ejemplo: Declarar nombre-sucursal como la clave primaria de sucursal y asegurar que el valor de activos no es negativo.

create table sucursal(nombre-sucursal char(15),ciudad-sucursal char(30)activos integer,primary key (nombre-sucursal),check (activos >= 0))

Page 8: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Manejadores de Bases 8

ComandosComandos Drop y Alter TableDrop y Alter Table

n El comando drop table borra toda la información referente a la relación eliminada de la base de datos.

n El comando alter table se utiliza para añadir atributos a unarelación existente.

alter table r add A D

donde A es el nombre del atributo a añadir a la relación r y D es el dominio de A.H A todas las tuplas de la relación se les asigna null como valor

del nuevo atributo.

n El comando alter table también se puede utilizar paraeliminar atributos de una relación

alter table r drop Adonde A es el nombre de un atributo de la relación rH Algunos SGBD no soportan la eliminación de atributos

Page 9: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Manejadores de Bases 9

Integridad referencialIntegridad referencial

n Asegura que un valor que aparece en una relación para un conjunto de atributos determinado también aparece en un conjunto de atributos de otra relación.H Ejemplo: Si “Centro” es un nombre de sucursal que aparece en una de

las tuplas de la relación cuentas, entonces existe una tupla en la relación sucursales para la sucursal “Centro”.

n Definición formalH Dadas las relaciones r1(R1) y r2(R2) con claves primarias K1 y K2

respectivamente.H El subconjunto α de R2 es una clave foránea referenciando K1 en la

relación r1, si para cada t2 en r2 debe haber una tupla t1 en r1 tal que t1[K1] = t2[α].

H Las restricciones de integridad referencial también se denominan dependencias de subconjunto ya que se pueden expresar como

∏α (r2) ⊆ ∏K1 (r1)

Page 10: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Manejadores de Bases 10

Integridad referencial en el modelo EIntegridad referencial en el modelo E--AA

n Consideremos el conjunto asociación R entre los conjuntos entidad E1 y E2. El esquema relacional de R incluye las claves primarias K1 de E1 yK2 de E2.Entonces K1 y K2 son claves foráneas sobre los esquemas relacionales de E1 y E2 respectivamente.

n Las asociaciones 1:N se pueden resolver mediante restricciones de integridad, en vez de mediante una nueva asociación

n Los jerarquías de especialización/generalización también dan lugar a restricciones de integridad referencial.

n Los conjuntos entidad débiles también dan lugar a restricciones de integridad referencial. H El esquema de relación de un conjunto entidad débil debe incluir los

atributos que forman la clave primaria del conjunto entidad del que depende

RE1 E2

Page 11: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Manejadores de Bases d 11

ComprobaciComprobacióón de integridad referencial n de integridad referencial durante una modificacidurante una modificacióónn

n Se deben realizar las siguientes comprobaciones con el fin de preservar la siguiente restricción de integridad referencial:

∏α (r2) ⊆ ∏K (r1)n Insertar. Si una tupla t2 se inserta en r2, el sistema se debe

asegurar de que hay una tupla t1 en r1 tal que t1[K] = t2[α]. Es decir

t2 [α] ∈ ∏K (r1)n Eliminar. Si se elimina una tupla t1 de r1, el sistema debe

hallar el conjunto de tuplas de r2 que referencian t1:

σα = t1[K] (r2)Si el conjunto no es vacíoH o bien se rechaza el comando como un error,H o bien se deben eliminar las tuplas que referencian a t1

(se permiten eliminaciones en cascada)

Page 12: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 12

Modificaciones de la base de datos (Cont.)Modificaciones de la base de datos (Cont.)n Actualizaciones. Hay dos casos:

H Si se actualiza una tupla t2 en la relación r2 y la actualización modifica los valores de la clave foránea α,entonces se debe hacer un test similar al caso de inserción:

4 Si t2’ denota el nuevo valor de la tupla t2, el sistema se debe asegurar de que

t2’[α] ∈ ∏K(r1)

H Si se actualiza una tupla t1 en r1, y la actualización modifica el valor de la clave primaria (K), entonces se debe realizar un test similar a la del caso de eliminación:

1. El sistema debe calcularσα = t1[K] (r2)

utilizando el valor anterior de t1 (el valor antes de hacer la actualización).

2. Si el conjunto no es vacío

1. la actualización se puede rechazar como un error, o

2. La actualización se puede hacer en cascada sobre las tuplas del conjunto, o

3. Las tuplas del conjunto se pueden eliminar.

Page 13: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 13

ConsultasConsultas: : EstructuraEstructura bbáásicasica

n SQL está basado en operaciones sobre relaciones y sobreconjuntos con algunas modificaciones y mejoras

n Una consulta típica en SQL tiene la siguiente forma:select A1, A2, ..., Anfrom r1, r2, ..., rmwhere P

H Ais repesentan atributos

H ris representan relaciones

H P es un predicado.

n Esta consulta es equivalente a la expresión de álgebrarelacional:

∏A1, A2, ..., An(σP (r1 x r2 x ... x rm))

n El resultado de una consulta SQL es una relación.

Page 14: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 14

La La clclááusulausula selectselect

n La cláusula select lista los atributos que queremos en el resultado de la consultaH Corresponde a la operación de proyección del álgebra de relaciones

n P.e. encontrar los nombres de todas las sucursales de la relaciónprestamo

select nombre-sucursalfrom prestamo

n En la sintaxis del álgebra relacional “pura”, la consulta sería:

∏nombre-sucursal(prestamo)

Page 15: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 15

La La clausulaclausula select (Cont.)select (Cont.)

n SQL permite duplicados tanto en relaciones (tablas) como en losresultados de las consultas.

n Para forzar la eliminación de duplicados en los resultadosutilizamos distinct después de select.

n Encontrar los nombres de todas las sucursales en la relaciónprestamo eliminando duplicados

select distinct nombre-sucursalfrom prestamo

n La palabra reservada all indica que no se eliminen losduplicados (comportamiento por defecto).

select all nombre-sucursalfrom prestamo

Page 16: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 16

La La clausulaclausula select (Cont.)select (Cont.)

n Un asterisco en la clausula select indica “todos los atributos”

select *from prestamo

n La clausula select puede contener expresiones aritméticas con las operaciones +, –, ∗, y /, y operar sobre constantes o atributosde tuplas.

n La consulta:

select numero-prestamo, nombre-sucursal, cantidad ∗ 100from prestamo

devolverá una relación igual a la relación prestamo, excepto queel atributo cantidad estará multiplicado por 100.

Page 17: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 17

La La clausulaclausula wherewhere

n La clausula where especifica condiciones que debe satisfacer el resultadoH Corresponden al predicado de selección del álgebra relacional.

n Encontrar todos los números de préstamo hechso en la sucursalde Centro con cantidades prestadas mayores de 1200 pesos.

select numero-prestamofrom prestamowhere nombre-sucursal = ‘Centro’ and cantidad > 1200

n Los resultados lógicos se pueden combinar con las conectivaslógicas and, or y not.

n Las comparaciones se pueden aplicar al resultado de expresiones aritméticas.

Page 18: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 18

La La clausulaclausula where (Cont.)where (Cont.)

n SQL incluye un operador de comparación between

n P.e. Encontrar los números de prétamo de aquellos préstamoscuya cantidad esté entre 90,000 y 100,000 pesos (es decir, ≥90,000 y ≤100,000)

select numero-prestamofrom prestamowhere cantidad between 90000 and 100000

Page 19: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 19

La La clausulaclausula fromfrom

n La clausula from lista las relaciones involucradas en la consultaH corresponde al producto cartesiano del álgebra relacional.

n Encontrar el producto cartesiano prestatario x prestamo

select ∗from prestatario, prestamo

n Encontrar el nombre, número de préstamo y cantidad prestada de

todos los clientes con un préstamo en la sucursal Centro.

select nombre-cliente, prestatario.numero-prestamo, cantidadfrom prestatario, prestamowhere prestatario.numero-prestamo = prestamo.numero-prestamo

and nombre-sucursal = ‘Centro’

Page 20: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 20

La La operacioperacióónn de de renombradorenombrado

n SQL permite renombrar relaciones y atributos mediante la cláusulaas :

nombre-antiguo as nombre-nuevo

n Encontrar el nombre, número de préstamo y cantidad prestada de todos los clientes; renombrar la columna numero-prestamo comoid-prestamo.select nombre-cliente, prestatario.numero-prestamo as id-prestamo, cantidadfrom prestatario, prestamowhere prestatario.numero-prestamo = prestamo.numero-prestamo

Page 21: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 21

Variables de tuplaVariables de tupla

n Las variables de tupla se definen en la cláusula from mediante el usode la cláusula as.

n Encontrar los nombres de cliente y sus números de préstamo paratodos los clientes que tengan un préstamo en alguna sucursal.

select distinct T.nombre-sucursalfrom sucursal as T, sucursal as Swhere T.activos > S.activos and S.ciudad-sucursal = ‘Barcelona’’

n Encontrar los nombres de todas las oficinas que tienen unosactivos mayores que alguna sucursal de Barcelona.

select nombre-cliente, T.numero-prestamo, S.cantidadfrom prestatario as T, prestamo as Swhere T.numero-prestamo = S.numero-prestamo

Page 22: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 22

OperacionesOperaciones sobresobre cadenascadenas de de caracterescaracteres

n SQL incluye un operador de coincidencia para comparar cadenas de caracteres. Los patrones se describen usando dos caracteresespeciales:H porcentaje (%). El % representa cualquier subcadena de caracteres.

H subrayado (_). El _ representa cualquier caractér.

n Encontrar los nombres de los clientes cuya calle incluya la subcadena“Mayor”.

select nombre-clientefrom clientewhere calle-cliente like ‘%Mayor%’

n Para encontrar “Mayor%”like ‘Mayor\%’ escape ‘\’

n SQL soporta diversas operaciones sobre cadenas de caracteres, comoH concatenación (utilizando “||”)

H convertir de mayúsculas a minúsculas (y viceversa)

H calcular la longitud, extraer subcadenas, etc.

Page 23: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 23

OrdenarOrdenar laslas tuplas tuplas obtenidasobtenidas

n Listar en orden alfabético los nombres de todos los clientes quetenganun préstamo en la sucursal Centro

select distinct nombre-clientefrom prestatario, prestamowhere prestatario.numero-prestamo =

prestamo.numero-prestamo and

nombre-sucursal = ‘Centro’order by nombre-cliente

n Podemos especificar desc para orden descendente o asc paraorden ascendente para cada atributo; el orden por defecto es el ascendente.H P.e. order by nombre-cliente desc

Page 24: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 24

OperacionesOperaciones de de conjuntosconjuntos

n Las operaciones de conjuntos unión (union), intersección(intersect), y diferencia (except) se pueden aplicar sobrerelaciones y equivalen a las operaciones ∪, ∩, − del álgebra de relaciones.

n Cada una de las operaciones anteriores elimina dupicadosautomáticamente; para conservar los duplicados se debe utilizarunion all, intersect all and except all.

Supongamos que una tupla aparece m veces en r y n veces en s, entonces aparece:H m + n veces en r union all s

H min(m,n) veces en r intersect all s

H max(0, m – n) veces en r except all s

Page 25: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 25

OperacionesOperaciones de de conjuntosconjuntosn Encontrar todos los clientes que tengan un préstamo, una

cuenta o ambas cosas:

(select nombre-cliente from depositante)except(select nombre-cliente from prestatario)

(select nombre-cliente from depositante)intersect(select nombre-cliente from borrower)

n Encontrar todos los clientes que tengan una cuenta pero no un préstamo.

(select nombre-cliente from depositante)union(select nombre-cliente from prestatario)

n Encontrar todos los clientes que tienen tanto una cuenta comoun préstamo

Page 26: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 26

FuncionesFunciones agregadasagregadas

n Estas funciones operan sobre un conjunto de valores de unacolumna de una relación y devuelven un valor

avg: valor mediomin: valor mínimomax: valor máximosum: suma de valorescount: número de valores

Page 27: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 27

FuncionesFunciones agregadasagregadas (Cont.)(Cont.)

n Encontrar el saldo medio de las cuentas de la sucursal Centro.

n Encontrar el número de depositantes del banco.

n Encontrar el número de tuplas de la relación cliente.

select avg (saldo)from cuentawhere nombre-sucursal = ‘Centro’

select count (*)from cliente

select count (distinct nombre-cliente)from depositante

Page 28: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 28

FuncionesFunciones agregadasagregadas –– Group ByGroup By

n Encontrar el número de depositantes de cada sucursal.

Nota: Los atributos en la clausula select fuera de las funcionesagregadas deben aparecer en la lista group by

select nombre-sucursal, count (distinct nombre-cliente)from depositante, cuentawhere depositante.numero-cuenta = cuenta.numero-cuentagroup by nombre-sucursal

Page 29: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 29

FuncionesFunciones agregadasagregadas –– clclááusulausula HavingHaving

n Encontrar los nombres de todas las sucursales donde el saldomedio de las cuentas sea de más de 1,200 pesos.

select nombre-sucursal, avg (saldo)from cuentagroup by nombre-sucursalhaving avg (saldo) > 1200

Page 30: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 30

ValoresValores nulosnulos ((null)null)

n Las tuplas pueden tener valores nulos, indicado por null, paraalgunos de sus atributos.

n null significa “valor desconocido” o que ese valor no existe.

n El predicado is null se utiliza para comprobar valores nulos.H P.e. Encontrar todos los números de préstamo que aparecen en la

relación prestamo con un valor nulo en cantidad.

select numero-prestamofrom prestamowhere cantidad is null

n El resultado de cualquier expresión aritmética en la queparticipa null es nullH P.e. 5 + null devuelve null

n Sin embargo, las funciones agregadas simplemente ignoran losnulos

Page 31: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 31

ValoresValores nulosnulos y y llóógicagica tritri--valoradavalorada

n Cualquier comparación con null devuelve desconocidoH P.e. 5 < null o null <> null o null = null

n Lógica tri-valorada utilizando el valor de verdad desconocido:H OR: (desconocido or true) = true, (desconocido or false) = desconocido

(desconocido or desconocido) = desconocido

H AND: (desconocido and true) = desconocido, (desconocido and false) = false,(desconocido and desconocido) = desconocido

H NOT: (not desconocido) = desconocido

n Los resultados de los predicados de la cláusula where se tratan como false si toman el valor desconocido

Page 32: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 32

ValoresValores nulosnulos y y agregadosagregados

n Total de cantidades de todos los préstamos

select sum (cantidad)from prestamo

H Esta sentencia ignora las cantidades nulas

H El resultado es nulo si no hay cantidades no nulas

n Todas las funciones agregadas excepto count(*) ignoran lastuplas con valores nulos en los atributos agregados.

Page 33: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 33

SubconsultasSubconsultas anidadasanidadas

n SQL proporciona un mecanismo para anidar subconsultas.

n Una subconsulta es una expresión select-from-where que estáanidada en otra consulta.

n Un uso habitual de las subconsultas es realizar comprobacionesde pertenencia a un conjunto, comparaciones de conjuntos y de cardinalidades de conjuntos.

Page 34: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 34

EjemploEjemplo

n Encontrar todos los clientes que tengan tanto una cuenta comoun préstamo en el banco.

n Encontrar todos los clientes que tienen un préstamo pero no una cuenta en el banco

select distinct nombre-clientefrom prestatariowhere nombre-cliente not in (select nombre-cliente

from depositante)

select distinct nombre-clientefrom prestatariowhere nombre-cliente in (select nombre-cliente

from depositante)

Page 35: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 35

EjemploEjemplo

n Encontrar todos los clientes que tiene tanto una cuenta como un préstamo en la sucursal Centro

select distinct nombre-clientefrom prestatario, prestamowhere prestatario.numero-prestamo = prestamo.numero-prestamoand nombre-sucursal = “Centro”and (nombre-sucursal, nombre-cliente) in

(select nombre-sucursal, nombre-clientefrom depositante, cuentawhere depositante.numero-cuenta =

cuenta.numero-cuenta)

Page 36: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 36

ComparaciComparacióónn de de conjuntosconjuntos

n Encontrar todas las sucursales que tienen unos activos mayoresque alguna sucursal de Madrid.

n La misma consulta utilizando la cláusula > some

select nombre-sucursalfrom sucursalwhere activos > some

(select activosfrom sucursal

where ciudad-sucursal = ‘Veracruz’)

select distinct T.nombre-sucursalfrom sucursal as T, sucursal as Swhere T.activos > S.activos and

S.ciudad-sucursal = ‘Veracruz’

Page 37: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 37

DefiniciDefinicióónn de la de la clclááusulausula SomeSome

n F <comp> some r ⇔ ∃ t ∈ r que cumple (F <comp> t)Donde <comp> puede ser: <, ≤, >, =, ≠

056

(5< some ) = true

050

) = false

5

05(5 ≠ some ) = true (dado que 0 ≠ 5)

(leer: 5 < some tupla de la relación)

(5< some

) = true(5 = some

(= some) ≡ inSin embargo, (≠ some) ≡ not in

Page 38: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 38

DefiniciDefinicióónn de la de la clclááusulausula AllAll

n F <comp> all r ⇔ ∀ t ∈ r (F <comp> t)

056

(5< all ) = false

6104

) = true

5

46(5 ≠ all ) = true (dado que 5 ≠ 4 y 5 ≠ 6)

(5< all

) = false(5 = all

(≠ all) ≡ not inSin embargo, (= all) ≡ in

Page 39: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 39

ConsultaConsulta de de ejemploejemplo

n Encontrar los nombres de todas las sucursales que tengan unosactivos mayores que todas las sucursales de Madrid.

select nombre-sucursalfrom sucursaleswhere activos > all

(select activosfrom sucursaswhere ciudad-sucursal = ‘Veracruz’)

Page 40: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 40

ComprobaciComprobacióónn de de relacionesrelaciones vacvacííasas

n La construcción exists devuelve el valor true si la subconsultaargumento no está vacía.

n exists r ⇔ r ≠ Ø

n not exists r ⇔ r = Ø

Page 41: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 41

ConsultaConsulta de de ejemploejemplo

n Encontrar todos los clientes que tengan una cuenta en todas lassucursales de Madrid.

select distinct S.nombre-clientefrom depositante as Swhere not exists (

(select nombre-sucursalfrom sucursalwhere ciudad-sucursal = ‘Veracruz’)

except(select R.nombre-sucursalfrom depositante as T, cuenta as Rwhere T.numero-cuenta = R.numero-cuenta and

S.nombre-cliente = T.nombre-cliente))

nNotar que X – Y = Ø ⇔ X ⊆ Y

n Nota: Esta consulta no se puede escribir con = all y sus variantes

Page 42: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 42

ComprobaciComprobacióónn de de ausenciaausencia de tuplas de tuplas duplicadasduplicadas

n La construcción unique comprueba si el resultado de unasubconsulta tiene tuplas duplicadas.

n Encontrar todos los clientes que tienen como mucho una cuentaen la sucursal Centro.

select T.nombre-clientefrom depositante as Twhere unique (

select R.nombre-clientefrom cuenta, depositante as Rwhere T.nombre-cliente = R.nombre-cliente and

R.numero-cuenta = cuenta.numero-cuenta andcuenta.nombre-sucursal = ‘Centro’

Page 43: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 43

ConsultaConsulta de de ejemploejemplo

n Encontrart todos los clientes que tengan al menos dos cuentasen la sucursal de Centro.

select distinct T.nombre-clientefrom depositante Twhere not unique (

select R.nombre-clientefrom cuenta, depositante as Rwhere T.nombre-cliente = R.nombre-cliente

andR.numero-cuenta = cuenta.numero-cuenta

andcuenta.nombre-sucursal = ‘Centro’)

Page 44: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 44

VistasVistas

n Proporcionan un mecanismo para ocultar ciertos datos a ciertosusuarios. Para crear una vista se usa el comando:

create view v as <consulta>

donde:H <consulta> es cualquier expresión legal

H El nombre de la vista es v

Page 45: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 45

EjemploEjemplo

n Una vista consistente en las sucursales y sus clientes

n Encontrar todos los clientes de la sucursal Centro

create view clientes-sucursal as(select nombre-sucursal, nombre-clientefrom depositante, cuentawhere depositante.numero-cuenta = cuenta.numero-cuenta)union

(select nombre-sucursal, nombre-clientefrom prestatario, prestamowhere prestatario.numero-prestamo = prestamo.numero-prestamo)

select nombre-clientefrom clientes-sucursalwhere nombre-sucursal = ‘Centro’

Page 46: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 46

RelacionesRelaciones derivadasderivadas

n Encontrar el saldo medio de las cuentas de aquellas sucursalesdonde el saldo medio de las cuentas es mayor de 1200 pesos.

select nombre-sucursal, saldo-mediofrom (select nombre-sucursal, avg (saldo)

from cuentagroup by nombre-sucursal)

as resultado (nombre-sucursal, saldo-medio)where saldo-medio > 1200

No necesitamos utilizar la cláusula having dado que calculamosuna relación temporal (vista) resultado en la cláusula from, y losatributos de resultado se pueden utilizar directamente en la cláusula where.

Page 47: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 47

ClClááusulausula WithWith

n La cláusula With definir vistas locales a una consulta, en vez de globalmente.

n Encontrar todas las cuentas con el saldo máximo

with saldo-maximo (valor) asselect max (saldo)from cuenta

select numero-cuentafrom cuenta, saldo-maximowhere cuenta.saldo = saldo-maximo.valor

Page 48: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 48

ConsultasConsultas complejascomplejas con la con la clclááusulausula WithWith

n Encontrar todas las sucursales donde el total de sus cuentas esmayor que la media del total de cuentas de todas las sucursales.

with total-sucursal (nombre-sucursal, valor) asselect nombre-sucursal, sum (saldo)from cuentagroup by nombre-sucursal

with media-total-sucursal(valor) asselect avg (valor)from total-sucursal

select nombre-sucursalfrom total-sucursal, media-total-sucursalwhere total-sucursal.valor >= media-total-sucursal.valor

Page 49: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 49

ModificaciModificacióónn de de datosdatos –– BorradoBorrado

n Borrar todas las cuentas de la sucursal Centro

delete from cuentawhere nombre-sucursal = ‘Centro’

n Borrar todas las cuentas de todas las sucursales de Veracruz.

delete from cuentawhere nombre-sucursal in (select nombre-sucursal

from sucursalwhere ciudad-sucursal = ‘Veracruz’)

delete from depositantewhere numero-cuenta in

(select numero-cuentafrom sucursal, cuentawhere ciudad-sucursal = ‘Veracruz’and sucursal.nombre-sucursal = cuenta.nombre-

sucursal)

Page 50: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 50

EjemploEjemplo de de borradoborrado

n Borrar todas las cuentas con saldos por debajo de la media del banco.

delete from cuentawhere saldo < (select avg (saldo)

from cuenta)

H Problema: a medida que borramos tuplas, la media cambia

H Solución utilizada en SQL:

1. Primero, calcular avg y encontrar todas las tuplas a borrar

2. Segundo, borrar todas las tuplas encontradas antes (sin recalcularavg ni recomprobar las tuplas)

Page 51: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 51

ModificaciModificacióónn de de DatosDatos -- InserciInsercióónnn Añadir una nueva tupla a cuenta

insert into cuentavalues (‘A-9732’, ‘Centro’,1200)

o, como forma alternativa

insert into cuenta (nombre-sucursal, saldo, numero-cuenta)values (‘Centro’, 1200, ‘A-9732’)

n Añadir una nueva tupla a cuenta con saldo puesto a nulo

insert into cuentavalues (‘A-777’,'Centro', null)

Page 52: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 52

ModificaciModificacióónn de de datosdatos –– InserciInsercióónnn Dar como premio a todos los clientes con préstamo en la sucursal

de Centro una nueva cuenta de ahorro con 200 pesos de saldo. El número de préstamo servirá como númeor de cuenta para la nuevacuenta de ahorro.

insert into cuentaselect numero-prestamo, nombre-sucursal, 200from prestamowhere nombre-sucursal = ‘Centro’

insert into depositanteselect nombre-cliente, numero-prestamofrom prestamo, prestatariowhere nombre-sucursal = ‘Centro’

and prestamo.numero-cuenta = prestatario.numero-cuenta

n La sentencia select-from-where se evalúa totalmente antes de insertar ninguno de sus resultados en la relación (si no, consultascomo

insert into tabla1 select * from tabla1causarían problemas

Page 53: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 53

ModificaciModificacióónn de de datosdatos –– ActualizacionesActualizaciones

n Incrementar todas las cuentas con más de 10,000 pesos un 6% y el resto de cuentas un 5%.H Escribimos dos sentencias update:

update cuentasset saldo = saldo ∗ 1.06where saldo > 10000

update cuentasset saldo = saldo ∗ 1.05where saldo ≤ 10000

H El orden es importante

H Se puede hacer mejor con la sentencia case

Page 54: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 54

SentenciaSentencia Case Case parapara actualizacionesactualizacionescondicionalescondicionales

n La misma consulta de antes: aumentar los saldos de todas lascuentas de más de 10,000 pesos un 6% y las demás un 5%.

update cuentaset saldo = case

when saldo <= 10000 then saldo *1.05else saldo * 1.06

end

Page 55: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 55

ActualizaciActualizacióónn a a travtravééss de vistasde vistas

n Crear una vista de todos los datos sobre préstamos en la relaciónprestamo, ocultando el atributo cantidad

create view prestamo-sucursal asselect nombre-sucursal, numero-prestamofrom prestamo

n Añadir una nueva tupla a prestamo-sucursalinsert into prestamo-sucursal

values (‘Centro’, ‘L-307’)

Esta inserción se debe transformar en la inserción de la tupla(‘L-307’, ‘Centro’, null)

en la relación prestamon En vistas más complejas las actualizaciones pueden ser más difíciles

o imposibles de transformar y no están, por tanto, permitidas. n La mayoría de implementaciónes SQL sólo permiten actualizaciones

a través de vistas simples (sin agregaciones) definidas sobre una solarelación.

Page 56: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 56

TransaccionesTransacciones

n Una transacción es una secuencia de sentencias (normalmente de consulta y actualización) que se ejecutan como una sola unidad.H Las transacciones se inician de manera implícita y se terminan mediante:

4 commit work: hace permanentes en la base de datos todos los cambios

4 rollback work: deshace todos los cambios realizados en la transacción.

n Ejemplo:H La transferencia de dinero de una cuenta a otra supone dos pasos:

4 quitarlo de una cuenta y añadirlo a la otra

H Si se realiza un paso y falla el otro, la base de datos queda en un estadoinconsistente

H Por tanto, se deben realizar los dos pasos, o ninguno.

n Si cualquier paso de la transacción falla, todo el trabajo realizado por la transacción se puede desahcer mediante rollback work.

n El rollback de las transacciones incompletas se hace automáticamente en caso de fallos del sistema.

Page 57: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 57

TransaccionesTransacciones (Cont.)(Cont.)

n En la mayoría de SGBD, cada sentencia SQL que se ejecutacorrectamente se confirma (commit) automáticamente. H En este caso, cada transacción debe consistir en una sola

sentencia.

H Normalmente se puede deshabilitar la confirmación automática, permitiendo transacciones multi-sentencia, pero cómo se hace estoes dependiente del SGBD.

H Otra opción, en SQL:1999: rodear las sentencias de:begin atomic

…end

Page 58: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 58

RelacionesRelaciones unidasunidas ((joinjoin))

n Las operaciones join toman dos relaciones y devuelven otrarelación.

n Estas operaciones normalmente se utilizan como subconsultasen la cláusula from.

n Condición del join – define qué tuplas de las dos relacionescoinciden, y qué atributos aparecerán en el resustado del join.

n Tipo de join – define como tratar aquellas tuplas de cadarelación que no coinciden con ninguna tupla de la otra relación(en base a la condición de join.

Tipos de join

inner joinleft outer joinright outer joinfull outer join

Condición de join

naturalon <predicado>using (A1, A2, ..., An)

Page 59: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 59

RelacionesRelaciones unidasunidas –– DatosDatos parapara loslosejemplosejemplos

n Relación prestamo

n Relación prestatario

nombre-cliente numero-prestamo

Fernández

Suárez

López

L-170

L-230

L-155

cantidad

3000

4000

1700

nombre-sucursal

Villa

CentroVargas

numero-prestamo

L-170

L-230

L-260

n Nota: falta la información del préstatario del préstamoL-260 y la información del préstamo L-155

Page 60: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 60

RelacionesRelaciones unidasunidas -- EjemplosEjemplos

n prestamo inner join prestatario onprestamo.numero-prestamo = prestatario.numero-prestamo

n prestamo left outer join prestatario onprestamo.numero-prestamo = prestatario.numero-prestamo

nombre-sucursal cantidad

Villa

Centro3000

4000

nombre-cliente numero-prestamo

Fernández

Suárez

L-170

L-230

numero-prestamo

L-170

L-230

nombre-sucursal cantidad

Villa

CentroVargas

3000

4000

1700

nombre-cliente numero-prestamo

Fernández

Suárez

null

L-170

L-230

null

numero-prestamo

L-170

L-230

L-260

Page 61: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 61

RelacionesRelaciones unidasunidas -- EjemplosEjemplos

n prestamo natural inner join prestatario

n prestamo natural right outer join prestatario

nombre-sucursal cantidad

Villa

Centro3000

4000

nombre-cliente

Fernández

Suárez

numero-prestamo

L-170

L-230

nombre-sucursal cantidad

Villa

Centronull

3000

4000

null

nombre-cliente

Fernández

Suárez

López

numero-prestamo

L-170

L-230

L-155

Page 62: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 62

RelacionesRelaciones unidasunidas -- EjemplosEjemplos

n prestamo full outer join prestatario using (numero-prestamo)

n Encontrar todos los clientes que tengan o bien una cuenta o bien un préstamo (pero no ambos) en el banco.

nombre-sucursal cantidad

VillaCentro

Vargasnull

3000

4000

1700

null

nombre-cliente

Fernández

Suárez

null

López

numero-prestamo

L-170

L-230

L-260

L-155

select nombre-clientefrom (depositante natural full outer join prestatario)where numero-cuenta is null or numero-prestamo is null

Page 63: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 63

SQL SQL embebidoembebido

n El estándar SQL define la inclusión de SQL en diversos lengujesde programación como Pascal, PL/I, Fortran, C, y Cobol.

n EL lenguaje en el que se incluyen sentencias SQL se denominalenguaje anfitrión (host), y las estructuras SQL permitidas en el lenguaje anfitrión se denominan SQL embebido (embedded).

n La forma básica de estos lenguajes sigue la utilizada en el Sistema R para incluir SQL en PL/I.

n La sentencia EXEC SQL se utiliza para identificar solicitudes embebidas SQL al preprocesador

EXEC SQL <sentencia SQL embebida > END-EXEC

Nota: en algunos lenguajes esto cambia. P.e. en Java se usa# SQL { …. } ;

Page 64: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 64

EjemploEjemplo de de consultaconsulta

n Especificamos la consulta en SQL y declaramos un cursorasociado

EXEC SQLdeclare c cursor for select nombre-cliente, ciudad-clientefrom depositante, cuenta, cantidadwhere depositante.nombre-cliente = cliente.nombre-cliente

and depositante.numero-cuenta = cuenta.numero-cuentaand cuenta.saldo > :cantidad

END-EXEC

Desde un lenguaje anfitrión, encontrar los nombres y ciudadescon alguna cuenta que tenga más pesos de la cantidadalmacenada en la variable cantidad.

Page 65: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 65

SQL SQL embebidoembebido (Cont.)(Cont.)

n La sentencia open hace que se evalúe la consulta

EXEC SQL open c END-EXEC

n La sentencia fetch sitúa en variables del lenguaje anfitrión losvalores de una tupla del resultado de la consulta.

EXEC SQL fetch c into :cn, :cc END-EXECRepetidas llamadas a fetch devuelve tuplas sucesivas del resultado de la consulta

n Una variable denominada SQLSTATE en el área de comunicación de SQL (SQLCA) se pone a ‘02000’ para indicarque no hay más datos

n La sentencia close hace que el SGBD elimine la relacióntemporal que alamcena el resultado de la consulta.

EXEC SQL close c END-EXEC

Page 66: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 66

ActualizacionesActualizaciones mediantemediante cursorescursores

n Declarando que un cursor es para actualizaciones se puedemodificar la tupla actual del cursor

declare c cursor forselect *from cuentawhere nombre-sucursal = ‘Centro’

for update

n Para actualizar la tupla en la posición actual del cursor:

update cuentaset saldo = saldo + 100where current of c

Page 67: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 67

SQL SQL dindináámicomico

n Permite a los programas construir y ejecutar sentencias SQL en tiempo de ejecución.

n Ejemplo de uso de SQL dinámico desde un programa C.

char * consultasql = “update cuentaset saldo = saldo * 1.05where numero-cuenta = ?”

EXEC SQL prepare consultadin from :consultasql;char cuenta [10] = “A-101”;EXEC SQL execute consultadin using :cuenta;

n El programa SQL dinámico contiene un ?, que es un “hueco”para el valor que se proporciona cuando se ejecuta el programaSQL.

Page 68: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 68

ODBCODBC

n Estándar Open DataBase Connectivity (ODBC)H Estándar para programar comunicaciones (accesos) a un servidor

de bases de datos desde aplicaciones.

H API para

4 abrir una conexión con una base de datos,

4 enviar sentencias,

4 recibir resultados.

Page 69: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 69

ODBC (Cont.)ODBC (Cont.)

n Cada SGBD que soporta ODBC proporciona una librería "driver" que se debe enlazar con el programa cliente.

n Cuando el programa cliente hace una llamada al API ODBC, el códigode la librería se comunica con el servidor para realizar la acciónsolicitada y obtener los resultados.

n El programa ODBC primero asigna un entorno SQL y, a continuacíón, un manejador de conexión a base de datos.

n Abre una conexión a la base de datos utilizando SQLConnect(). SQLConnect toma como parámetros:H el manejador de la conexión,

H el servidor a que conectar,

H el identificador del usuario,

H su password

n También debe especificar los tipos de los argumentos:H SQL_NTS indica que el argumento anterior es una cadena de carateres

terminado en nulo.

Page 70: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 70

CCóódigodigo ODBCODBC

n int ejemploODBC(){

RETCODE error;HENV env; /* entorno */

HDBC conn; /* conexion a base de datos */ SQLAllocEnv(&env);SQLAllocConnect(env, &conn);SQLConnect(conn, “clave", SQL_NTS, “usuario",

SQL_NTS, “usuariopass", SQL_NTS);

{ …. Realizamos el trabajo … }

SQLDisconnect(conn); SQLFreeConnect(conn); SQLFreeEnv(env);

}

Page 71: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 71

CCóódigodigo ODBC (Cont.)ODBC (Cont.)

n Los programas envían comandos SQL a la base datos medianteSQLExecDirect

n Las tuplas del resultado se acceden mediante SQLFetch()

n SQLBindCol() asocia variables C a atributos del resultado de la consulta. 4 Cuando se accede a una tupla, sus valores se almacenan

automáticamente a las variables C correspondientes.

4 Argumentos do SQLBindCol()

– Variable ODBC stmt,

– Posición del atributo en el resultado de la consulta

– El tipo de conversión de SQL a C.

– La dirección de la variable.

– Para tipos de longitud variable, como cadenas de caracteres,

» La longitud máxima de la variable.

» Lugar para almacenar la longitud actual cuando se acceda a la tupla.

Page 72: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 72

CCóódigodigo ODBC (Cont.)ODBC (Cont.)n Cuerpo principal del programa

char nombresucursal[80];float saldo;int longOut1, longOut2;HSTMT stmt;

SQLAllocStmt(conn, &stmt);char * consultasql = "select nombre_sucursal, sum (saldo)

from cuentagroup by nombre_sucursal";

error = SQLExecDirect(stmt, consultasql, SQL_NTS);

if (error == SQL_SUCCESS) {SQLBindCol(stmt, 1, SQL_C_CHAR, nombresucursal, 80, &longOut1);SQLBindCol(stmt, 2, SQL_C_FLOAT, &saldo, 0, &longOut2);

while (SQLFetch(stmt) >= SQL_SUCCESS) {printf (" %s %g\n", nombresucursal, saldo);

}}SQLFreeStmt(stmt, SQL_DROP);

Page 73: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 73

MMááss caractercaracteríísticassticas de ODBCde ODBC

n Sentencias PreparadasH Sentencia SQL preparada: compilada en la base de datosH Puede tener “huecos”: P.e.: insert into cuenta values(?,?,?)H Se ejecuta varias veces con valores concretos para los “huecos”

n Manejo de MetadatosH Encontrar todas las relaciones de la base de datos y

H encontrar los nombres y tipos de las columnas de un resultado de consultao una relación de la base de datos.

n Por defecto, cada sentencia SQL se trata como una transacción, esdecir, se confirma automáticamente.H Se puede desactivar la confirmación automática en una conexión

4 SQLSetConnectOption(conn, SQL_AUTOCOMMIT, 0)} H Y las transacciones de deben confirmar o anular entonces explícitamente

mediante4 SQLTransact(conn, SQL_COMMIT) o4 SQLTransact(conn, SQL_ROLLBACK)

Page 74: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 74

NivelesNiveles de de conformidadconformidad ODBCODBC

n Los niveles de conformidad especifican subconjuntos de la funcionalidad definida por el estándar.H Core

H Nivel 1: requiere soporte de consulta de metadatos

H Nivel 2: requiere capacidad para enviar y obtener cadenas de valores de parámetros e información de catálogo más detallada.

n El estándar CLI (SQL Call Level Interface) es similar al interfazODBC, con pequeñas diferencias.

Page 75: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 75

JDBCJDBC

n JDBC es una API Java para comunicarse con SGBD quesoportan SQL

n JDBC soporta diversas características para consultar y actualizar datos y para obtener los resultados de consultas

n JDBC también soporta la obtención de metadatos, tales comoconsultas sobre relaciones de la base de datos y sobre losnombres y tipos de los atributos de las relaciones

n Modelo para comunicarse con la base de datos:H Abrir una conexión

H Crear un objeto “sentencia”

H Ejecutar consultas utilizando el objeto Sentencia para enviarconsultas y obtener resultados

H Mecanismos de excepción para gestionar errores

Page 76: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 76

CCóódigodigo JDBCJDBC

public static void EjemploJDBC(String idusuario, String passwd)

{ try {

Class.forName ("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@bd.banco.mx:2000:bdbanco", idusuario, passwd);

Statement stmt = conn.createStatement(); …Realizar trabajo ….

stmt.close();conn.close();

}catch (SQLException sqle) {

System.out.println(“ExcepciónSQL : " + sqle);}

}

Page 77: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 77

CCóódigodigo JDBC (Cont.)JDBC (Cont.)

n Actualizar la base de datostry {

stmt.executeUpdate( "insert into cuentas values('A-9732', ‘Centro', 1200)");

} catch (SQLException sqle) {

System.out.println(“No se pudo introducir la tupla. " + sqle);

}

n Ejecutar una consulta y extraer e imprimir los resultadosResultSet rset = stmt.executeQuery( "select nombre_sucursal, avg(saldo)

from cuentagroup by nombre_sucursal");

while (rset.next()) {

System.out.println(rset.getString(“nombre_sucursal") + " " + rset.getFloat(2));

}

Page 78: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 78

DetallesDetalles del del ccóódigodigo JDBC JDBC

n Obtener campos del resultado:H rs.getString(“nombresucursal”) y rs.getString(1) son equivalentes si

nombresucursal es el primer argumento del resultado del select.

n Tratamiento de valores Nullint a = rs.getInt(“a”);

if (rs.wasNull()) Systems.out.println(“Obtenido un valor nulo”);

Page 79: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 79

SentenciasSentencias preparadaspreparadas

n Las sentencias preparadas permiten que las consultas se compileny ejecuten varias veces con argumentos distintos

PreparedStatement pStmt = conn.prepareStatement(

“insert into cuenta values(?,?,?)”); pStmt.setString(1, "A-9732");

pStmt.setString(2, “Cenro");

pStmt.setInt(3, 1200);

pStmt.executeUpdate();

pStmt.setString(1, "A-9733");

pStmt.executeUpdate();

Page 80: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 80

ArquitecturasArquitecturas de la de la aplicaciaplicacióónn

n La aplicaciones se pueden construir siguiendo una de las dos arquitecturas siguientes:H Modelo de dos capas

4 El programa de aplicación en la máquina del usuario utilizadirectamente JDBC/ODBC para comunicarse con la base de datos

H Modelo de tres capas

4 Los usuarios/programas ejecutándose en la máquina del usuariose comunica con una aplicación del servidor. La aplicación del servidor a su vez se comunica con la base de datos

Page 81: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 81

ModeloModelo de dos de dos capascapas

n P.e. código Java se ejecuta en la máquina cliente y utiliza JDBC para comunicarse con el servidor

n Beneficios:H flexibilidad, no necesita restringirse a consultas predefinidas

n Problemas:H Seguridad: las passwords están disponibles en la máquina cliente;

se permiten todas las operaciones sobre la base de datos

H Más código en el cliente

H No apropiado entre organizaciones, o en aquellas grandes comouniversidades

Page 82: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 82

ModeloModelo de de trestres capascapas

Programa CGI

Servidorde BD

Servidor deAplicaciones/HTTP

ServletsJDBC

Red

Cliente Cliente Cliente

HTTP/Protocolo específico de la aplicación

Page 83: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 83

ModeloModelo de de trestres capascapas (Cont.)(Cont.)

n P.e. Cliente Web + Servlet Java utilizando JDBC paracomunicarse con el servidor de bases de datos

n El cliente envía peticiones vía http o un protocolo específico de la aplicación

n La aplicación o el servidor Web recibe la petición

n La petición la gestiona un programa CGI program o servlets

n La seguridad la gestiona la aplicación en el servidorH Mayor seguridad

H Seguridad de grado fino

n Cliente simple, pero sólo puede hacer transaccionespredefinidas

Page 84: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 84

ExtensionesExtensiones ProcedimentalesProcedimentales y y ProcedimientosProcedimientos AlmacenadosAlmacenados

n SQL proporciona un lenguaje modularH permite definir procedimientos en SQL, con sentencias if-then-else,

bucles for y while, etc.

n Procedimientos AlmacenadosH Se pueden almacenar procedimientos en la base de datos

H y ejecutarlos mediante la sentencia call

H permite a las aplicaciones externas operar sobre la base de datossin saber nada sobre detalles internos

Page 85: Lenguaje SQL - genaromendez.com · 2. El esquema relacional de R incluye las claves primarias K 1 de E 1 y K 2 de E 2. Entonces K 1 y K 2 son claves foráneas sobre los esquemas relacionales

Bases de datos 85

FinFin