Cap04. SQL
Cap04. SQL
Estructura básica
Operaciones sobre conjuntos
Funciones de agregación
Valores nulos
Subconsultas anidadas
Relaciones derivadas
Vistas
Modificación de la base de datos
Reunión de relaciones
Lenguaje de definición de datos
SQL, ODBC y JDBC incorporados
select nombre-sucursal
from sucursal
where activo > some
(select activo
from sucursal
where ciudad-sucursal = ‘Barcelona’)
0
(5< some 5 ) = verdadero
(leer: 5 < alguna tupla de la relación)
6
0
(5< some 5 ) = falso
0
(5 = some 5 ) = verdadero
0
(5 some 5 ) = verdadero (ya que 0 5)
(= some) in
Sin embargo, ( some) not in
Fundamentos de bases de datos 3ª Edición 4.29 ©Silberschatz, Korth y Sudarshan
Definition of all Clause
0
(5< all 5 ) = falso
6
6
(5< all 10 ) = verdadero
4
(5 = all 5 ) = falso
4
(5 all 6 ) = verdadero (ya que 5 4 y 5 6)
( all) not in
Sin embargo, (= all) in
Fundamentos de bases de datos 3ª Edición 4.30 ©Silberschatz, Korth y Sudarshan
Consulta ejemplo
Obtener los nombres de todas las sucursales que tienen activos
mayores que todas las sucursales situadas en Barcelona.
select nombre-sucursal
from sucursal
where activo> all
(select activo
from sucursal
where ciudad-sucursal = ‘Barcelona’)
select nombre-cliente
from todos-los-clientes
where nombre-sucursal = ‘Navacerrada’
with saldo-máximo(valor) as
select max (saldo)
from cuenta
select número-cuenta
from cuenta, saldo-máximo
where cuenta.saldo = saldo-máximo.valor
update cuenta
set saldo = saldo 1,05
where saldo 10000
El orden es importante
Se puede hacer utilizando la instrucción case (siguiente transparencia)
update cuenta
set saldo = case
when saldo <= 10000 then saldo *1,05
else saldo * 1,06
end
Ejemplo de motivación
Transferencia de dinero de una cuenta a otra que implica dos pasos:
Deducir de una cuenta y abonar a la otra
Si uno de los pasos tiene éxito y el otro falla, la base de datos está en un estado
inconsistente
Por lo tanto, deberían tener éxito ambos pasos o no tenerlo ninguno
Si falla alguno de los pasos de una transacción, todo el trabajo hecho por la
transacción se puede deshacer por medio de rollback work.
El retroceso de transacciones incompletas se hace automáticamente, en caso
de fallos en el sistema
Relación prestatario
nombre-cliente número-préstamo
Santos P-170
Gómez P-230
López P-155
Nota: no se tiene la información del prestatario para
P-260 ni la información de préstamo para P-155
número-préstamo
loan-number
nombre-sucursal
branch-name
importe amount
nombre-cliente
P-170 L-170
Centro Downtown3000 Santos
3000
P-230 MoralzarzalRedwood 4000
L-230 Gómez
4000
EXEC SQL
select nombre-cliente, ciudad-cliente
from impositor, cliente, cuenta
where impositor.nombre-cliente = cliente.nombre-cliente
and impositor número-cuenta= cuenta.número-cuenta
and cuenta.saldo > :importe
END-EXEC
update cuenta
set saldo = saldo + 100
where current of c
SQLDisconnect(conn);
SQLFreeConnect(conn);
SQLFreeEnv(env);
}
pStmt.setString(1, "A-9733");
pStmt.executeUpdate();
NOTA: ¡Si el valor que se va a almacenar en la base de datos contiene
unas comillas simples u otro carácter especial, las instrucciones
preparadas funcionan bien, pero si crean una cadena y la ejecutan
directamente podría producirse un error de sintaxis!
Red