0% encontró este documento útil (0 votos)
20 vistas14 páginas

Create Database Empresa

El documento describe la creación y manipulación de una base de datos llamada 'EMPRESA', incluyendo la definición de tablas para departamentos, empleados y grados salariales. Se incluyen múltiples consultas SQL para seleccionar, insertar, actualizar y eliminar datos, así como para realizar cálculos y análisis sobre los empleados y sus salarios. También se presentan ejemplos de subconsultas y agrupaciones para obtener información específica sobre los empleados y sus departamentos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
20 vistas14 páginas

Create Database Empresa

El documento describe la creación y manipulación de una base de datos llamada 'EMPRESA', incluyendo la definición de tablas para departamentos, empleados y grados salariales. Se incluyen múltiples consultas SQL para seleccionar, insertar, actualizar y eliminar datos, así como para realizar cálculos y análisis sobre los empleados y sus salarios. También se presentan ejemplos de subconsultas y agrupaciones para obtener información específica sobre los empleados y sus departamentos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

CREATE DATABASE EMPRESA;

USE EMPRESA;

CREATE TABLE DEPT(

deptno INT NOT NULL PRIMARY KEY,

dnane char(10) not null,

loc char(8) not null

);

use empresa;

CREATE TABLE EMP(

eno int not null PRIMARY KEY,

ename char(6) not null,

job char(9) not null,

mgr int null,

hiredate DATE NOT NULL,

sal int not null,

comm int null,

deptno int(11) not null,

foreign key(deptno) references dept(deptno) on update cascade,


index(deptno)

);

AlTER TABLE EMP ADD FOREIGN KEY (mgr) REFERENCES EMP(eno);

use empresa;

CREATE TABLE salgrade(

grade int not null PRIMARY KEY,

losal int not null,

hisal int not null

);

USE EMPRESA;

INSERT INTO DEPT VALUES (10, 'ACCOUNTING', 'NEW YORK');


INSERT INTO DEPT VALUES (20, 'RESEARCH', 'DALLAS');

INSERT INTO DEPT VALUES (30, 'SALES', 'CHICAGO');

INSERT INTO DEPT VALUES (40, 'OPERATIONS', 'BOSTON');

