Ex Amen Based A To Ayuda

Descargar como odt, pdf o txt
Descargar como odt, pdf o txt
Está en la página 1de 18

UD04:

 
Ejercicios 
1)  Crea una sentencia que seleccione todos los datos de la tabla empleados. 
SELECT * FROM EMPLEADOS 
2) Crea una sentencia que devuelva los valores de la tabla empleados ordenados por DNI. 
SELECT *  
FROM EMPLEADOS 
ORDER BY DNI; 
3) Crea una sentencia que seleccione todos los datos de la tabla EMPLEADOS y los devuelva
ordenados por el código postal (de forma descendente) y el DNI(de forma ascendente). 
SELECT *  
FROM EMPLEADOS 
ORDER BY COD_POSTAL DESC, DNI ASC; 
4) Selecciona el DNI, nombre y apellidos de los empleados que tengan un salario superior a 1800. 
SELECT *  
FROM EMPLEADOS 
WHERE SALARIO > 1800; 
5) Utilizando la tabla empleados. Dime el salario medio de los empleados 
SELECT AVG(SALARIO) 
FROM EMPLEADOS; 
6) Utilizando la tabla empleados. Dime el salario medio de los empleados por sexo (hombres,
mujeres) 
SELECT SEXO, AVG(SALARIO) 
FROM EMPLEADOS 
GROUP BY SEXO; 
7) Utilizando la tabla empleados. Dime que se gasta la empresa en salarios al mes. 
SELECT SUM(SALARIO) 
FROM EMPLEADOS 
8) Utilizando la tabla empleados. Dime que se gastaría la empresa en salarios si lo aumentaremos
un 10% 
SELECT SUM(SALARIO)*1.1 
FROM EMPLEADOS; 
 
9) Utilizando la tabla empleados. Selecciona el DNI, nombre, apellidos, salario y el salario
incrementando un 10% para saber en cuanto se quedaría el salario de cada trabajador. Ordénalo por
salario de forma descendente. 
SELECT DNI, NOMBRE, APELLIDO1, APELLIDO2, SALARIO, SALARIO*1.1 AS
SALARIO_INC 
FROM EMPLEADOS 
ORDER BY SALARIO DESC; 
10) Selecciona el nombre, apellido1 y apellido2 de la tabla empleados en una sola columna y
renómbrala como NOMBRE_COMPLETO 
SELECT NOMBRE||' '|| APELLIDO1||' '||APELLIDO2 AS NOMBRE_COMPLETO 
FROM EMPLEADOS; 
 
SELECT CONCAT(NOMBRE,(CONCAT(' ',(CONCAT(APELLIDO1,(CONCAT('
',APELLIDO2))))))) AS NOMBRE_COMPLETO 
FROM EMPLEADOS; 
11) Selecciona el DNI y la dirección1 de todos los empleados. En aquellos que encuentres el valor
nulo sustitúyelo por “NO DISPONIBLE”. 
SELECT DNI,NVL(DIRECC1, 'NO DISPONIBLE') 
FROM EMPLEADOS; 
12) Selecciona aquellos empleados cuyo DNI empiece por 48. 
SELECT * 
FROM EMPLEADOS 
WHERE DNI LIKE '48%'; 
13) Sabemos que uno de nuestros empleados vive en una calle o avenida que se llama ‘Mayor’,
devuelve todos los empleados cuya dirección sea una calle, avenida o cualquier tipo de via que
contenga esa palabra 
SELECT * 
FROM EMPLEADOS 
WHERE UPPER(DIRECC1) LIKE '%MAYOR%' 
    OR UPPER(DIRECC2) LIKE '%MAYOR%'; 
14) Usando la tabla empleados devuelve todos los datos de los empleados que tengan en la posición
4 de su DNI el valor 8. 
SELECT * 
FROM EMPLEADOS 
WHERE DNI LIKE '___8%'; 
15) Usando la tabla empleados. Selecciona aquellos empleados que tengas la dirección a nulo. 
SELECT * 
FROM EMPLEADOS 
WHERE DIRECC1 IS NULL 
AND DIRECC2 IS NULL; 
16)Usando la tabla empleados. Selecciona aquellos empleados nacidos entre el ‘01/01/1985’ y la
fecha actual 
SELECT * 
FROM EMPLEADOS 
WHERE FECHA_NAC >= '01-01-1985' 
AND FECHA_NAC <= SYSDATE; 
 
SELECT * 
FROM EMPLEADOS 
WHERE FECHA_NAC BETWEEN '01-01-1985'AND SYSDATE; 
17)Usando la tabla empleados. Selecciona aquellos empleados nacidos entre el ‘01/01/1985’ y el
‘01/01/1996’. Crea dos SELECT uno utilizando BETWEEN, otro sin él. 
SELECT * 
FROM EMPLEADOS 
WHERE FECHA_NAC >= '01-01-1985' 
AND FECHA_NAC <= '01-01-1996'; 
 
