Está en la página 1de 4

Tablas EMPLE y DEPART (BD McGraw):

1. Crea una tabla llamada EMPLEADOS con la misma estructura que la tabla EMPLE sin clave
primaria ni claves foráneas.

CREATE TABLE Empleados(

EMP_NO DECIMAL(4),

APELLIDO VARCHAR(10),

OFICIO VARCHAR(10),

DIR NUMERIC(4),

FECHA_ALT DATE,

SALARIO NUMERIC(7),

COMISION NUMERIC(7),

DEPT_NO NUMERIC(2)

);

2. Añade a la tabla EMPLEADOS los campos NOMBRE, FECHANAC y CIUDAD con los tipos de
datos adecuados.

ALTER TABLE EMPLEADOS

ADD COLUMN NOMBRE VARCHAR(20)

ALTER TABLE EMPLEADOS

ADD COLUMN FECHANAC DATE

ALTER TABLE EMPLEADOS

ADD COLUMN CIUDAD VARCHAR(25)

3. Añade la clave primaria a la tabla DEPART y las claves primarias y foráneas a la tabla EMPLE
referenciando a las tablas DEPART y la propia EMPLE.

ALTER TABLE depart ADD PRIMARY KEY(dept_no)

ALTER TABLE emple ADD PRIMARY KEY(emp_no)

ALTER TABLE depart ADD FOREIGN KEY (emp_no) REFERENCES emple(EMP_NO)

ALTER TABLE emple ADD FOREIGN KEY (dept_no) REFERENCES depart(dept_no)

4. Obtener todos los datos de los empleados de los departamentos 10 y 20.

SELECT * FROM emple WHERE dept_no IN(10,20)


5. Obtener apellido, salario y oficio de los empleados con salario comprendido entre 2000 y
2500 que no tengan comisión.

SELECT apellido,salario,oficio FROM emple WHERE (salario BETWEEN 2000 AND 2500) AND
comision IS NULL

6. Obtener los nombres de los departamentos que no tengan ningún empleado.

SELECT dnombre FROM depart WHERE dept_no NOT IN

(SELECT dept_no FROM emple)

7. Obtener nombre del departamento, localidad y número de empleados del mismo para todos
los departamentos (se incluyen los departamentos que no tengan ningún empleado).

SELECT depart.dnombre,depart.loc, COUNT(emple.dept_no) FROM depart

LEFT JOIN emple ON depart.dept_no=emple.dept_no GROUP BY emple.dept_no

8. Obtener el apellido del empleado, su oficio, salario y nombre de su director para aquellos
empleados dados de alta en el año 1990.

9. Obtener todos los datos de los empleados del departamento de ventas que cuyo apellido
empiece por ‘A’.

SELECT * FROM emple WHERE apellido LIKE "A%" AND dept_no IN (SELECT dept_no FROM
depart WHERE dnombre='VENTAS')

10.Obtener nombre del departamento, localidad y el salario medio en cada departamento.

SELECT depart.dnombre, depart.loc, AVG(emple.salario) FROM depart JOIN emple ON


depart.dept_no=emple.dept_no GROUP BY emple.dept_no

Base de datos Jardinería:

11.Obtener una relación de los clientes que han hecho más de 5 pedidos en la que aparezcan
su nombre, ciudad y el número de pedidos realizados.

SELECT clientes.nombrecliente,clientes.ciudad, COUNT(pedidos.codigocliente) AS


NumeroPedidos FROM clientes JOIN pedidos ON
clientes.codigocliente=pedidos.CodigoCliente

GROUP BY pedidos.codigocliente HAVING COUNT(pedidos.codigocliente)>5;

12.Obtener una relación con el número de pedido, la fecha y el importe total del mismo.

SELECT T.*,pedidos.fechapedido FROM (SELECT codigopedido,SUM(cantidad*preciounidad)


AS Importepedido FROM detallepedidos GROUP BY codigopedido) AS T

JOIN pedidos ON pedidos.codigopedido=T.codigopedido;


13.Obtener el código y nombre de los productos con más y con menos unidades en stock.

SELECT nombre,codigoproducto,cantidadenstock FROM productos WHERE

cantidadenstock=(SELECT MAX(cantidadenstock) FROM productos) OR


cantidadenstock=(SELECT MIN(cantidadenstock) FROM productos)

14.Obtener una relación con todos sus datos de las oficinas que tengan menos de 10
empleados.

SELECT oficinas.codigooficina,COUNT(empleados.codigooficina) FROM oficinas JOIN


empleados ON oficinas.codigooficina=empleados.codigooficina

GROUP BY empleados.codigooficina HAVING COUNT(empleados.CodigoOficina)<10;

15.Obtener los nombres de los clientes a los que se les ha entregado algún pedido antes de la
fecha prevista de entrega.

SELECT DISTINCT clientes.nombrecliente, clientes.codigocliente FROM clientes JOIN

(SELECT codigocliente FROM pedidos WHERE fechaesperada>fechaentrega) AS T ON


T.codigocliente=clientes.codigocliente;

16.¿A cuánto asciende el pedido de mayor importe?

SELECT MAX(M.importepedido) FROM ( SELECT T.*,pedidos.fechapedido FROM (SELECT


codigopedido,SUM(cantidad*preciounidad) AS Importepedido FROM detallepedidos GROUP
BY codigopedido) AS T

JOIN pedidos ON pedidos.codigopedido=T.codigopedido) AS M;

17.Obtener las parejas de clientes (sólo el nombre) que tienen el mismo límite de crédito.

SELECT clientes.nombrecliente, T.nombrecliente FROM ((SELECT


nombrecliente,limitecredito,codigocliente FROM clientes) AS T

JOIN clientes ON clientes.limitecredito=T.limitecredito AND


clientes.codigocliente<>T.codigocliente)

18.Obtener el nombre del cliente, la ciudad y el total pagado de los clientes que han pagado
más de 1000 € a la empresa entre los años 2000 y 2001.

SELECT clientes.nombrecliente FROM clientes JOIN

(SELECT T.codigocliente, SUM(T.cantidad) FROM

(SELECT * FROM pagos WHERE YEAR(fechapago) BETWEEN '2000' AND '2001') AS T

GROUP BY T.codigocliente HAVING SUM(T.cantidad)>1000) AS M ON


clientes.codigocliente=M.codigocliente
19.Obtener el total facturado por la empresa en el año 2000.

SELECT SUM(cantidad) FROM pagos WHERE YEAR(fechapago)='2000'

20.Obtener una relación de empleados que representen a más de dos clientes.

SELECT clientes.codigoempleadorepventas, empleados.nombre,


COUNT(clientes.codigoempleadorepventas) FROM clientes

JOIN empleados ON clientes.codigoempleadorepventas=empleados.codigoempleado


GROUP BY empleados.CodigoEmpleado

HAVING COUNT(empleados.codigoempleado)>2;

Valoración:

● Cada pregunta vale 0,5 puntos

También podría gustarte