Está en la página 1de 5

(banco)Integridad referencial:

alter table cuenta


add foreign key (nsucursal) references sucursal(nsucursal)
on delete restrict on update cascade,
add foreign key (DNI) references cliente(DNI)
on delete restrict on update cascade;

alter table movimiento


add foreign key (ncuenta) references cuenta(ncuenta)
on delete cascade on update cascade;

consultas:
1Listar las sucursales de la provincia de Gipuzkoa.

2Listar todos los movimientos donde se ha retirado dinero.

3Mostrar el número de cuenta y el saldo de aquellas cuentas cuyo saldo sea mayor que 100000 y menor que 300000.

4Listar los clientes cuyo nombre termine por l.

5Listar el número de cuenta de aquellas cuentas cuya sucursal no se encuentre en Bizkaia.

6Mostrar los movimientos realizados en el año 2019.

7Listar el nombre y apellido de los clientes que tienen una cuenta en una sucursal de Donostia.

--
1. SELECT *
FROM sucursal
where provincia like 'Gipuzkoa';

2. SELECT *
FROM movimiento
where cantidad <0;

3. select ncuenta, saldo


from cuenta
where saldo between 100000 and 300000;
SALDO>=100000 AND SALDO<=300000

4. SELECT * FROM CLIENTES WHERE NOMBRE LIKE '%l'

5. select c.ncuenta
from cuenta C inner join sucursal S on C.nsucursal=S.nsucursal
where provincia != 'Bizkaia';

6. Select *
from movimiento
where year(fecha)=2019;

7. select nombre, apellido


from (cliente C inner join cuenta Cu on C.DNI=Cu.DNI) inner join sucursal S on S.nsucursal=Cu.nsucursal
where poblacion = 'Donostia';

Para evitar filas duplicadas DISTINCT


select DISTINCT nombre, apellido
from (cliente C inner join cuenta Cu on C.DNI=Cu.DNI) inner join sucursal S on S.nsucursal=Cu.nsucursal
where poblacion = 'Donostia';

---

(supermercado)Integridad referencial

use Supermercado;

alter table empleados

add foreign key (IDseccion) references secciones(IDseccion)


on delete restrict on update cascade,
add foreign key (jefe) references empleados(IDemp)
on delete restrict on update cascade;

alter table telefonos


add foreign key (IDemp) references empleados(IDemp)
on delete restrict on update cascade;

alter table secciones


add foreign key (IDemp) references empleados(IDemp)
on delete restrict on update cascade;

alter table compras


add foreign key (IDemp) references cajeros(IDemp)
on delete restrict on update cascade,
add foreign key (IDcliente) references clientes(IDcliente)
on delete restrict on update cascade;

alter table descuentos


add foreign key (IDcompra) references compras(IDcompra)
on delete restrict on update cascade;

alter table contiene


add foreign key (IDcompra) references compras(IDcompra)
on delete restrict on update cascade,
add foreign key (IDproducto) references productos(IDproducto)
on delete restrict on update cascade;

alter table reponedores


add foreign key (IDemp) references empleados(IDemp)
on delete restrict on update cascade;

alter table reponen


add foreign key (IDemp) references reponedores(IDemp)
on delete restrict on update cascade,
add foreign key (IDproducto) references productos(IDproducto)
on delete restrict on update cascade;

alter table cajeros


add foreign key (IDemp) references empleados(IDemp)
on delete restrict on update cascade;

1. Creación y ejecución consultas (MIREN)

1. Mostrar el nombre de los empleados , su salario y el salario incrementado en 2%, de aquellos empleados que
trabajan en la sección de Pescadería

select empleados.nombre,salario , salario*1.02 'Salario incrementado'


from empleados inner join secciones on empleados.idseccion=secciones.idseccion
where secciones.nombre='Pescadería';
2. Mostar nombre y fecha de los clientes VIP que han realizado compras en online durante el mes de enero.

select nombre,fecha
from compras inner join clientes on compras.idcliente=clientes.idcliente
where VIP=1 and online=1 and month(fecha)=1;

3. Mostar el nombre de los clientes que han comprado algún producto que empiece por D. Mediante
SUBCONSULTAS

select nombre
from clientes
where idcliente IN (select idcliente
from compras
where idcompra In (select idcompra
from contiene
where idproducto In (select idproducto
from productos
where nombre like 'D%')));

