Está en la página 1de 20

ÁLGEBRA

CALCULO
SQL
/*1- Obtener el nombre de los conductores con categoría 15.
2- Obtener la descripción de los proyectos en los que se haya realizado trabajos durente los
días 11 al 15 de septiembre de 2002.
3- Obtener el nombre de los conductores que hayan trabajado con una hormigonera
ordenados descendentemente.
4- Obtener el nombre de los conductores que hayan trabajado con una hormigonera en
proyectos de Arganda.
5- Obtener el nombre de los conductores y descripción del proyecto para aquellos
conductores que hayan trabajado con una hormigonera en proyectos de Arganda durante
los días 12 al 17 de septiembre.
6- Obtener los conductores que trabajan en los proyectos de José Pérez.
7- Obtener el nombre y la localidad de los conductores que NO trabajan en los proyectos de
José Pérez.
8- Obtener todos los datos de los proyectos realizados en Rivas o que sean de un cliente
llamado José
9- Obtener los conductores que habiendo trabajado en algún proyecto figuren sin horas
trabajadas.
10- Obtener los empleados que tengan como apellido Pérez y hayan trabajado en proyectos
de localidades diferentes a las suyas.
11- Obtener el nombre de los conductores y la localidad del proyecto para aquellos
conductores que hayan trabajado con máquinas con precio entre 10000 y 15000pesetas.
12- Obtener el nombre y la localidad de los conductores y la localidad del proyecto para
aquellos proyectos que sean de Rivas y en los que no se haya utilizado una máquina de tipo
excavadora o una máquina de tipo hormigonera.
13- Obtener todos los datos de los proyectos y para aquellos proyectos realizados el día 15
de Septiembre, además incluir el nombre y la localidad de los conductores que hayan
trabajado en dichos proyectos. 14- Obtener el nombre de los conductores y el nombre y
localidad de los clientes, en los que se haya utilizado la maquina con precio hora más
elevado.
15- Obtener todos los datos de los proyectos que siempre han utilizado la máquina de
precio más bajo.
16- Obtener los proyectos en los que haya trabajado el conductor de categoría más alta
menos dos puntos, con la máquina de precio hora más baja.
17- Obtener por cada uno de los clientes el tiempo total empleado en sus proyectos.
18- Obtener por cada uno de los proyectos existentes en la bd, la descripción del proyecto,
el cliente y el total a facturar en pesetas y en euros, ordenar por cliente.
19- Obtener para el proyecto que mas se vaya a facturar la descripción del proyecto, el
cliente y el total a facturar en pesetas y en euros. 20- Obtener los conductores que hayan
trabajado en todos los proyectos de Arganda. 21- Obtener el tiempo máximo dedicado a
cada proyecto para aquellos proyectos en los que

haya participado más de un conductor diferente


22- Obtener el nro de partes de trabajo, código del proyecto, descripción y cliente para
aquel proyecto que figure con más partes de trabajo.
23- Obtener la localidad de los conductores que hayan participado en más de dos
proyectos.
24- Subir el precio por hora un 10% del precio mas bajo para todas las maquinas excepto
aquella que tenga del valor mas alto.
25- Subir la categoría un 15% a los conductires que no hayan trabajado con volquete y
hayan trabajado en mas de un proyecto diferente.
*/
/*1*/
SELECT nombre FROM Conductores
WHERE Categ = 15

/*2*/
SELECT Descrip FROM Proyectos
WHERE CodP IN
(
SELECT CodP FROM Trabajos
WHERE Fecha BETWEEN '2002-09-11' AND '2002-09-15'
)

/*3*/
SELECT nombre FROM Conductores
WHERE CodC IN
(
SELECT CodC FROM Trabajos
WHERE CodM IN
(
SELECT CodM FROM Maquinas
WHERE Nombre = 'Hormigonera'
)
)
ORDER BY Nombre desc