SELECT * 
FROM EMPLEADOS 
WHERE FECHA_NAC BETWEEN '01-01-1985'AND '01-01-1996'; 
 
18) Realiza una consulta donde obtengamos las universidades de Sevilla o Cádiz. 
SELECT * 
FROM UNIVERSIDADES 
WHERE UPPER(TRIM(CIUDAD)) IN ('SEVILLA', 'CÁDIZ', 'CADIZ'); 
 
MULTITABLA 
19) Realiza una consulta que muestre el número de alumnos que ha tenido cada uno de los centros
que tenemos en la tabla UNIVERSIDADES. 
SELECT E.UNIVERSIDAD,U.NOMBRE_UNIV, COUNT(*) AS NUM_ALUMNOS 
FROM ESTUDIOS E, UNIVERSIDADES U 
WHERE E.UNIVERSIDAD = U.COD_UNIV 
GROUP BY E.UNIVERSIDAD, U.NOMBRE_UNIV; 
 
SELECT U.NOMBRE_UNIV, COUNT(EMPLEADOS_DNI) 
FROM ESTUDIOS E, UNIVERSIDADES U 
WHERE E.UNIVERSIDAD = U.COD_UNIV 
GROUP BY U.NOMBRE_UNIV; 
 
20) Realiza una consulta donde obtengamos todos nombres de trabajos menos el de gerente. 
SELECT NOMBRE_TRAB 
FROM TRABAJOS 
WHERE UPPER(TRIM(NOMBRE_TRAB)) <> 'GERENTE' 
 
21) Realiza una consulta donde contemos el número de empleados que son mujeres. 
SELECT COUNT(*) AS NUM_MUJERES 
FROM EMPLEADOS 
WHERE SEXO='M'; 
 
22) Realiza una consulta donde obtengamos la media del salario mínimo y máximo de la tabla
TRABAJOS. 
SELECT AVG(SALARIO_MIN) AS MEDIA_MINIMO, AVG(SALARIO_MAX) AS
MEDIA_MAXIMO 
FROM TRABAJOS 
 
23) Realiza una consulta donde obtengamos el nombre de los empleados junto a su salario. 
SELECT NOMBRE, APELLIDO1, APELLIDO2, SALARIO 
FROM EMPLEADOS; 
 
SELECT E.NOMBRE, E.APELLIDO1, E.APELLIDO2, HS.SALARIO 
FROM EMPLEADOS E, HISTORIAL_SALARIAL HS 
WHERE E.DNI = HS.EMPLEADO_DNI 
AND HS.FECHA_FIN IS NULL; 
 
24) Realiza una consulta que indique el nombre del departamento que pertenece el empleado
‘94565478P’ 
SELECT D.NOMBRE_DPTO 
FROM DEPARTAMENTOS D, 
    HISTORIAL_LABORAL HL 
WHERE D.COD_DPTO =HL.COD_DPTO 
AND HL.DNI_EMPLEADO = '94565478P'; 
 
SELECT D.NOMBRE_DPTO 
FROM DEPARTAMENTOS D 
INNER JOIN  HISTORIAL_LABORAL HL 
ON D.COD_DPTO =HL.COD_DPTO 
WHERE HL.DNI_EMPLEADO = '94565478P'; 
 
SELECT D.NOMBRE_DPTO 
FROM DEPARTAMENTOS D 
INNER JOIN  HISTORIAL_LABORAL HL 
ON D.COD_DPTO =HL.COD_DPTO 
AND HL.DNI_EMPLEADO = '94565478P'; 
 
25) Realiza una consulta donde obtengamos de la tabla ESTUDIOS, DNI de los empleados
ordenados por Universidad descendente y año de manera ascendente. Muestra también, el nombre
de universidad obtenido de la tabla UNIVERSIDADES. 
SELECT E.EMPLEADO_DNI, E.UNIVERSIDAD, E.AÑO, U.NOMBRE_UNIV 
FROM ESTUDIOS E, UNIVERSIDADES U 
WHERE U.COD_UNIV = E.UNIVERSIDAD 
ORDER BY E.UNIVERSIDAD DESC, E.AÑO ASC; 
 
SELECT E.EMPLEADO_DNI, E.UNIVERSIDAD, E.AÑO, U.NOMBRE_UNIV 
FROM ESTUDIOS E 
INNER JOIN UNIVERSIDADES U 
ON U.COD_UNIV = E.UNIVERSIDAD 
ORDER BY E.UNIVERSIDAD DESC, E.AÑO ASC; 
 
26) Realiza una consulta que devuelva el dni, nombre, apellido1 y apellido2 del empleado y el dni
de su jefe directo. 
SELECT E.DNI, E.NOMBRE, E.APELLIDO1, E.APELLIDO2, HL.DNI_SUPERVISOR 
FROM EMPLEADOS E 
INNER JOIN HISTORIAL_LABORAL HL 
ON HL.DNI_EMPLEADO = E.DNI 
AND HL.FECHA_FIN IS NULL 
 
