Documente Academic
Documente Profesional
Documente Cultură
Bases de Datos
# Asignatura: BSDT-090000552
Curso 2010/11
2 Prctica de Laboratorio
SQL con TOAD y Oracle para Bases de Datos Relacionales. Ejercicios con DDL, DML y QL
Curso 2010-11
Carmen Costilla
Noviembre-2010
http://sinbad.dit.upm.esPrcticaSQLenBDR:DDL,DMLyQLBSDT(5curso)
Nota Previa: Esta prctica, con total ubicuidad, se realiza de manera individual por el alumno en: el PC de su casa, su porttil, o un puesto del Laboratorio de Bases de Datos (previo aviso). Transcurrida una o dos semana de tutoras, se celebra una sesin conjunta de Laboratorio, para asentar las principales ideas de SQL en BDR durante unos 45 m. Marina Bayn, becaria del Laboratorio de Bases de Datos, se hace cargo de la operativa de los puestos de trabajo del Laboratorio.
SQL EN LA BDR: EMPLEADO-DEPARTAMENTO DEL USUARIO CARMEN DDL. Creacin de tablas: Tabla Departamento:
CREATE TABLE DEPARTAMENTO ( ID NUMBER(10) NOT NULL, NOMBRE VARCHAR2(50), LOCALIDAD VARCHAR2(50), PRESUPUESTO NUMBER(5,2), DIRECTOR_ID NUMBER(10) CONSTRAINT DEPARTAMENTO_PK PRIMARY KEY (ID) USING INDEX);
Tabla Empleado:
CREATE TABLE EMPLEADO ( ID NUMBER(10) NOT NULL, NOMBRE VARCHAR2(30), APELLIDOS VARCHAR2(60), DEPARTAMENTO_ID NUMBER(10), CARGO VARCHAR2(20), GRADO NUMBER(2) NOT NULL, JEFE_ID NUMBER(10), FECHA_ALTA DATE, SUELDO NUMBER(9,2), COMISION NUMBER(9,2), CONSTRAINT EMPLEADO_PK PRIMARY KEY (ID) USING INDEX);
DITETSITUPM
Por:CarmenCostilla,Curso201011
http://sinbad.dit.upm.esPrcticaSQLenBDR:DDL,DMLyQLBSDT(5curso)
Tabla Rango_Sueldo:
CREATE TABLE CARMEN.RANGO_SUELDO ( GRADO NUMBER(2) NOT NULL, SUELDO_MIN NUMBER(9,2), SUELDO_MAX NUMBER(9,2), CONSTRAINT RANGO_SUELDO_PK PRIMARY KEY (GRADO));
DITETSITUPM
Por:CarmenCostilla,Curso201011
http://sinbad.dit.upm.esPrcticaSQLenBDR:DDL,DMLyQLBSDT(5curso) Esquema de la BD CARMEN y su grafo de joins RANGO_SUELDO (Grado, Sueldo_Min, Sueldo_Max) FK2 EMPLEADO (ID, Nombre, Apellidos, Departamento_ID, Cargo, Grado, Jefe_ID, Fecha_Alta, Sueldo, Comisin) FK3 FK1 FK1 DEPARTAMENTO (ID, Nombre, Localidad, Presupuesto, Director_ID) DML. Insercin de datos: Inserciones en la Tabla Rango_Sueldo:
INSERT INTO RANGO_SUELDO VALUES (1, 700, 1200); INSERT INTO RANGO_SUELDO VALUES (2, 1201, 1400); INSERT INTO RANGO_SUELDO VALUES (3, 1401, 2000); INSERT INTO RANGO_SUELDO VALUES (4, 2001, 2500); INSERT INTO RANGO_SUELDO VALUES (5, 2501, 3999); commit; (GRADO, SUELDO_MIN, SUELDO_MAX) (GRADO, SUELDO_MIN, SUELDO_MAX) (GRADO, SUELDO_MIN, SUELDO_MAX) (GRADO, SUELDO_MIN, SUELDO_MAX) (GRADO, SUELDO_MIN, SUELDO_MAX)
INSERT INTO DEPARTAMENTO (ID, NOMBRE, LOCALIDAD, PRESUPUESTO, DIRECTOR_ID) VALUES (4, 'PRODUCCION', 'VALENCIA', '90000,55', null); commit;
DITETSITUPM
Por:CarmenCostilla,Curso201011
http://sinbad.dit.upm.esPrcticaSQLenBDR:DDL,DMLyQLBSDT(5curso)
TO_Date('17/11/1991', 'DD/MM/YYYY'), 3500, 25); INSERT INTO EMPLEADO (ID, NOMBRE, APELLIDOS, DEPARTAMENTO_ID, CARGO, JEFE_ID, FECHA_ALTA,SUELDO, COMISION) VALUES (4, 'ESTHER', 'PEA MATA', 1,'DIRECTORA', 5, 6, TO_Date('01/05/1991', 'DD/MM/YYYY'), 2850, 5); INSERT INTO EMPLEADO (ID, NOMBRE, APELLIDOS, DEPARTAMENTO_ID, CARGO, JEFE_ID, FECHA_ALTA,SUELDO, COMISION) VALUES (5,'DANIEL', 'LOPEZ LIRON', 2, 'DIRECTOR', 4, 4, TO_Date('29/06/1992', 'DD/MM/YYYY'), 2500, 25); INSERT INTO EMPLEADO (ID, NOMBRE, APELLIDOS, DEPARTAMENTO_ID, CARGO, JEFE_ID, FECHA_ALTA,SUELDO, COMISION) VALUES (1, 'CARLOS', 'ALONSO GARCIA', 2,'COMERCIAL', 1, 5, TO_Date('20/02/2010','DD/MM/YYYY'), 1100, 15); INSERT INTO EMPLEADO (ID, NOMBRE, APELLIDOS, DEPARTAMENTO_ID, CARGO, JEFE_ID, FECHA_ALTA,SUELDO, COMISION) VALUES (2, 'ANDRES', 'CREMADES MOLINERO', 1,'DIRECTOR',5, 6, TO_Date('22/02/1998','DD/MM/YYYY'), 3990, 10); INSERT INTO EMPLEADO (ID, NOMBRE, APELLIDOS, DEPARTAMENTO_ID, CARGO, JEFE_ID, FECHA_ALTA,SUELDO, COMISION) VALUES (3, 'RAUL', 'FERNANDEZ HERRANZ', 1,'DIRECTOR',5, 6, TO_Date('22/02/1998', 'DD/MM/YYYY'), 3990, 20); INSERT INTO EMPLEADO (ID, NOMBRE, APELLIDOS, DEPARTAMENTO_ID, CARGO, JEFE_ID, FECHA_ALTA,SUELDO, COMISION) VALUES (7, 'JOAQUIN', 'CALLEJA ARCAZ', 1,'DIRECTOR',5, 6, TO_Date( '22/02/1998', 'DD/MM/YYYY'), 3990, 25); commit; Grado,
Grado,
Grado,
Grado,
Grado,
Grado,
4. Obtener todos los datos del empleado con apellido Lpez o Pea
SELECT * FROM EMPLEADO WHERE APELLIDOS LIKE 'LOPEZ%' OR APELLIDOS LIKE 'PEA%';
5. Obtener los datos del empleado que trabaja en el departamento de tecnologas de la informacin.
SELECT * FROM EMPLEADO EMP, DEPARTAMENTO DEP WHERE EMP.DEPARTAMENTO_ID = DEP.ID
DITETSITUPM
Por:CarmenCostilla,Curso201011
http://sinbad.dit.upm.esPrcticaSQLenBDR:DDL,DMLyQLBSDT(5curso)
AND DEP.NOMBRE = 'TECNOLOGAS DE LA INFORMACION';
10. Mostrar el nombre, apellidos, que tiene jefe, y su comisin es superior a 150 .
SELECT NOMBRE, APELLIDOS, SUELDO, COMISION FROM EMPLEADO WHERE (JEFE_ID IS NOT NULL) AND (COMISION > 150);
11. Obtener el nombre, sueldo y sueldo anual del empleado cuyo sueldo anual es mayor que 12.000.
SELECT NOMBRE, SUELDO, 12*SUELDO "SUELDO ANUAL" FROM EMPLEADO WHERE (12*SUELDO) > 12000;
DITETSITUPM
Por:CarmenCostilla,Curso201011
http://sinbad.dit.upm.esPrcticaSQLenBDR:DDL,DMLyQLBSDT(5curso)
13. Obtener los empleados que no ejercen de comercial y sus nombres tienen la letra N.
SELECT NOMBRE, CARGO FROM EMPLEADO WHERE (CARGO <> 'COMERCIAL') AND (NOMBRE LIKE '%N%');
14. De los empleados que tienen comisin, obtener el nombre, sueldo y comisin, ordenados por sueldo de mayor a menor.
SELECT NOMBRE, SUELDO, COMISION FROM EMPLEADO WHERE COMISION IS NOT NULL ORDER BY SUELDO DESC;
o tambin:
SELECT APELLIDOS, NOMBRE FROM EMPLEADO ORDER BY APELLIDOS ASC, NOMBRE ASC;
16. Obtener el nombre, sueldo anual y fecha de alta de los empleados que no tienen comisin, ordenados por fecha de alta en la empresa.
SELECT NOMBRE, 12*SUELDO "SUELDO ANUAL", FECHA_ALTA FROM EMPLEADO WHERE COMISION IS NULL ORDER BY FECHA_ALTA;
17. Mostrar el nombre y sueldo de los empleados incrementados en un 10% y ordenados por nombre y apellidos.
SELECT NOMBRE, SUELDO, 1.1*SUELDO "SUELDO + 10%" FROM EMPLEADO ORDER BY NOMBRE, APELLIDOS;
18. Mostrar el nombre y fecha de alta de cada empleado, ordenado por fecha de entrada como sigue:
DITETSITUPM
Por:CarmenCostilla,Curso201011
http://sinbad.dit.upm.esPrcticaSQLenBDR:DDL,DMLyQLBSDT(5curso) Fecha de entrada (como ttulo) Carlos Alonso Garca empez a trabajar el 20 de febrero de 2010
SELECT INITCAP(LOWER(NOMBRE))||' '||INITCAP(LOWER(APELLIDOS))||' empez a trabajar el '|| TO_CHAR(FECHA_ALTA, 'fmDD "de "')|| TO_CHAR(FECHA_ALTA, 'fmmonth "de" YYYY') "Fecha de entrada" FROM EMPLEADO ORDER BY FECHA_ALTA;
19. Obtener el nombre de los comerciales, la comisin, el sueldo mensual y el sueldo incrementado como sigue: si la comisin es menor que 50 , aumentar un 25%; y si es igual o superior, aumentar un 12%.
SELECT NOMBRE, COMISION, SUELDO, DECODE(TRUNC(COMISION/50), 0, 1.25, 1.12)*SUELDO FROM EMPLEADO WHERE COMISION IS NOT NULL AND CARGO = 'COMERCIAL'; -- DECODE funciona como un CASE
21. Mostrar el nombre de los departamentos cuyos empleados tienen comisin o su sueldo anual es superior a 18.000 .
SELECT DEP.NOMBRE "Departamento", EMP.NOMBRE "Empleado", EMP.SUELDO*12 "Sueldo anual", EMP.COMISION "Comisin" FROM DEPARTAMENTO DEP, EMPLEADO EMP WHERE (DEP.ID = EMP.DEPARTAMENTO_ID) AND ((EMP.COMISION IS NOT NULL) OR (EMP.SUELDO*12 > 18000));
DITETSITUPM
Por:CarmenCostilla,Curso201011
http://sinbad.dit.upm.esPrcticaSQLenBDR:DDL,DMLyQLBSDT(5curso)
24. Calcular la comisin media de los empleados, excluyendo al presidente y suponiendo que todos los empleados cobran al menos una comisin de o .
SELECT AVG(NVL(COMISION, 0)) FROM EMPLEADO WHERE CARGO <> 'PRESIDENTE';
25. Calcular el sueldo mximo de los empleados de cada departamento siempre que el mnimo sueldo del departamento sea superior a 780 .
SELECT DEP.NOMBRE "DEPARTAMENTO", MAX(EMP.SUELDO) FROM DEPARTAMENTO DEP, EMPLEADO EMP WHERE DEP.ID = EMP.DEPARTAMENTO_ID GROUP BY DEP.NOMBRE HAVING MIN(SUELDO) > 780;
26. Mostrar el nombre y fecha de entrada de todos los empleados que trabajan en el mismo departamento que ESTHER.
SELECT NOMBRE, FECHA_ALTA FROM EMPLEADO WHERE DEPARTAMENTO_ID IN ( SELECT DEPARTAMENTO_ID FROM EMPLEADO WHERE NOMBRE= 'ESTHER');
DITETSITUPM
Por:CarmenCostilla,Curso201011