Ex Amen Based A To Ayuda
Ex Amen Based A To Ayuda
Ex Amen Based A To Ayuda
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;