Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Práctica-3-SqlServer-to-MySql HOTEL COMPLETO
Práctica-3-SqlServer-to-MySql HOTEL COMPLETO
use Hospital;
--2. Mostrar el apellido, oficio, salario, salario anual, con las dos extras para
aquellos empleados con comisi�n mayor de 100000.
3. Id�ntico del anterior, pero para aquellos empleados que su salario anual con
extras supere los 2200000
--4. Id�ntico del anterior, pero para aquellos empleados que sumen entre salario
anual con extras y comisi�n los 3 millones.
--5. Mostrar todos los datos de empleados ordenados por departamento y dentro de
este por oficio para tener una visi�n jer�rquica.
--8. Igual que el anterior, para los nacidos antes de 1990 ordenados por n�mero de
inscripci�n descendente
SELECT *
FROM ENFERMO
WHERE CAST(FECHA_NAC AS date) < '01-ene-1990'
ORDER BY INSCRIPCION DESC;
--9. Listar todos los datos de la plantilla del hospital del turno de ma�ana
SELECT
FROM PLANTILLA
WHERE T ='M';
--11. Visualizar los empleados de la plantilla del turno de ma�ana que tengan un
salario entre 200000 y 225000.
SELECT *
FROM PLANTILLA
WHERE SALARIO BETWEEN 20000 AND 22500 AND T = 'M';
--12. Visualizar los empleados de la tabla emp que no se dieron de alta entre el
01/01/2010 y el 31/12/2012. SET DATEFORMAT DMY
SELECT *
FROM EMP
WHERE FECHA_ALT NOT BETWEEN '01/01/2010' AND '31/12/2012';
--14. Mostrar aquellos empleados con fecha de alta posterior al 1 de Julio de 2015.
SELECT *
FROM EMP
WHERE FECHA_ALT > '01-07-2015';
SELECT *
FROM EMP
WHERE FECHA_ALT > '2015/07/01';
--15. Lo mismo que en el ejercicio 14 pero con salario entre 150000 y 400000.
SELECT *
FROM EMP
WHERE FECHA_ALT > '01-07-2015' AND SALARIO BETWEEN 15000 AND 400000;
--16. Igual que en el ejercicio 15, pero tambi�n incluimos aquellos que no siendo
analista pertenecen al departamento 20.
SELECT * FROM EMP
WHERE FECHA_ALT > '01-07-2015' AND SALARIO BETWEEN 15000 AND 400000 OR (OFICIO <>
'ANALISTA' AND DEPT_NO = 20);
--17. Mostrar aquellos empleados cuyo apellido termine en �Z� ordenados por
departamento, y dentro de este por antig�edad.
SELECT * FROM EMP
WHERE APELLIDO LIKE '%Z' ORDER BY DEPT_NO, FECHA_ALT ASC;
--18. De los empleados del ejercicio 17 quitar aquellos que superen los 200000
mensuales.
SELECT *
FROM EMP
WHERE APELLIDO LIKE '%Z' AND SALARIO <= 20000 ORDER BY DEPT_NO, FECHA_ALT ASC;
--20. Igual que el ejercicio 19, pero mostr�ndolos de forma que se aprecien las
diferencias de salario dentro de cada oficio.
SELECT *
FROM EMP
WHERE OFICIO <> 'ANALISTA' ORDER BY OFICIO, SALARIO DESC;
--21. Del ejercicio 20, nos quedamos solo con aquellos cuyo n�mero de empleado no
este entre 7600 y 7900.
SELECT *
FROM EMP
WHERE OFICIO <> 'ANALISTA' AND EMP_NO NOT BETWEEN 7600 AND 7900 ORDER BY OFICIO,
SALARIO DESC;
--24. Mostrar que personal �No Interino� existe en cada sala de cada hospital,
ordenado por hospital y sala.
SELECT HOSPITAL_COD, SALA_COD, APELLIDO, FUNCION
FROM PLANTILLA
WHERE FUNCION NOT IN ('INTERINO') ORDER BY HOSPITAL_COD, SALA_COD;
--26. Seleccionar los distintos valores del sexo que tienen los enfermos.
SELECT DISTINCT S AS "SEXO" FROM ENFERMO;
--27. Indicar los distintos turnos de la plantilla del hospital, ordenados por
turno y por apellido.
SELECT DISTINCT T AS "TURNO", APELLIDO
FROM PLANTILLA ORDER BY TURNO, APELLIDO;
--28. Seleccionar las distintas especialidades que ejercen los m�dicos, ordenados
por especialidad y apellido.
SELECT DISTINCT ESPECIALIDAD, APELLIDO
FROM DOCTOR ORDER BY ESPECIALIDAD, APELLIDO;
--31. Mostrar todos los empleados cuyo nombre sea de 4 letras y su apellido termine
con la letra a
SELECT * FROM EMP WHERE APELLIDO LIKE '___a' ;
***********************************************************************************
********************************
--32. Mostrar todos los empleados cuyo apellido comience entre las letras E y F.
SELECT * FROM EMP WHERE APELLIDO LIKE 'E%' OR APELLIDO LIKE 'F%';
***********************************************************************************
*******************************
--33. Mostrar todos los empleados cuyo apellido comience por la letra A, contenga
dentro de su apellido de la letra A a la M y que terminen en O.
//SELECT * FROM EMP WHERE APELLIDO LIKE "A%[A-M]%o";
SELECT * FROM EMP WHERE APELLIDO LIKE 'A%G%o';
--34. Mostrar todos los empleados cuyo apellido comience por la letra M y la
segunda letra no sea una A.
SELECT * FROM EMP WHERE APELLIDO LIKE 'M[^A]%';
--35. Mostrar todos los empleados cuyo apellido sea de 5 letras y su tercera letra
sea entra la A y la S terminando en Z.
SELECT * FROM EMP WHERE APELLIDO LIKE '__[a-�]_z';
--36. Mostrar todos los empleados cuyo apellido sea de 6 letras y no comience entre
la A y la D.
SELECT * FROM EMP WHERE APELLIDO LIKE '[^a-d]_____';
--37. Mostrar todos los que empiecen por la A y cuya cuarta letra no est�
comprendida entre A � G
SELECT * FROM EMP WHERE APELLIDO LIKE 'A__[^a-g]%' ;
--39. AVG: Realiza la media sobre la expresi�n dada, debe ser un tipo de dato Int.
SELECT AVG(salario) FROM emp ;
--44. Encontrar el salario mas alto, mas bajo y la diferencia entre ambos de todos
los empleados con oficio EMPLEADO.
SELECT OFICIO, MAX(SALARIO) AS SALARIO_MAS_ALTO, MIN(SALARIO) AS SALARIO_MAS_BAJO,
MAX(SALARIO) - MIN(SALARIO) AS DIFERENCIA_ENTRE_AMBOS
FROM EMP GROUP BY OFICIO HAVING OFICIO = 'EMPLEADO';
--52. Calcular el valor medio de las camas que existen para cada nombre de sala.
Indicar el nombre de cada sala y el n�mero de cada una de ellas.
SELECT SALA_COD AS SALA, NOMBRE, AVG(NUM_CAMA) AS MEDIA_DE_CAMAS FROM SALA GROUP BY
NOMBRE, SALA_COD;
--54. Averiguar los �ltimos empleados que se dieron de alta en la empresa en cada
uno de los oficios, ordenados por la fecha.
SELECT MAX(FECHA_ALT) AS FECHA, OFICIO FROM EMP GROUP BY OFICIO ORDER BY 1;
--55. Mostrar el n�mero de hombres y el n�mero de mujeres que hay entre los
enfermos.
SELECT COUNT(*) AS N�MERO, S AS SEXO FROM ENFERMO GROUP BY S;
--56. Mostrar la suma total del salario que cobran los empleados de la plantilla
para cada funci�n y turno.
SELECT FUNCION, T AS TURNO, SUM(SALARIO) AS SUMA_DE_SALARIOS FROM PLANTILLA GROUP
BY FUNCION, T;
--61. La combinaci�n Full Join muestra las coincidencias de la tabla Dept con Emp,
m�s los valores que no coincidan, como el departamento Producci�n, que no tiene
empleados.
--63. Realiza un producto cartesiano combinando todos los empleados con todos los
departamentos.
SELECT APELLIDO,OFICIO,DNOMBRE FROM EMP CROSS JOIN DEPT;
--64. Ya hemos visto como combinar 2 tablas con inner join, el siguiente ejemplo
--muestra como combinar las 3 tablas que tenemos en la base de datos. Podremos
--combinar tantas tablas como queramos usando inner join o full join.
SELECT P.APELLIDO AS APELLIDO, S.NOMBRE AS SALA, H.NOMBRE AS HOSPITAL, S.NUM_CAMA
AS N�_DE_CAMAS FROM PLANTILLA P INNER JOIN SALA AS S ON P.HOSPITAL_COD =
S.HOSPITAL_COD AND P.SALA_COD = S.SALA_COD INNER JOIN HOSPITAL AS H ON
H.HOSPITAL_COD = P.HOSPITAL_COD;
--65.Combinar los valores de una tabla sobre s� misma. Para ello crearemos dos
--copias de la misma tabla poni�ndole un al�as, para posteriorme nte combinar los
--resultados de ambas copias.
SELECT A.EMP_NO AS PRIMER_EMPLEADO, A.APELLIDO, A.DEPT_NO, B.EMP_NO AS
SEGUNDO_EMPLEADO, B.APELLIDO FROM EMP AS A INNER JOIN EMP AS B ON A.EMP_NO =
B.EMP_NO ORDER BY B.EMP_NO;