/*4*/
SELECT Nombre FROM Conductores
WHERE CodC IN
(
SELECT CodC FROM Trabajos
WHERE CodM IN
(
SELECT CodM FROM Maquinas
WHERE Nombre='Hormigonera'
)
AND CodP IN
(
SELECT CodP FROM Proyectos
WHERE Localidad='Arganda'
)
)
/*5*/
SELECT c.Nombre, p.Descrip
FROM Conductores c, Proyectos p, Trabajos t
WHERE c.CodC IN
(
SELECT CodC FROM Trabajos
WHERE CodM IN
(
SELECT CodM FROM Maquinas
WHERE Nombre='Hormigonera'
AND Fecha BETWEEN '2002-09-12'
AND '2002-09-17'
AND CodP IN
(
SELECT CodP FROM
Proyectos
WHERE
Localidad='Arganda'
)
)
)
AND t.CodC=c.CodC
AND t.CodP = p.CodP
/*6*/
SELECT CodC,Nombre FROM Conductores
WHERE CodC IN
(
SELECT CodC FROM Trabajos
WHERE CodP IN
(
SELECT CodP FROM Proyectos
WHERE Cliente = 'Jose Perez'
)
)

/*7
7- Obtener el nombre y la localidad de los conductores
que NO trabajan en los proyectos de José Pérez.
*/
SELECT Nombre, Localidad FROM Conductores
WHERE CodC IN
(
SELECT CodC FROM Trabajos
WHERE CodP NOT IN
(
SELECT CodP FROM Proyectos
WHERE Cliente = 'Jose Perez'
)
)

/*8-
Obtener todos los datos de los proyectos realizados en Rivas o
que sean de un cliente llamado José
*/
SELECT * FROM Proyectos
WHERE Localidad='Rivas'
OR Cliente LIKE 'Jose %'

/*
9- Obtener los conductores que habiendo trabajado en algún
proyecto figuren sin horas trabajadas.
*/
SELECT CodC FROM Trabajos
WHERE CodP IN
(
SELECT CodP FROM Proyectos
)
AND Tiempo IS NULL

/*
10- Obtener los empleados que tengan como apellido Pérez y hayan
trabajado en proyectos de localidades diferentes a las suyas.

COMO NO TENEMOS TABLA DE CLIENTES OBTENEMOS LOS


CONDUCTORES
QUE TRABAJARON EN PROYECTOS CON UN PEREZ Y QUE LA
LOCALIDAD ES
DISTINTA A LA SUYA
*/
SELECT DISTINCT t.CodC FROM Trabajos t
INNER JOIN Conductores c ON c.CodC=t.CodC
INNER JOIN Proyectos p ON p.CodP=t.CodP
WHERE c.Localidad!=p.Localidad
AND p.Cliente LIKE '%Perez'

/*
11- Obtener el nombre de los conductores y la localidad del
proyecto para aquellos conductores que hayan trabajado con
máquinas con precio entre 10000 y 15000pesetas.
*/
SELECT c.Nombre, p.Localidad FROM Conductores c,Proyectos p
WHERE c.CodC IN
(
SELECT CodC FROM Trabajos
WHERE CodM IN
(
SELECT CodM FROM Maquinas
WHERE PrecioHora IN
(
SELECT PrecioHora FROM
Maquinas
WHERE PrecioHora
BETWEEN 10000 AND 15000
)
)
)

/*
12- Obtener el nombre y la localidad de los conductores y la localidad
del proyecto para aquellos proyectos que sean de Rivas y en los que
no se haya utilizado una máquina de tipo excavadora o una máquina
de tipo hormigonera.
*/
SELECT c.Nombre, c.Localidad AS LocalidadConductor, p.Localidad AS LocalidadProyecto
FROM Conductores c, Proyectos p
WHERE p.CodP IN
(
SELECT CodP FROM Maquinas
WHERE CodP IN
(
SELECT CodP FROM Proyectos
WHERE Localidad = 'Rivas'
)
AND CodM IN
(
SELECT CodM FROM Maquinas
WHERE Nombre = 'Excavadora'
OR Nombre =
'Hormigonera'
)
)