27) Realiza una consulta que devuelva el dni, nombre, apellido1 y apellido2 del empleado, el dni de
su jefe directo, el nombre, apellido1 y apellido2. 
SELECT E.DNI, E.NOMBRE, E.APELLIDO1, E.APELLIDO2, HL.DNI_SUPERVISOR,
E1.NOMBRE, E1.APELLIDO1, E1.APELLIDO2 
FROM EMPLEADOS E 
INNER JOIN HISTORIAL_LABORAL HL 
ON HL.DNI_EMPLEADO = E.DNI 
AND HL.FECHA_FIN IS NULL 
INNER JOIN EMPLEADOS E1 
ON E1.DNI=HL.DNI_SUPERVISOR 
 
28) Calcula el incremento de sueldo del empleado ‘41789456P’ en porcentaje desde sus inicios en
la empresa hasta ahora. Utiliza la tabla HISTORIAL_SALARIAL para ello. 
SELECT HL.EMPLEADO_DNI 
        ,HL.FECHA_COMIENZO 
        , HL.SALARIO 
        , ROUND((((HL.SALARIO*100)/HL2.SALARIO_MIN)-100),2) AS PORCENTAJE 
FROM HISTORIAL_SALARIAL HL 
INNER JOIN (SELECT HL1.EMPLEADO_DNI, MIN(HL1.SALARIO) SALARIO_MIN 
            FROM HISTORIAL_SALARIAL HL1 
            WHERE HL1.EMPLEADO_DNI='41789456P' 
            GROUP BY HL1.EMPLEADO_DNI)HL2 
    ON HL2.EMPLEADO_DNI=HL.EMPLEADO_DNI 
 
29) Indica todos los empleados que son ex alumnos de la UCAM mostrando sus nombres y
apellidos. Para ello debes servirte de las tablas ESTUDIOS, UNIVERSIDADES y EMPLEADOS. 
SELECT E.* 
FROM EMPLEADOS E 
INNER JOIN ESTUDIOS ES 
ON ES.EMPLEADO_DNI=E.DNI 
INNER JOIN UNIVERSIDADES U 
ON U.COD_UNIV =ES.UNIVERSIDAD 
AND U.NOMBRE_UNIV='UCAM' 
 
30) Realiza una consulta que muestre todas aquellas mujeres que tengan un sueldo mayor que la
media de los hombres en la empresa. 
SELECT E.* 
FROM EMPLEADOS E 
WHERE E.SALARIO > (SELECT AVG(E1.SALARIO) 
                    FROM EMPLEADOS E1 
                    WHERE E1.SEXO='H') 
AND SEXO ='M' 
 
31) Dime el número de empleados por departamento que hay en la empresa. 
SELECT HL.COD_DPTO, D.NOMBRE_DPTO, COUNT(*) AS NUM_EMPLEADOS 
FROM HISTORIAL_LABORAL HL 
INNER JOIN DEPARTAMENTOS D 
ON D.COD_DPTO = HL.COD_DPTO 
WHERE HL.FECHA_FIN IS NULL 
GROUP BY HL.COD_DPTO, D.NOMBRE_DPTO; 
 
 

------------------------------------------------------------------------------------------------------------------
1. Gestión de empleados 
 
En una empresa necesitamos realizar la gestión de empleados, asociando cada empleado a su
departamento correspondiente. Para ello necesitamos almacenar la información de empleado: 
• El código de empleado. 
• El dni del empleado. 
• El nombre del empleado. 
• El primer apellido. 
• El segundo apellido. 
• El departamento al que pertenece. 
 
En cuanto a los departamentos, necesitamos almacenar los datos de: 
• El código de departamento. 
• El nombre del departamento, de longitud máxima 100 caracteres. 
• El presupuesto del departamento. 
 
Crea las tablas dentro de tu base de datos Oracle. 
 
 
CREATE TABLE EMPLEADO( 
COD_EMPLEADO NUMBER(4), 
DNI VARCHAR2(9), 
NOMBRE VARCHAR2(20) NOT NULL, 
APELLIDO1 VARCHAR2(40) NOT NULL, 
APELLIDO2 VARCHAR2(40), 
COD_DEPARTAMENTO NUMBER(4), 
CONSTRAINT EMP_DNI_PK PRIMARY KEY(DNI), 
CONSTRAINT EMP_DEPART_FK FOREIGN KEY (COD_DEPARTAMENTO) REFERENCES
DEPARTAMENTO(COD_DEPARTAMENTO) 
); 
 
CREATE TABLE DEPARTAMENTO( 
COD_DEPARTAMENTO NUMBER(4), 
NOM_DEPARTAMENTO VARCHAR2(20)NOT NULL, 
PRESUPUESTO DECIMAL(17,2), 
CONSTRAINT DEP_COD_PK PRIMARY KEY (COD_DEPARTAMENTO), 
CONSTRAINT DEP_PRES_CK CHECK (PRESUPUESTO>0) 
); 
 
 
2. Gestión de ventas 
 
