Se me pas贸 poner el Diagrama Entidad-Relaci贸n :

聽
聽聽
聽聽聽
Una lista de las soluciones posibles a los ejercicios propuestos podr铆a ser:1.-SELECT cuentas.* FROM clientes,cuentas
WHERE cuentas.cliente_id=clientes.cliente_id
AND clientes.apellido LIKE ‘A%’
2.-SELECT movimientos.* FROM movimientos,cuentas,clientes,divisas
WHERE movimientos.num_cuenta_origen=cuentas.num_cuenta
AND cuentas.cliente_id=clientes.cliente_id
AND cuentas.divisa_id=divisas.divisa_id
AND clientes.apellido=’P脡REZ’
AND divisas.nombre=’EURO’
3.-SELECT poblaciones.nombre,count(cliente_id) FROM clientes,poblaciones
WHERE poblaciones.poblacion_id=clientes.poblacion_id
GROUP BY poblaciones.nombre
4.-SELECT paises.nombre,COUNT(cliente_id) FROM clientes,poblaciones,paises
WHERE clientes.poblacion_id=poblaciones.poblacion_id
AND poblaciones.pais_id=paises.pais_id
GROUP BY paises.nombre HAVING COUNT(cliente_id)>100
5.-SELECT quejas.* FROM quejas,clientes
WHERE clientes.cliente_id=quejas.cliente_id
AND clientes.moroso IS NOT NULL
6.-SELECT quejas.* FROM quejas,clientes,cuentas,movimientos
WHERE clientes.cliente_id=quejas.cliente_id
AND clientes.cliente_id=cuentas.cliente_id
AND cuentas.num_cuenta=movimientos.num_cuenta_origen
AND movimientos.numdoc=(SELECT TOP 1 num_doc FROM movimientos
聽聽聽WHERE tipo=’INGRESO’
聽聽聽AND fecha_mov BETWEEN ’01-01-2007′ AND ’31-12-2007′
聽聽聽ORDER BY importe DESC)
7.-SELECT movimientos.num_doc,movimientos.tipo,movimientos.importe*divisas.tipo_cambio AS total_en_euros FROM movimientos,cuentas,divisas,clientes
WHERE clientes.cliente_id=cuentas.cliente_id
AND cuentas.num_cuenta=movimientos.num_cuenta_origen
AND divisas.divisa_id=cuentas.divisa_id
/*Funcionar谩 si el tipo de cambio es siempre hacie el EURO*/
8.-SELECT divisas.* FROM divisas
WHERE divisas.divisa_id NOT IN (SELECT DISTINCT(cuentas.divisa_id) FROM cuentas)
/* Tambi茅n se puede resolver con un outer join */
9.-SELECT DISTINCT(clientes.num_doc_id) FROM quejas,clientes,cuentas,movimientos
WHERE quejas.cliente_id=clientes.cliente_id
AND clientes.cliente_id=cuentas.cliente_id
AND cuentas.num_cuenta=movimientos.num_cuenta_origen
AND quejas.fecha_queja=movimientos.fecha_mov
10.-SELECT movimientos.* FROM clientes,cuentas,movimientos
WHERE clientes.cliente_id=cuentas.cliente_id
AND cuentas.num_cuenta=movimientos.num_cuenta_origen
AND movimientos.tipo=’INGRESO’
AND clientes.apellido=’P脡REZ’
UNION
SELECT movimientos.* FROM clientes,cuentas,movimientos
WHERE clientes.cliente_id=cuentas.cliente_id
AND cuentas.num_cuenta=movimientos.num_cuenta_origen
AND movimientos.tipo=’TRASPASO’
AND clientes.apellido=’RODR脥GUEZ’
11.-CREATE TRIGGER trg_borrado_mov ON movimientos AFTER INSERT AS
DECLARE @num_doc NUMERIC(13)
BEGIN
– SET NOCOUNT ON impide que se generen mensajes de texto
– con cada instrucci贸n
SET NOCOUNT ON
SELECT @num_doc=num_doc FROM deleted
ROLLBACK
– Acabamos de impedir el borrado, y ahora hacemos la inserci贸n del movimiento al rev茅s
BEGIN TRAN
INSERT INTO movimientos(tipo,cuenta_origen,importe,fecha_mov,descripcion) SELECT
tipo,cuenta_origen,importe-(2*importe),getdate(),’Anulaci贸n movimiento’ FROM movimientos
WHERE num_doc=@num_doc
COMMIT TRAN
END
12.-CREATE VIEW cuentas_buenas AS SELECT * FROM cuentas WHERE saldo>0
INSERT INTO movimientos(tipo,importe,fecha_mov,num_cuenta_origen,descripcion) VALUES (SELECT ‘INGRESO’,GetDate(),
cuentas_buenas.num_cuenta,’Intereses a su favor 4%’)
UPDATE cuentas_buenas SET saldo=saldo*1.04
/* Se puede hacer m谩s f谩cil con CTEs en lugar de crear una vista */
13.-CREATE FUNCTION esmoroso
(@cliente_id numeric(10))
RETURNS varchar(1)
AS
BEGIN
declare @moroso varchar(1)
SELECT @moroso = moroso FROM clientes WHERE cliente_id=@cliente_id
IF (@moroso IS NULL) THEN
聽return ‘N’
ELSE
聽return ‘S’
END
GO
/* Para usarla, hacer lo siguiente: SELECT * FROM esmoroso(12000) */
Art铆culos relacionados
-
javier.jofre dice:
13 de diciembre de 2007 a las 9:55Hay un bug en el ejercicio 12, ya que falta la referencia a la vista creada en el select dentro del insert y en el update. En el ejercicio 13, si el campo moroso que est谩 en la tabla de clientes fuera de tipo DATETIME, entonces la variable @moroso tambi茅n deber铆a ser de este mismo tipo.









Suscribirse a nuestro Twitter
Carlos (02-Aug-2010)
A trav茅s de la p谩gina en FaceBook de BalearesON, Dar铆o ha enlazado una aplicaci贸n de canal del tiempo para Surface. Muy interesante.