4. Un compañero de trabajo ha encontrado descuentos de clientes pendientes de aplicar. Los quiere aplicar
ahora. Ejecuta las siguientes operaciones :

create table desc_pendientes like descuentos;

insert into desc_pendientes values (70111, 80001, 'Oferta Black Friday', 15);
insert into desc_pendientes values (70100, 80002, 'Promoción especial navidad', 20);
insert into desc_pendientes values (70104, 80003, 'Promoción especial electrónica', 20);
insert into desc_pendientes values (70103, 80004, 'Oferta Black Friday', 10);
insert into desc_pendientes values (70109, 80005, 'Oferta Black Friday', 10);
insert into desc_pendientes values (70110, 80006, 'Promoción especial navidad', 15);

y realiza la operación que falta para pasar los descuentos de esta tabla desc_pendientes a la tabla descuentos.

insert into descuentos select * from desc_pendientes;

5. Al querer realizar la siguiente operación en la base de datos, se han dado cuenta que falta el atributo plus en
los cajeros. Añade este atributo de tipo integer y a continuación realiza la operación siguiente:

alter table cajeros


add plus int;

A los cajeros que pertenecen a las secciones 10006 y 10005 el plus será 100 y al resto de los cajeros 50.

update cajeros
set plus=100
where idemp In (select idemp
from empleados
where idseccion In(10006,10005));

update cajeros
set plus=50
where idemp In (select idemp
from empleados
where idseccion NOT IN (10006,10005));

6. Se quiere mostrar la suma total gastada en las compras realizada por el cliente cuyo nombre es Sergio pero
su apellido no se sabe.

select idcliente,sum(total)
from compras i
where idcliente IN (select idcliente
from clientes
where nombre like 'Sergio%');
7. Se está haciendo un estudio y se quiere saber cuántas veces ha sido comprado el producto Galletas Oreo.

select count(idproducto)
from contiene
where idproducto = (select idproducto
from productos
where nombre ='Galletas Oreo');

8. Mostrar una relación de los productos comprados en cada compra. Se mostrará el idcompra, idproducto,
nombre, precio, cantidad, precio total.

select idcompra, productos.idproducto, nombre, precio, cantidad, precio*cantidad


from productos inner join contiene on productos.idproducto=contiene.idproducto;

9. Se necesita un listado con el idcliente y nombre del cliente, de aquellos clientes que han realizado alguna
compra que no tienen descuento.

select distinct clientes.idcliente, nombre


from compras inner join clientes on compras.idcliente=clientes.idcliente
where idcompra not in (select idcompra
from descuentos);

10. Ha habido un error y los teléfonos del empleado Javier Pinto Dominguez son incorrectos. Se quiere
eliminarlos para poder introducir los teléfonos correctos.

delete from telefonos


where idemp = (select idemp
from empleados
where nombre ='Javier Pinto Dominguez');

11. Se quiere saber el número de trabajadores que trabaja en cada sección.

Select count(*) 'Cantidad empleados', s.nombre 'Nombre Seccion'


From empleados e inner join secciones s on e.IDseccion = s.IDseccion
Group by s.idseccion;

12. Se trata de conocer la media de los salarios de los trabajadores que trabaja en cada una de las secciones
que comienzan con P '.

select avg(e.salario)'Salario medio' , s.nombre 'Nombre Seccion'


From empleados e inner join secciones s on e.IDseccion = s.IDseccion
where s.nombre like 'P%'
Group by s.idseccion;

13. Se trata de conocer la media de los salarios de los trabajadores que trabajan en cada una de las secciones
que comienzan con P 'y ganan más de 1000 €.

select avg(e.salario)'Salario medio' , s.nombre 'Nombre Seccion'


From empleados e inner join secciones s on e.IDseccion = s.IDseccion
where s.nombre like 'P%'and s.ventas>1000
Group by s.idseccion;

14. Se trata de conocer la media de los salarios de los trabajadores que trabajan en cada una de las secciones
que comienzan con P 'y ganan más de 1000 €. Sólo aparecerán secciones medias de salarios superiores a
1100.
select avg(e.salario)'Salario medio' , s.nombre 'Nombre Seccion'
From empleados e inner join secciones s on e.IDseccion = s.IDseccion
where s.nombre like 'P%'and s.ventas>1000
Group by s.idseccion
having avg(e.salario)>1100;

También podría gustarte