Necesitamos realizar la gestión de ventas en nuestra aplicación. Para ello debemos almacenar la
información en tablas de: nuestros comerciales, nuestros clientes y, los pedidos realizados por
dichos clientes a los comerciales. Cada comercial se encarga de tramitar varios pedidos, y cada
cliente también puede realizar pedidos. 
Los datos a almacenar de los comerciales son: 
• Identificador del comercial 
• Nombre del comercial 
• Apellido1 
• Apellido2 
• Ciudad 
• Comisión (valor con decimales) 
 
Los datos a almacenar de los clientes son: 
• Identificador de cliente 
• Nombre 
• Apellido1 
• Apellido2 
• Ciudad 
• Categoría (un número entero)  
 
Por último, los datos a almacenar de los pedidos son: 
• Id del pedido 
• Cantidad (número decimal) 
• Fecha en la que se realiza el pedido 
• El cliente que realiza el pedido 
• El comercial que tramita el pedido 
 
 
CREATE TABLE COMERCIAL( 
ID_COMERCIAL NUMBER(4), 
NOM_COMERCIAL VARCHAR2(20) NOT NULL, 
APELLIDO1 VARCHAR2(40) NOT NULL, 
APELLIDO2 VARCHAR2(40), 
CIUDAD VARCHAR2(20), 
COMISION DECIMAL(17,2) 
); 
ALTER TABLE COMERCIAL 
ADD CONSTRAINT COM_ID_PK PRIMARY KEY (ID_COMERCIAL); 
ALTER TABLE COMERCIAL  
ADD CONSTRAINT COM_COMISI_CK CHECK (COMISION>0); 
 
CREATE TABLE CLIENTE( 
ID_CLIENTE NUMBER(4), 
NOM_CLIENTE VARCHAR2(20) NOT NULL, 
APELLIDO1 VARCHAR2(40) NOT NULL, 
APELLIDO2 VARCHAR2(40), 
CIUDAD VARCHAR2(20), 
CATEGORIA NUMBER(2) 
); 
ALTER TABLE CLIENTE 
ADD CONSTRAINT CLI_ID_PK PRIMARY KEY (ID_CLIENTE); 
ALTER TABLE CLIENTE  
ADD CONSTRAINT CLI_COMISI_CK CHECK (CATEGORIA IN (1,2,3)); 
 
CREATE TABLE PEDIDOS( 
ID_PEDIDO NUMBER(8), 
CANTIDAD DECIMAL(10,2), 
FEC_PEDIDO DATE, 
ID_CLIENTE NUMBER(4), 
ID_COMERCIAL NUMBER(4), 
CONSTRAINT PED_ID_PK PRIMARY KEY(ID_PEDIDO), 
CONSTRAINT PED_IDCLI_FK FOREIGN KEY (ID_CLIENTE) REFERENCES
CLIENTE(ID_CLIENTE), 
CONSTRAINT PED_COMER_FK FOREIGN KEY (ID_COMERCIAL) REFERENCES
COMERCIAL(ID_COMERCIAL) 
); 
 
 
------------------------------------------------------------------------------------------------------------------
 
Tabla de EMPLEADOS 
EMPLEADOS 
COLUMNA  TIPO DE DATO  DESCRIPCIÓN 
NUMEMPLEADO  NUMBER(4)  Número del empleado 
NOMBRE  VARCHAR2(10)  Nombre del empleado 
APELLIDO  VARCHAR2(10)  Apellido del empleado 
OFICIO  VARCHAR2(10)  Oficio del empleado 
DIR  NUMBER(4)  Dirección del empleado 
FECALTA  DATE  Fecha de alta del empleado 
SALARIO  NUMBER(7)  Salario mensual del empleado 
COMISION  NUMBER(7)  Comisión del empleado 
NUMDEPARTAMENTO  NUMBER(2)  Número de departamento del empleado 
 
*Tenemos en cuenta que NUMEMPLEADO identifica de manera única los registros. 
**El campo salario no puede ser nulo. 
 
Tabla DEPARTAMENTOS 

DEPARTAMENTOS 
COLUMNA  TIPO DE DATO  DESCRIPCIÓN 
NUMDEPARTAMENTO  NUMBER(2)  Número del departamento 
NOMDEPARTAMENTO  VARCHAR(14)  Nombre del departamento 
LOC  VARCHAR(14)  Ciudad donde está el departamento 
 
 
1. Crea las tablas en la base de datos que se derivan de las tablas EMPLEADOS y
DEPARTAMENTO. 
 
CREATE TABLE EMPLEADO( 
NUMEMPLEADO NUMBER(4), 
NOMBRE VARCHAR2(10), 
APELLIDO VARCHAR2(10), 
OFICIO VARCHAR2(10), 
DIR NUMBER(4), 
FECALTA DATE, 
SALARIO NUMBER(7)NOT NULL, 
COMISION NUMBER(7), 
NUMDEPARTAMENTO NUMBER(2), 
CONSTRAINT EMP_NUME_PK PRIMARY KEY(NUMEMPLEADO) 
); 
 