/*
13- Obtener todos los datos de los proyectos y para aquellos proyectos
realizados el día 15 de Septiembre, además incluir el nombre y la
localidad de los conductores que hayan trabajado en dichos proyectos.
*/
SELECT p.*,c.Nombre,c.Localidad FROM Proyectos p, Conductores c, Trabajos t
WHERE p.CodP IN
(
SELECT CodP FROM Trabajos
WHERE Fecha = '2002/09/15'
)
AND p.CodP = t.CodP
AND c.CodC = t.CodC

/*
14- Obtener el nombre de los conductores y el nombre y localidad de
los clientes, en los que se haya utilizado la maquina con precio
hora más elevado.
*/
SELECT c.Nombre,p.Cliente, p.Localidad FROM Conductores c, Proyectos p , Trabajos t
WHERE t.CodM IN
(
SELECT CodM FROM Maquinas
WHERE PrecioHora =
(
SELECT MAX(B.PrecioHora) FROM
(
SELECT DISTINCT CodM,PrecioHora FROM
Maquinas
WHERE CodM IN
(
SELECT DISTINCT CodM
FROM Trabajos
)
) AS B
)
)
AND t.CodC = c.CodC
AND t.CodP = p.CodP
/*
15- Obtener todos los datos de los proyectos que siempre han utilizado
la máquina de precio más bajo.
*/
SELECT * FROM Proyectos
WHERE CodP IN
(
SELECT CodP FROM Trabajos
WHERE CodM IN
(
SELECT CodM FROM Maquinas
WHERE PrecioHora =
(
SELECT MIN(B.PrecioHora) FROM
(
SELECT DISTINCT
CodM,PrecioHora FROM Maquinas
WHERE CodM IN
(
SELECT
DISTINCT CodM FROM Trabajos
)
) AS B
)
)
)

/*
16- Obtener los proyectos en los que haya trabajado el conductor de
categoría más alta menos dos puntos, con la máquina de precio hora más
baja.
*/
SELECT CodP FROM Trabajos
WHERE CodC IN
(
SELECT CodC FROM Conductores
WHERE Categ =
(
SELECT MAX(B.Categ) FROM
(
SELECT CodC, Categ FROM Conductores
) AS B
)
)
AND CodM IN
(
SELECT CodM FROM Maquinas
WHERE PrecioHora =
(
SELECT MIN(C.PrecioHora) FROM
(
SELECT CodM, PrecioHora FROM Maquinas
) AS C
)
)

/*
17- Obtener por cada uno de los clientes el tiempo total empleado
en sus proyectos.
*/
SELECT B.Cliente AS CLIENTE, SUM(B.Tiempo) AS TOTAL FROM
(
SELECT p.Cliente, t.Tiempo FROM Trabajos t, Proyectos p
WHERE t.CodP = p.CodP
) AS B
GROUP BY B.Cliente
/*
18- Obtener por cada uno de los proyectos existentes en la bd,
la descripción del proyecto, el cliente y el total a facturar
en pesetas y en euros, ordenar por cliente.
*/
SELECT B.CodP, SUM(B.TOTAL) AS TOTAL FROM
(
SELECT p.CodP, t.Tiempo*m.PrecioHora AS TOTAL FROM Proyectos p,
Trabajos t, Maquinas m
WHERE p.CodP=t.CodP AND m.CodM=t.CodM
) AS B
GROUP BY B.CodP