INSERT INTO EMP VALUES (7839,'KING','PRESIDENT',NULL,'1981-11-


17',3000,null,10);

INSERT INTO EMP VALUES (7566,'JONES','MANAGER',7839,'1981-04-


02',2975,500,20);

INSERT INTO EMP VALUES (7902,'FORD','ANALYST',7566,'1982-01-


23',3000,null,20);

INSERT INTO EMP VALUES (7369,'SMITH','CLERK',7902,'1980-12-


17',800,null,20);

INSERT INTO EMP VALUES (7698,'BLAKE','MANAGER',7839,'1981-05-


01',2850,null,30);

INSERT INTO EMP VALUES (7499,'ALLEN','SALESMAN',7698,'1981-02-


20',1600,300,30);

INSERT INTO EMP VALUES (7521,'WARD','SALESMAN',7698,'1981-02-


22',1250,500,30);

INSERT INTO EMP VALUES (7654,'MARTIN','SALESMAN',7698,'1981-10-


08',1250,1400,30);

INSERT INTO EMP VALUES (7782,'CLARK','MANAGER',7839,'1981-06-


09',2450,NULL,10);

INSERT INTO SALGRADE VALUES(1,700,1200);

INSERT INTO SALGRADE VALUES(2,1201,1400);

INSERT INTO SALGRADE VALUES(3,1401,2000);

INSERT INTO SALGRADE VALUES(4,2001,3000);

INSERT INTO SALGRADE VALUES(5,3001,9999);

-- 1. Seleccionar el número de empleado, salario, comisión, nº de


departamento y fecha de la tabla EMP.

SELECT eno, sal, comm, deptno, hiredate

FROM EMP;

-- 2. Seleccionar aquellos empleados que sean 'SALESMAN'


SELECT *

FROM EMP

WHERE JOB = "SALESMAN";

-- otra forma

SELECT *

FROM EMP

WHERE JOB LIKE 'SALES%';

-- 3. Seleccionar aquellos empleados que no trabajen en el


departamento 30

SELECT *

FROM EMP

WHERE deptno <> 30;

-- otra forma

SELECT *

FROM EMP

WHERE deptno != 30;

-- 4. Seleccionar el nombre de aquellos empleados que ganen más


de 2000

SELECT ename

FROM EMP

WHERE sal > 2000;

-- 5. Seleccionar el nombre de aquellos que sean 'CLERK' o trabajen


en el departamento 30

SELECT ename

FROM empresa

WHERE JOB = "CLERK" OR deptno = 30;

-- OTRA FORMA

SELECT ename
FROM EMP

WHERE JOB = 'CLERK' || deptno = 30;

-- 6. Seleccionar aquellos cuyo salario esté entre 2000 y 3000

SELECT *

FROM EMP

WHERE sal BETWEEN 2000 AND 3000;

-- OTRA FORMA

SELECT *

FROM EMP

WHERE sal >= 2000 AND sal <=3000;

-- 7. Seleccionar los empleados que trabajan en el mismo


departamento que 'CLARK'

-- PARA SABER EL DEPARTAMENTO DE CLARK HAY QUE HACER UNA


CONSUKTA PARA SACAR EL

SELECT *

FROM EMP

WHERE deptno = (SELECT deptno FROM emp WHERE ename LIKE


'CLARK');

-- 8. Seleccionar el nombre de los empleados que trabajen en


'CHICAGO'

SELECT ename FROM EMP

WHERE deptno = ( SELECT deptno FROM DEPT WHERE loc =


"CHICAGO");

-- 9. Nombre de todos los empleados, empleo, departamento y


localidad

SELECT ename, job, EMP.deptno, loc

FROM EMP NATURAL JOIN DEPT;

-- OTRA

SELECT ename, job, EMP.deptno, loc


FROM EMP JOIN DEPT USING(deptno);

-- OTRA

SELECT ename, job, EMP.deptno, loc

FROM EMP, DEPT

WHERE EMP.deptno =DEPT.deptno;

-- 10. Seleccionar aquellos empleados que trabajen en el


departamento 10 o en el 20

SELECT ename

FROM EMP

WHERE deptno IN (10,20);

-- 11. Seleccionar los distintos departamentos que existen en la tabla


EMP

SELECT DISTINCT deptno

FROM EMP;

-- 12. Seleccionar el nombre aquellos empleados cuyo nombre


empiece por 'A'

SELECT ename

FROM EMP

WHERE ename LIKE "A%";

INSERT INTO EMP VALUES (7788,'SCOTT','ANALYST',7566,'1982-12-


09',3000,NULL,20);

INSERT INTO EMP VALUES (7844,'TURNER','SALESMAN',7698,'1981-10-


08',1500,0,30);

INSERT INTO EMP VALUES (7876,'ADAMS','CLERK',7788,'1983-12-


01',1100,NULL,20);

INSERT INTO EMP VALUES (7900,'JAMES','CLERK',7698,'1981-12-


03',950,NULL,30);

INSERT INTO EMP VALUES (7934,'MILLER','CLERK',7782,'1982-01-


23',1300,NULL,10);
-- 13. Seleccionar aquellos empleados que ganen más de 1500,
ordenado por empleo

-- ascenden o descendente

SELECT ename

FROM EMP

WHERE sal > 1500

ORDER BY job;

-- 14. Calcular el salario anual a percibir por cada empleado

-- se debera morstrar el nombre y salario anual en la salida de la


consulta

SELECT ename as 'Nombre del empleado', SAL*12 'Salario anual'

FROM EMP;

-- 15. Seleccionar el salario mínimo y máximo de los empleados


agrupados por empleo

SELECT job, MIN(sal), MAX(sal)

FROM EMP

GROUP BY job;

-- 16. Calcular el número de empleados por departamento que tienen


un salario superior a la media

-- como planteamos la subconsulta

-- 1º Conseguir cuánto es la media

SELECT avg(sal)

FROM EMP;

-- 2º Ya puedo compararlo... superior a la media


SELECT *

FROM EMP

WHERE sal > (SELECT avg(sal) FROM EMP);

-- continuo con el ejercicio

SELECT COUNT(*)

FROM EMP

WHERE sal > (SELECT avg(sal) FROM EMP);

-- agrupado por departamento

SELECT deptno, COUNT(*)

FROM EMP

WHERE sal > (SELECT avg(sal) FROM EMP)

GROUP BY deptno;

-- 17. Seleccionar el salario mínimo, máximo y medio de los


empleados agrupados por empleo

SELECT job, min(sal), MAX(sal), AVG(SAL)

FROM EMP

GROUP BY 1;

-- 18. Seleccionar los empleados cuyo salario sea superior al de


'ADAMS'

-- 1º CUANTO GANA ADAM

SELECT sal

FROM EMP

where ename like "ADAMS";

-- 2º YA PODEMOS COMPRARLO

SELECT ename

FROM EMP

WHERE sal > (SELECT sal FROM EMP WHERE ename like 'ADAMS');

-- 19. Mostrar el nombre del empleado y su fecha de alta en la


empresa de los empleados que son 'ANALISTA'
SELECT ename, hiredate

FROM EMP

WHERE job = "ANALYST";

-- 20. Encontrar el NOMBRE DEL EMPL, NOMBRE DEL DEP, TRABAJO y


salARIO de los empleados que trabajen en el mismo departamento
que 'TURNER' y su salario sea mayor que la media del salario del
departamento 10.

-- 1ºSUBCONSULTA

SELECT deptno FROM EMP WHERE ename like " TURNER";

-- 2º SUBCONSULTA media

SELECT AVG (sal) FROM EMP WHERE deptno = 10;

-- LO JUNTAMOS TODO

SELECT ename, dname, job, sal

FROM EMP JOIN DEPT USING (deptno)

WHERE deptno = (SELECT deptno FROM EMP WHERE ename like


'TURNER') AND sal > (SELECT AVG(sal) FROM EMP WHERE deptno =
10);

USE empresa;

-- 21. Insertar en la tabla DEPT la información correspondiente a un


nuevo departamento de consultoría, cuyo número sea 50 y que esté
ubicado en SANTANDER

INSERT INTO DEPT VALUES(50,'CONSULT','SANTANDE');

SELECT * FROM DEPT;

-- 22. Dar de alta a un nuevo empleado de nombre BELTRAN, que


desempeñe el puesto de analista en el departamento de SALES y
cuyo número de empleado sea 8.200. Por el momento se desconoce
su salario y quién será su supervisor

-- El nombre de BELTRAN, no entra por la definción del dato de la


columna

-- No podemos poner NULL al salario... porque es not null... aplicamos


un 0
INSERT INTO EMP (eno, ename, job, mgr, hiredate, sal, comm, deptno)

VALUES (8200,'BELTRA','ANALYST',null,'2024-11-25',0, null, 30);

-- 23. A raíz de la firma del convenio anual de la empresa, se ha


determinado incrementar el salario de todos los empleados en un 6%.
Incorporar este cambio a la base de datos

UPDATE EMP

SET sal = sal*1.06;

SELECT * FROM EMP;

-- 24. Se contrata a SANZ como ANALISTA, con número 1657, para el


departamento 30 y con sueldo 3000

insert INTO EMP (eno, ename, job, mgr, hiredate, sal, comm, deptno)

VALUES (1657,'SANZ','ANALYST',null,'2024-11-25',3000, null, 30);1

-- 25. Se despide a SANZ

DELETE FROM EMP

WHERE ename LIKE "SANZ";

SELECT * FROM EMP;

-- 26. SELECCIONA AQUELLOS EMPLEADOS QUE HAYN ENTRADO


ANTES DEL 1/1/82

SELECT * FROM EMP WHERE HIREDATE < "1982-01-01";

-- 27. MOSTAR LOS VENDORES QUE GANEN MAS DE 1500€

SELECT * FROM EMP WHERE sal > "1500" AND JOB LIKE "SALESMAN";

-- 28. Seleccionar aquellos que se llamen SMITH, ALLEN o SCOTT

SELECT * FROM EMP

WHERE ename IN ('SMITH','ALLEN','SCOTT');

-- 29. Seleccionar aquellos que no se llamen SMITH, ALLEN o SCOTT

SELECT * FROM EMP

WHERE ename NOT IN ('SMITH','ALLEN','SCOTT');

-- 30. SELECIONAR LOS DISTINTOS EMPLEOS QUE HAY EN CADA


DEPARTAMENTO

SELECT DISTINCT(job), deptno

FROM EMP
ORDER BY deptno;

-- 31. SELECIONAR EL AQUIELLOS EMPLEADO SE HAYAN DADO DE


ALTA EN 1981

SELECT ename

FROM EMP

WHERE hiredate BETWEEN "1981-01-01" AND "1981-12-31";

-- 32.SELECCIONAR AQUELLOS EMPLEADOS QUE TIENEN COMISION

SELECT ename FROM EMP

WHERE comM IS NOT NULL;

-- COMISION 0... PARA MI NO ES COMISION

SELECT ename, comm FROM EMP

WHERE comm IS NOT NULL AND comm >0;

-- TAMBIEN VALDRIA

SELECT ename, comm FROM EMP

WHERE comm > 0;

-- 33. CALCULAR EL NUMERO DE EMPREADOS QUE TIENEN COMISION


Y LA MEDIA

SELECT COUNT(comm), AVG(comm)

FROM EMP;

-- 34.seleccionar el numero de empleados que tienen comision y la


media en cada departamento

SELECT COUNT(comm), AVG(comm)

FROM EMP

GROUP BY deptno;

-- 35. SELECCIONAR EL SALARIO MINIMO MAXIMO Y MEDIO DE LOS


EMPLEADOS AGRUPADOS POR EMPLEO PERO SOLO AQUELLOS CUYA
MEDIA SUPERIOR 4000

SELECT MIN(sal), MAX(sal), AVG(sal)

FROM EMP
GROUP BY JOB;

-- VER COMO QUE UNO DE ELLOS ES > 4000, ES COMO UNA


SUBCONSULTA

SELECT MIN(sal), MAX(sal), AVG(sal)

FROM EMP

GROUP BY JOB

HAVING AVG(sal) > 4000;

USE EMPRESA;

-- A PARTIR DE AQUI SON SUBCONSULTAS RECURSIVAS

-- 36. SELECCIONA NOMBRE Y FECHA INGRESO DE EMPLEADO QUE


LLEVA MENOS TIEMPO

SELECT ename

FROM EMP

WHERE hiredate = (SELECT MIN(hiredate) FROM EMP);

-- 37. SELECCIONA EL NOMBRE DE LOS EMPLEADOS QUE GANEN MAS


QUE TODOS LOS "SALESMAN"

SELECT ename

FROM EMP

WHERE SAL > (SELECT MAX(sal) FROM EMP WHERE job LIKE
'SALESMAN');

-- 38 Seleccionar los empleados que ganen más que alguno de los


SALESMAN

SELECT ename

FROM EMP

WHERE SAL > SOME (SELECT MAX(sal) FROM EMP WHERE job LIKE
'SALESMAN');

-- 39SELECCIONAR EL NOMBRE DE CADA EMPLEADO Y EL NUMERO Y


NOMBRE DE SU JEFE

SELECT E1.ename"empleado", E1.mgr "el.mgr(eno)", E2.ename"jefe


e2.ename"

FROM EMP E1, EMP E2

WHERE E2.eno = E1.mgr;


USE EMPRESA;

-- 40 Mostrar el trabajo, el nombre y el salario de los empleados


ordenados por el tipo de trabajo y por salario descendent

SELECT job, ename, sal

FROM EMP

ORDER BY 1, 3 DESC;

-- 41 Mostrar el nombre del empleado y una columna que contenga el


salario multiplicado por la comisión cuya cabecera sea 'BONO'

SELECT ename, sal*comm 'BONO'

FROM EMP;

-- 42 Encontrar el salario medio de aquellos empleados cuyo trabajo


sea el de ANALYST, y cuya cabecera ponga SALARIO MEDIO

SELECT AVG(sal) 'SALARIO MEDIO'

FROM EMP

WHERE job LIKE 'ANALYST';

-- 43 Encontrar el salario más alto, más bajo y la diferencia entre


ambos

SELECT MAX(sal), MIN(sal), MAX(sal)-MIN(sal)

FROM EMP;

-- 45 Número de trabajos distintos que existen en el departamento 30

SELECT DISTINCT(job)

FROM EMP

WHERE deptno=30;

-- 46 MOSTAR EL NOMBRE DEL EMPLEADO, SU TRABAJO, EL NOMBRE Y


EL CODIGO DEL DEPARTAMENTO EN EL QUE TRABAJO

SELECT ename, job, dname, DEPT.deptno

FROM EMP NATURAL JOIN DEPT;

-- 47 Mostrar el nombre, el trabajo y el salario de todos los empleados


que tienen un salario superior al más bajo del departamento 30

SELECT ename, job, sal


FROM EMP WHERE sal > (SELECT MIN(sal) FROM EMP WHERE
deptno=30);

-- 48 Mostrar el nombre de los empleados cuyo jefe es BLAKE

-- primero es la subconsulta... y luego la ya la consulta

SELECT ename

FROM EMP

WHERE mgr = (SELECT eno FROM EMP WHERE ename LIKE 'BLAKE');

-- 50 Encontrar el número de trabajadores diferentes en el


departamento 30 para aquellos empleados cuyo salario pertenezca al
intervalo [1000, 1800]

SELECT COUNT(DISTINCT(eno))

FROM EMP

WHERE deptno = 30 AND sal BETWEEN 1000 AND 1800;

-- 51 Encontrar el número de trabajadores diferentes en el


departamento 30 para aquellos empleados cuyo salario pertenezca al
intervalo (1000, 1800]: el 1000 no está incluido

SELECT COUNT(DISTINCT(eno))

FROM EMP

WHERE deptno = 30 AND sal > 1000 AND SAL <= 1800;

-- 52 Visualice el número de los departamentos (deptno) que tengan


más de 3 empleados asignados

SELECT DISTINCT(deptno)

FROM EMP e1

WHERE 3 < (SELECT COUNT(*) FROM EMP e2 WHERE e1.deptno =


e2.deptno);

-- 53 Nombre de los empleados que trabajan en Dallas

SELECT ename

FROM EMP NATURAL JOIN DEPT

WHERE loc LIKE "DALLAS";

-- 54 ¿Cuántos trabajan en chicago?

SELECT count(*)
FROM EMP NATURAL JOIN DEPT

WHERE loc LIKE 'CHICAGO';

-- 55 Listar el nombre de los empleados que ganen menos que sus


managers

SELECT ename

FROM EMP e1

WHERE sal < (SELECT SAL FROM EMP e2 WHERE e1.mgr = e2.eno);

-- 56 Listar el nombre, trabajo, departamento, localidad y salario de


aquellos empleados que tengan un salario mayor que 2000 y trabajen
de DALLAS o NEW YORK

SELECT ename, job, emp.deptno, loc, sal

FROM EMP NATURAL JOIN DEPT

WHERE sal > 2000 AND loc IN ('DALLAS','NEW YORK');

SELECT ename, job, emp.deptno, loc, sal

FROM EMP NATURAL JOIN DEPT

WHERE sal > 2000 AND (loc LIKE 'DALLAS' OR loc LIKE 'NEW YORK');

También podría gustarte