CREATE TABLE DEPARTAMENTO( 
NUMDEPARTAMENTO NUMBER(2), 
NOMDEPARTAMENTO VARCHAR(14), 
LOC VARCHAR(14) 
); 
 
2. En la tabla EMPLEADOS realiza las siguientes modificaciones: 
1. Cambia el nombre del campo DIR a DIRECCION 
 
ALTER TABLE EMPLEADO 
RENAME COLUMN DIR TO DIRECCION; 
 
2. Cambia el tamaño de APELLIDO(20). 
 
ALTER TABLE EMPLEADO 
MODIFY APELLIDO VARCHAR2(20); 
 
3. Cambia el tipo de dato al campo DIRECCION por el que consideres oportuno(60). 
 
ALTER TABLE EMPLEADO 
MODIFY DIRECCION VARCHAR2(60); 
 
4. Inserta un nuevo campo DNI (con todo lo que eso implica). 
 
ALTER TABLE EMPLEADO 
ADD DNI VARCHAR2 (9) NOT NULL; 
 
ALTER TABLE EMPLEADO DROP CONSTRAINT EMP_NUM_PK; 
 
ALTER TABLE EMPLEADO ADD CONSTRAINT EMP_NUME_PK PRIMARY KEY (DNI); 
 
5. Añade un campo PAIS, teniendo en cuenta qué el programa solo se va a usar en España 
 
ALTER TABLE EMPLEADO 
ADD PAIS VARCHAR(20) DEFAULT 'ESPAÑA'; 
 
6. Añade un campo CIUDAD. 
 
ALTER TABLE EMPLEADO 
ADD CIUDAD VARCHAR(30); 
 
7. Modifica la fecha de alta para que tenga valor por defecto la fecha en la que se inserta el
registro. 
 
ALTER TABLE EMPLEADO 
MODIFY FECALTA DATE DEFAULT(SYSDATE); 
 
8. Ten en cuenta que el campo NUMDEPARTAMENTO, solo puede coger los valores que
encuentre en la tabla DEPARTAMENTO. 
 
ALTER TABLE DEPARTAMENTO 
ADD CONSTRAINT DEP_NUM_PK PRIMARY KEY (NUMDEPARTAMENTO); 
 
ALTER TABLE EMPLEADO 
ADD CONSTRAINT EMP_NUMD_FK FOREIGN KEY (NUMDEPARTAMENTO)
REFERENCES DEPARTAMENTO(NUMDEPARTAMENTO); 
 
9. Modifica los campos SALARIO y COMISION, teniendo en cuenta que pueden contener
decimales. 
 
ALTER TABLE EMPLEADO 
MODIFY (SALARIO NUMBER(7,2) 
        ,COMISION NUMBER(7,2)); 
 
 
3. En la tabla DEPARTAMENTO: 
1. Cambia el nombre del campo LOC por CIUDAD. 
 
ALTER TABLE DEPARTAMENTO 
RENAME COLUMN LOC TO CIUDAD; 
 
2. Añade un campo que contemple el código empleado del jefe de departamento. 
 
ALTER TABLE DEPARTAMENTO 
ADD NUMEMPLEADO NUMBER(4); 
 
ALTER TABLE EMPLEADO 
DROP CONSTRAINT EMP_NUME_PK; 
 
ALTER TABLE EMPLEADO 
ADD CONSTRAINT EMP_NUME_PK PRIMARY KEY(NUMEMPLEADO); 
 
ALTER TABLE DEPARTAMENTO 
ADD CONSTRAINT DEP_EMP_FK FOREIGN KEY (NUMEMPLEADO) REFERENCES
EMPLEADO(NUMEMPLEADO); 
 
ALTER TABLE EMPLEADO 
ADD CONSTRAINT EMP_DNI_UQ UNIQUE (DNI); 
 
 
 
4. Crea dos insert para cada una de las tablas , teniendo en cuenta los cambios anteriores. 
 
INSERT INTO DEPARTAMENTO VALUES(1,'INFORMÁTICA','MURCIA', null); 
INSERT INTO DEPARTAMENTO (NUMDEPARTAMENTO, NOMDEPARTAMENTO,
CIUDAD) 
    VALUES(2,'ADMIN','MURCIA'); 
     
INSERT INTO EMPLEADO VALUES(1,'Paco','Gallego', 'Analista','Cartagena', '10/02/2023',
35000, 3000, 1, '48484848A', 'ESPAÑA', 'CARTAGENA'); 
INSERT INTO EMPLEADO VALUES(2,'Luis','Totana', 'Analista','Murcia', '10/02/2023', 35000,
3000, 1, '49484848A', null, 'CARTAGENA'); 
INSERT INTO EMPLEADO (NUMEMPLEADO, NOMBRE, APELLIDO, OFICIO,
DIRECCION, FECALTA, SALARIO, COMISION, NUMDEPARTAMENTO, DNI, CIUDAD) 
VALUES(3,'Fernando','Fariña', 'Analista','Murcia', '10/02/2023', 35000, 3000, 1, '50484848A',
'CARTAGENA'); 
INSERT INTO EMPLEADO VALUES(4,'Fernando','Fariña', 'Analista','Murcia', '10/02/2023',
35000, 3000, 1, '51484848A','FRANCIA', 'PARIS'); 
 
