Javier Jofre

Soluci贸n Ejercicios SQL Server

Autor: Javier Jofre. Archivado en Sin categor铆a
Etiquetas: ·
07/dic/2007  

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

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



 Suscríbete a los comentarios de este post.  Comentarios

Dejar comentario

  1. javier.jofre dice:
    13 de diciembre de 2007 a las 9:55

    Hay 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.


Deja tu comentario








* Campos obligatorios  




1 comentario »