SQL
1) Mostrar todas las especialidades que ejercen los médicos ordenados por especialidad
y apellidos.
Select especialidad from doctor
Select especidalidad from doctor
Select especialidad, apellidos froma doctor order by especialidad,apellido
FUNCIONES
2) Contar cuàntos empleados tiene el hospital.
Select count(*) from Emp
3) Mostrar el máximo salario de los empleados
Select max(salario) from emp
Avg=promedio
4) Contar los empleados que son analistas
select count( * ) from emp where oficio = 'analista'
5) Contar cuàntas enfermeras hay en la tabla planilla
select count( * ) from planilla where funcion = 'enfermera'
6) Calcular el total de gastos mensuales de los empleados
Select sum (salario) from emp
7) Total de gastps anuales sin aguinaldo
Select sum(salario*12) from emp
8) Total de gastos anuales con aguinaldo
Select sum(salario*14) from emp
9) Mostrar las cantidades de empleados por eficio
SELECT OFICIO, COUNT( * )FROM EMP GROUP BY OFICIO
SELECT OFICIO, COUNT( * ) AS NUMERO FROM EMP GROUP BY OFICIO
10) Mostrar la cantidad de médicos por especialidad
SELECT ESPECIALIDAD, COUNT( * )FROM EMP GROUP BY ESPECIALIDAD
11) Mostrar la cantidad de enfermos por sexo
SELECT S, COUNT( * )AS NUMERO FROM EMP GROUP BY S
12) Mostrar el total de gastos mensuales de empleados por oficio
SELECT OFICIO, SUM( SALARIO )FROM EMP GROUP BY OFICIO
13) Mostrar el total de gastos mensuales de planilla por función
SELECT NOMBRE,COUNT(NUM_CAMA) FROM SALA GROUP BY NOMBRE
14) Contar el nùmero de camas que existe en cada hospital
SELECT HOSPITAL_COD,COUNT(NUM_CAMA) FROM SALA GROUP BY HOSPITAL_COD
SQL.(4/10/22)
15) Mostrar los oficios con el máximo salario de empleados.
SELECT DISTINCT OFICIO, MAX( SALARIO ) FROM EMP GROUP BY OFICIO LIMIT 0 , 30
16) SELECT TOP
Mostrar los 5 primeros empleados
SELECT APELLIDO FROM EMP LIMIT 5;
17) Mostrar los 2 primeros doctors
SELEC APELLIDO FROM DOCTOR LIMIT 2;
18) Mostrar los 3 primeros enfermos
SELECT APELLIDO
FROM enfermo
LIMIT 6
19) Mostrar el nombre del hospital el doctor y su especialidad de las tablas DOCTOR y
HOSPITAL.
SELECT HOSPITAL.NOMBRE,DOCTOR.APELLIDO,DOCTOR.ESPECIALIDAD FROM DOCTOR INNER
JOIN HOSPITAL ON DOCTOR.HOSPITAL_COD = HOSPITAL.HOSPITAL_COD
20) Mostrar de todos los empleados el nombre de departamento, su apellido y oficio
“TABLAS EMP Y DEP”.
SELECT DEPT.DNOMBRE,EMP.APELLIDO,EMP.OFICIO FROM EMP INNER JOIN DEPT ON
EMP.DEPT_NO = DEPT.DEPT_NO
21) Mostrar de todas las Salas el nombre del hospital el numero de cama(SALA Y
HOSPITA)
SELECT HOSPITAL.NOMBRE,SALA.NOMBRE,SALA.NUM_CAMA FROM SALA INNER JOIN
HOSPITAL ON SALA.HOSPITAL_COD = HOSPITAL.HOSPITAL_COD
22) Mostrar todo el personal de plantilla nombre hospital, apellido ,función (HOSPITAL Y
PLANTILLA)
SELECT HOSPITAL.NOMBRE,PLANTILLA.APELLIDO,PLANTILLA.FUNCION FROM PLANTILLA INNER
JOIN HOSPITAL ON PLANTILLA.HOSPITAL_COD = HOSPITAL.HOSPITAL_COD
23) SELECT APELLIDO, OFICIO, DNOMBRE
FROM EMP
LEFT OUTER JOIN DEPT ON EMP.DEPT_NO = DEPT.DEPT_NO
LIMIT 0 , 30
24) Mostrar los empleados que tienen asociado un departamento o no .
SELECT APELLIDO, OFICIO, DNOMBRE
FROM EMP
RIGHT OUTER JOIN DEPT ON EMP.DEPT_NO = DEPT.DEPT_NO
LIMIT 0 , 30
25) Mostrar todos los departamentos que tiene
empleados o no.
“Cross join o full join” son similares.
SELECT APELLIDO, OFICIO, DNOMBRE
FROM EMP
CROSS JOIN dept
LIMIT 0 , 30
26) Ejercicios : Mostrar los datos de empleados (apellido , oficio , salario, Nº departamento y el nombre de
departamento de los empleados cuyo salario es mayor de 300000).
SELECT APELLIDO, OFICIO, SALARIO, DNOMBRE
FROM EMP
INNER JOIN DEPT ON EMP.DEPT_NO = DEPT.DEPT_NO
WHERE EMP.SALARIO >300000
LIMIT 0 , 30
27) Mostrar todas los nombres de salas con su respectivo nombre de hospital
SELECT sala.nombre, hospital.nombre
FROM hospital
INNER JOIN sala ON hospital.hospital_cod = sala.hospital_cod
Una manera más fácil de hacerlo
SELECT B.nombre, A.nombre
FROM hospital A
INNER JOIN sala B ON A.hospital_cod = b.hospital_cod
28. Calcular cuantos trabajadores hay en cada ciudad
SELECT COUNT( EMP.APELLIDO ) , DEPT.LOC
FROM EMP
INNER JOIN DEPT ON EMP.DEPT_NO = DEPT.DEPT_NO
GROUP BY dept.loc
Las dos son validas
SELECT COUNT( EMP.APELLIDO ) , DEPT.LOC
FROM EMP
RIGHT JOIN DEPT ON EMP.DEPT_NO = DEPT.DEPT_NO
GROUP BY dept.loc
29 Calcular cuantas salas hay en cada hospital . mostrar numero y nombre del hospital.
SELECT COUNT( sala.hospital_cod ) , hospital.nombre
FROM hospital
RIGHT JOIN sala ON sala.hospital_cod = hospital.hospital_cod
GROUP BY hospital.nombre
30 Calcular cuantos empleados hay en cada departamento
SELECT COUNT( emp.dept_no )
FROM emp
INNER JOIN dept ON emp.dept_no = dept.dept_no
GROUP BY dept.dnombre
SUB CONSULTAS .
31. Mostrar los datos del empleado mas antiguo con su fecha de ingreso
SELECT apellido, EMP_NO, fecha_alt
FROM emp
WHERE fecha_alt = (
SELECT MAX( fecha_alt )
FROM emp )
32. Mostrar los datos de los empleados del mismo oficio de Jimenez
SELECT apellido, oficio
FROM emp
WHERE oficio = (
SELECT oficio
FROM emp
WHERE apellido = 'Jimenez' )
33. Mostrar los datos de hospitales que tienen doctores en la especialidades
cardiologia
SELECT * FROM hospital
WHERE hospital_codIN (SELECT hospital_cod
FROM doctor
WHERE especialidad = 'cardiologia)
34. Mostrar todos los enfermos que nacieron antes del Sr.Miller.
SELECT * FROM enfermo
WHERE fecha_nac < (
SELECT fecha_nac
FROM enfermo
WHERE apellido = 'Miller B.' )
Funciones definidas por el usuario
Delimiter $$
Create function fnumEmp( )Return int Deterministie
Begin Declare numero Int;
Select count (*) from emp into numero;
Return numero ;
END
$$
Delimiter;
1. Crear las funciones que devuelvan el total de planilla de empleados
mensualmente
DELIMITER $$
CREATE FUNCTION FPLANILLA ( )RETURNS INT
BEGIN
DECLARE NUMERO INT;
SELECT SUM(SALARIO) FROM PLANILLA INTO NUMERO;
RETURN NUMERO;
END
$$
DELIMITER
2. Crear la función que calcule el total de pagos a los doctores
DELIMITER $$
CREATE FUNCTION FSUMA()RETURNS INT
BEGIN
DECLARE NUMERO INT;
SELECT SUM(SALARIO) FROM PLANTILLA WHERE FUNCION LIKE 'e%' INTO
NUMERO;
RETURN NUMERO;
END
$$
DELIMITER ,,
3. Crear la función que reciba el código del hospital y devuelva el nombre
fnombrehospital
DELIMITER $$
CREATE FUNCTION FNOMBREHOSPITAL ( CODIGO int ) RETURNS VARCHAR(100)
BEGIN
DECLARE HNOMBRE VARCHAR (100);
SELECT NOMBRE FROM HOSPITAL WHERE HOSPITAL_COD = CODIGO INTO
HNOMBRE ;
RETURN HNOMBRE;
END
$$
DELIMITER ;
4. Crear la función que calcule el número de doctores según el código del hospital
FNUMERODOCTORH
5. Crear la función que calcule el numero de salas según el código del hospital
FNUMSALAH
6. Crear la función que calcular el numero de empleados según el nombre de
oficio
FNUMEMP
PROCEDIMIENTO ALMACENADOS
DELIMITER $$
CREATE PROCEDURE SPLISTAEMP ()
BEGIN
SELECT * FROM EMP ;
END
$$
DELIMITER ;
1. Crear el SPLista oficio que muestre los empleados según oficio.
DELIMITER $$
CREATE PROCEDURE SPLISTAEMPLEA ()
BEGIN
SELECT OFICIO FROM EMP ;
END
$$
DELIMITER ;
2. Crear el SPListaDoctor que muestre los doctores según Especialidad.
CREATE PROCEDURE SPListaDoctor( ) BEGIN SELECT APELLIDO,
ESPECIALIDAD
FROM DOCTOR;
END
3. Crear el Salas que muestre las salas según el código de hospital
DELIMITER $$
CREATE PROCEDURE Sisals ()
BEGIN
SELECT sala.NOMBRE,hospital.Hospital_cod FROM Sala INNER JOIN
HOSPITAL ON sala.hospital_cod = hospital.hospital_cod ;
END
$$
DELIMITER;
4. Crear el SPEnfermo que muestre los enfermos según la fecha enviada.
5. Crear SPPlanilla que muestre los empleados según el turno ingresado.