INSERT INTO EMPLEADO VALUES(5,'Fernando','Fariña', 'Analista','Murcia', '10/02/2023',
35000, 3000, 1, '52484848A',default, 'PARIS'); 
 
5. Inserta los datos en las tablas correspondientes. 
 

EMPLEADO 
NUMEMPLEADO  NOMBRE  APELLIDO  OFICIO  DIRECCIÓN  FECALTA  SALARIO  C
7369  ISABEL  SANCHEZ  EMPLEADO  Av. Libertad  03/01/2009  1040  n
7499  MARÍA J  ARROYO  VENDEDOR  Calle laguna  02/11/2010  1500  3
7500  LUIS  SALA  VENDEDOR  Calle nº5  05/05/2015  1625  6
7501  REGINO  JIMENEZ  DIRECTOR  Calle n5  08/08/2008  1520  n
7502  MANUEL  MARTIN  VENDEDOR  Calle A  01/09/2015  1600  1
7505  PEDRO   NEGRO  DIRECTOR  Calle B  24/06/2000  3005  2
7051  MARTÍN  CEREZO  DIRECTOR  Calle C  15/03/2009  1790  3
7088  ANA  GIL  ANALISTA  Av.Rocamora  10/03/2010  3000  6
Av.Fernando
7839  RICARDO  REY  PRESIDENTE  06/08/1999  4000  1
Alonso 
288  SABEL  TOVAR  VENDEDOR  Calle Fortuna  08/09/2013  1350  0
7876  FERNANDO  ALONSO  EMPLEADO  Calle Ceutí  01/12/2018  1430  8
Calle
7900  CARLOS  JIMENO  EMPLEADO  15/09/2014  1335  9
Almoradí 
Calle Molina
1985  FELIPE  FERNANDEZ  ANALISTA  11/09/2016  3000  n
de Segura 
Av. Alto
7934  SOFIA  MUÑOZ  EMPLEADO  23/01/2012  1690  n
Atalayas 
 
 
 

DEPARTAMENTO 
NUMEMPLEADO JEFE
NUMDEPARTAMENTO  NOMDEPARTAMENTO  CIUDAD 
DPTO 
10  CONTABILIDAD  SEVILLA  7505 
20  INFORMATICA  MURCIA  7088 
30  ADMINISTRACION  MADRID  7051 
40  PRODUCCIÓN  BILBAO  1985 
50  ALMACEN  MURCIA  7501 
 
 
 
INSERT INTO DEPARTAMENTO VALUES(10,'CONTABILIDAD','SEVILLA',7505); 
INSERT INTO DEPARTAMENTO VALUES(20,'INFORMATICA','MURCIA',7088); 
INSERT INTO DEPARTAMENTO VALUES(30,'ADMINISTRACION','MADRID',7051); 
INSERT INTO DEPARTAMENTO VALUES(40,'PRODUCCIÓN','BILBAO',1985); 
INSERT INTO DEPARTAMENTO VALUES(50,'ALMACEN','MURCIA',7501); 
 