/*
19- Obtener para el proyecto que mas se vaya a facturar la
descripción del proyecto, el cliente y el total a facturar
en pesetas y en euros.
*/
SELECT C.*,p.Descrip,p.Cliente FROM
(
SELECT B.CodP, SUM(B.TOTAL) AS TOTAL FROM
(
SELECT p.CodP, t.Tiempo*m.PrecioHora AS TOTAL FROM
Proyectos p, Trabajos t, Maquinas m
WHERE p.CodP=t.CodP AND m.CodM=t.CodM
) AS B
GROUP BY B.CodP
) AS C , Proyectos p
WHERE C.TOTAL =
(
SELECT MAX(D.TOTAL) FROM
(
SELECT B.CodP, SUM(B.TOTAL) AS TOTAL
FROM
(
SELECT p.CodP,
t.Tiempo*m.PrecioHora AS TOTAL FROM Proyectos p, Trabajos t, Maquinas m
WHERE p.CodP=t.CodP
AND m.CodM=t.CodM
) AS B
GROUP BY B.CodP
) AS D
)
AND C.CodP = p.CodP
/*
20- Obtener los conductores que hayan
trabajado en todos los proyectos de Arganda.
*/
SELECT DISTINCT CodC FROM Trabajos
WHERE CodP IN
(
SELECT CodP FROM Proyectos
WHERE Localidad = 'Arganda'
)

/*
21- Obtener el tiempo máximo dedicado a cada proyecto para
aquellos proyectos en los que haya participado más de un
conductor diferente

*/
SELECT t.CodP,SUM(t.Tiempo) AS TiempoTotal FROM Trabajos t
WHERE t.CodP IN
(
SELECT B.CodP FROM
(
SELECT A.CodP, COUNT(DISTINCT A.CodC) AS TotalC FROM
(
SELECT CodC,CodP FROM Trabajos
) AS A
GROUP BY A.CodP
) AS B
WHERE B.TotalC > 1
)
GROUP BY t.CodP

/*
22- Obtener el nro de partes de trabajo, código del proyecto,
descripción y cliente para aquel proyecto que figure con
más partes de trabajo.
*/
SELECT B.CodP,p.Descrip,p.Cliente FROM
(
SELECT CodP, COUNT(CodM) AS Cant_PY FROM Trabajos
GROUP BY CodP
) AS B, Proyectos p
WHERE B.Cant_PY =
(
SELECT MAX(A.Cant_PY) AS TOTAL FROM
(
SELECT CodP, COUNT(CodM) AS Cant_PY FROM Trabajos
GROUP BY CodP
) AS A
)
AND B.CodP = p.CodP
/*
23- Obtener la localidad de los conductores que hayan participado
en más de dos proyectos.
*/
SELECT CodC,Localidad FROM Conductores
WHERE CodC IN
(
SELECT A.CodC FROM
(
SELECT CodC, COUNT(DISTINCT CodP) AS PYs FROM Trabajos
GROUP BY CodC
) AS A
WHERE A.PYs>2
)

/*
24- Subir el precio por hora un 10% del precio mas bajo para todas
las maquinas excepto aquella que tenga del valor mas alto.
*/
UPDATE Maquinas
SET PrecioHora = PrecioHora*1.10
WHERE CodM IN
(
SELECT CodM FROM Maquinas
WHERE PrecioHora !=
(
SELECT MAX(PrecioHora) FROM Maquinas
)
)

/*
25- Subir la categoría un 15% a los conductires que no hayan trabajado
con volquete y hayan trabajado en mas de un proyecto diferente.
*/
UPDATE Conductores
SET Categ=Categ*1.15
WHERE CodC IN
(
SELECT DISTINCT CodC FROM Trabajos
WHERE CodM IN
(
SELECT CodM FROM Maquinas
WHERE Nombre != 'Volquete'
)
AND CodC IN
(
SELECT A.CodC FROM
(
SELECT CodC, COUNT(DISTINCT CodP) AS
PYs FROM Trabajos
GROUP BY CodC
) AS A
WHERE A.PYs>1
)
)

UPDATE Conductores
SET Categ=Categ-Categ*0.15
WHERE CodC IN
(
SELECT DISTINCT CodC FROM Trabajos
WHERE CodM IN
(
SELECT CodM FROM Maquinas
WHERE Nombre != 'Volquete'
)
AND CodC IN
(
SELECT A.CodC FROM
(
SELECT CodC, COUNT(DISTINCT CodP) AS
PYs FROM Trabajos
GROUP BY CodC
) AS A
WHERE A.PYs>1
)
)

También podría gustarte