INSERT INTO EMPLEADO VALUES(7369,'ISABEL','SANCHEZ','EMPLEADO','Av.
Libertad','03/01/2009',1040,null,20,'48525150E','ESPAÑA','MURCIA'); 
INSERT INTO EMPLEADO VALUES(7499,'MARÍA J','ARROYO','VENDEDOR','Calle
laguna','02/11/2010',1500,390,30,'52474853P','ESPAÑA','SANTIAGO DE C.'); 
INSERT INTO EMPLEADO VALUES(7500,'LUIS','SALA','VENDEDOR','Calle
nº5','05/05/2015',1625,650,10,'87747525L','ESPAÑA','BARCELONA'); 
INSERT INTO EMPLEADO VALUES(7501,'REGINO','JIMENEZ','DIRECTOR','Calle
n5','08/08/2008',1520,null,20,'96654112F','ESPAÑA','MADRID'); 
INSERT INTO EMPLEADO VALUES(7502,'MANUEL','MARTIN','VENDEDOR','Calle
A','01/09/2015',1600,1020,10,'01478523R','ESPAÑA','BADAJOZ'); 
INSERT INTO EMPLEADO VALUES(7505,'PEDRO ','NEGRO','DIRECTOR','Calle
B','24/06/2000',3005,250,30,'00257485G','ESPAÑA','GRANADA'); 
INSERT INTO EMPLEADO VALUES(7051,'MARTÍN','CEREZO','DIRECTOR','Calle
C','15/03/2009',1790,320,20,'01020304H','ESPAÑA','MALAGA'); 
INSERT INTO EMPLEADO
VALUES(7088,'ANA','GIL','ANALISTA','Av.Rocamora','10/03/2010',3000,650,20,'55224411W','E
SPAÑA','ALMERIA'); 
INSERT INTO EMPLEADO VALUES(7839,'RICARDO','REY','PRESIDENTE','Av.Fernando
Alonso','06/08/1999',4000,1200,10,'66885544E','ESPAÑA','GERONA'); 
INSERT INTO EMPLEADO VALUES(288,'SABEL','TOVAR','VENDEDOR','Calle
Fortuna','08/09/2013',1350,0,30,'66558874R','ESPAÑA','ZARAGOZA '); 
INSERT INTO EMPLEADO VALUES(7876,'FERNANDO','ALONSO','EMPLEADO','Calle
Ceutí','01/12/2018',1430,875,20,'98456321K','FRANCIA','PARIS '); 
INSERT INTO EMPLEADO VALUES(7900,'CARLOS','JIMENO','EMPLEADO','Calle
Almoradí','15/09/2014',1335,970,30,'45658525Q','PORTUGAL','LISBOA'); 
INSERT INTO EMPLEADO VALUES(1985,'FELIPE','FERNANDEZ','ANALISTA','Calle Molina
de Segura','11/09/2016',3000,null,20,'36323539S','ESPAÑA','BILBAO'); 
INSERT INTO EMPLEADO VALUES(7934,'SOFIA','MUÑOZ','EMPLEADO','Av. Alto
Atalayas','23/01/2012',1690,null,10,'47512369D','ESPAÑA','LEÓN'); 
 

 
6. Muestra el apellido y el oficio de todos los empleados 
 
SELECT APELLIDO, OFICIO 
FROM EMPLEADO; 
 
7. Muestra los oficios de los empleados sin repetición, ordenados alfabéticamente. 
 
SELECT DISTINCT OFICIO 
FROM EMPLEADO 
ORDER BY 1; 
 
SELECT OFICIO 
FROM EMPLEADO 
GROUP BY OFICIO 
ORDER BY 1; 
 
8. Muestra todos los datos de los empleados que fueron contratados antes del uno de enero de
2011. 
 
SELECT * 
FROM EMPLEADO 
WHERE FECALTA < '01/01/2011' 
 
9. Muestra el apellido, salario y oficio de todos los empleados que sean vendedores y cuyo salario
sea igual o superior a 1500 e igual o inferior a 1600. 
 
SELECT APELLIDO,SALARIO, OFICIO 
FROM EMPLEADO 
WHERE UPPER(OFICIO)='VENDEDOR' 
AND SALARIO BETWEEN 1500 AND 1600; 
 
SELECT APELLIDO,SALARIO, OFICIO 
FROM EMPLEADO 
WHERE UPPER(OFICIO)='VENDEDOR' 
AND SALARIO >= 1500  
AND SALARIO <= 1600; 
 
10.Muestra el apellido, el número de departamento y el número de empleado de los empleados que
son vendedores o analistas, y que no pertenecen al departamento 30. 
 
SELECT APELLIDO, NUMDEPARTAMENTO, NUMEMPLEADO 
FROM EMPLEADO 
WHERE (UPPER(OFICIO) = 'VENDEDORES' OR UPPER(OFICIO) ='ANALISTA') 
AND NUMDEPARTAMENTO != 30; 
 
SELECT APELLIDO, NUMDEPARTAMENTO, NUMEMPLEADO 
FROM EMPLEADO 
WHERE (UPPER(OFICIO) IN('VENDEDORES' ,'ANALISTA')) 
AND NUMDEPARTAMENTO != 30; 
 
11.Muestra el apellido, el número de departamento y el número de empleado de los empleados que
son vendedores o analistas, que no pertenecen al departamento 30 y cuyo apellido no contiene
una N 
 
SELECT APELLIDO, NUMDEPARTAMENTO, NUMEMPLEADO 
FROM EMPLEADO 
WHERE (UPPER(OFICIO) IN('VENDEDORES' ,'ANALISTA')) 
AND NUMDEPARTAMENTO != 30 
AND UPPER(APELLIDO) NOT LIKE '%N%'; 
 
12.Muestra los apellidos, fecha de contratación y salario de los empleados que fueron contratados
en diciembre (de cualquier año) o en septiembre (de cualquier año), y cuya comisión sea nula,
ordenados por fecha y por apellido ascendentemente, y por salario descendentemente 
 
SELECT APELLIDO, FECALTA, SALARIO 
FROM EMPLEADO 
WHERE (FECALTA LIKE '%/12/%' OR FECALTA LIKE '%/09/%') 
AND COMISION IS NULL 
ORDER BY FECALTA, APELLIDO, SALARIO DESC; 
 
13.Muestra el apellido, salario, comisión y el salario más la comisión (llama a esta columna
TOTAL) para los empleados cuya comisión no sea nula, ordenados descendentemente por
TOTAL. 
 
SELECT APELLIDO, SALARIO, COMISION, SALARIO+COMISION AS TOTAL 
FROM EMPLEADO 
WHERE COMISION IS NOT NULL 
ORDER BY TOTAL DESC; 
 
SELECT APELLIDO, SALARIO, COMISION, SALARIO+COMISION AS TOTAL 
FROM EMPLEADO 
WHERE COMISION IS NOT NULL 
ORDER BY 4 DESC; 
 
14.Muestra todos los datos de los empleados que no sean ni analistas, ni vendedores, ni directores 
 
SELECT * 
FROM EMPLEADO 
WHERE UPPER(OFICIO) NOT IN ('ANALISTA', 'VENDEDOR', 'DIRECTOR'); 
 
15.Muestra los datos del empleado de mayor antigüedad en la empresa. 
 
SELECT *  
FROM EMPLEADO 
WHERE FECALTA <= ALL (SELECT FECALTA FROM EMPLEADO) 
ORDER BY FECALTA; 
 
SELECT *  
FROM EMPLEADO 
WHERE FECALTA = (SELECT MIN(FECALTA) FROM EMPLEADO) 
ORDER BY FECALTA; 
16.Muestra la fecha de alta más alta. 
 
SELECT MAX(FECALTA) AS MAX_SALARIO 
FROM EMPLEADO 
 
17.Muestra la fecha de alta más antigua. 
 
SELECT MIN(FECALTA) AS MIN_SALARIO 
FROM EMPLEADO 
 
18.Muestra la media de salario por departamento. 
 
SELECT AVG(SALARIO) AS SALARIO 
FROM EMPLEADO; 
 
19.Muestra el número de empleados que tiene la empresa 
 
SELECT COUNT(*) as NUM_EMPLEADOS 
FROM EMPLEADO; 
 
 
----------------------------------------------------------------------------------------------------------------------

1. Vamos a crear una tabla para registrar los institutos existentes en todo el mundo. Para ello, nos
interesa almacenar la siguiente información: 
 
CREATE TABLE INSTITUTOS( 
CODIGO NUMBER NOT NULL, 
NOMBRE VARCHAR2(50) NOT NULL, 
CIUDAD NUMBER NOT NULL, 
TIPO VARCHAR2(100), 
WEB VARCHAR2(100), 
EMAIL VARCHAR2(100) NOT NULL, 
TELEFONO NUMBER(12), 
CONSTRAINT INS_COD_PK PRIMARY KEY (CODIGO) 
); 
 
2. Añade, a la sentencia anterior, la regla de integridad que exige que para cada fila de la tabla
INSTITUTOS el valor del campo CIUDAD sea uno de los valores que la tabla CITY tiene en su
clave primaria. Además, si el registro de una ciudad se elimina de la tabla CITY, también se deben
borrar automáticamente todos los institutos situados en esa ciudad. 
ALTER TABLE INSTITUTOS 
ADD CONSTRAINT INS_CITY_FK FOREIGN KEY (CIUDAD)  
REFERENCES CITY(ID) ON DELETE CASCADE; 
 
3. Vamos a crear una tabla para registrar los alumnos existentes en todo el mundo. Para ello, nos
interesa almacenar la siguiente información: 
 
CREATE TABLE ALUMNOS( 
NRE NUMBER NOT NULL, 
APELLIDOS VARCHAR2(50) NOT NULL, 
NOMBRE VARCHAR2(30) NOT NULL, 
FECHANAC DATE, 
COUNTRYCODE VARCHAR2(3) NOT NULL, 
LANGUAGE VARCHAR2(30) NOT NULL, 
CONSTRAINT ALUM_NRE_PK PRIMARY KEY (NRE) 
); 
 
5. Añade, a la sentencia anterior, la regla de integridad que exige que para cada fila de la tabla
ALUMNOS el valor del campo COUNTRYCODE y LANGUAGE coincidan con alguna pareja que
la tabla COUNTRYLANGUAGE tiene en su clave primaria. Además, si el registro de una ciudad
se elimina de la tabla COUNTRYLANGUAGE, también se deben borrar automáticamente todos los
alumnos que tuvieran la pareja de valores COUNTRYCODE y LANGUAGE de la fila eliminada. 
ALTER TABLE ALUMNOS 
ADD CONSTRAINT ALUM_CONTLAN_FK FOREIGN KEY (COUNTRYCODE,
LANGUAGE) 
REFERENCES COUNTRYLANGUAGE(COUNTRYCODE, LANGUAGE) ON DELETE
CASCADE; 
 
6. Modifica la tabla CITY, ya existente, para incluir un campo al final de la tabla que se llamará PIB
y que almacenará el Producto Interno Bruto (PIB) de dicha ciudad, por lo que ese atributo deberá
ser del tipo NUMBER y podrá tener el valor NULL. 
ALTER TABLE CITY 
ADD PIB NUMBER(17,2); 
 
7. Borra la tabla COUNTRYLANGUAGE. 
DROP TABLE COUNTRYLANGUAGE CASCADE CONSTRAINTS; 
 
 

También podría gustarte