jueves, 7 de mayo de 2015

Ejercicios de SubConsultas en SQL Server



Saludos seguidores del manual SQL Server. A continuación los ejercicios de subconsultas utilizando la Base de Datos Hospital. Descarguen el script de la BD en el indice si aún no la tienen.

1. Mostrar el numero de empleado, el apellido y la fecha de alta del empleado mas antiguo de la empresa

SELECT EMP_NO,APELLIDO,
FECHA_ALT FROM EMP WHERE FECHA_ALT = (SELECT MIN(FECHA_ALT) FROM EMP)


2. Mostrar el numero de empleado, el apellido y la fecha de alta del empleado mas modernos de la empresa.

SELECT EMP_NO,APELLIDO,
FECHA_ALT FROM EMP WHERE FECHA_ALT = (SELECT MAX(FECHA_ALT) FROM EMP)


3. Visualizar el apellido y el oficio de los empleados con el mismo oficio que Jiménez.

SELECT APELLIDO, OFICIO FROM EMP WHERE
OFICIO = (SELECT OFICIO FROM EMP WHERE APELLIDO = 'JIMENEZ')


4. Queremos saber el apellido, oficio, salario y número de departamento de los empleados con salario mayor que el mejor salario del departamento 30.

SELECT APELLIDO, OFICIO, SALARIO, DEPT_NO FROM EMP WHERE SALARIO >
(SELECT
MAX (SALARIO) FROM EMP WHERE DEPT_NO = 30)


5. Mostrar el apellido, la función, sala o departamento de todos los empleados que trabajen en la empresa.

SELECT E.APELLIDO, E.OFICIO AS [CARGO EN EMPRESA], D.DNOMBRE AS [OFICINA]
FROM EMP AS E
INNER JOIN DEPT AS D
ON E.DEPT_NO = D.DEPT_NO<
UNION
SELECT P.APELLIDO, P.FUNCION, S.NOMBRE
FROM PLANTILLA AS P
INNER JOIN SALA AS S
ON P.HOSPITAL_COD = S.HOSPITAL_COD
AND P.SALA_COD = S.SALA_COD
UNION
SELECT D.APELLIDO, D.ESPECIALIDAD, H.NOMBRE
FROM DOCTOR AS D
INNER JOIN HOSPITAL AS H
ON D.HOSPITAL_COD = H.HOSPITAL_COD
ORDER BY 3


6. Averiguar el salario de todos los empleados de la empresa, de forma que se aprecien las diferencias entre ellos.

SELECT APELLIDO, SALARIO FROM EMP
UNION
SELECT APELLIDO, SALARIO FROM PLANTILLA
ORDER BY 2 DESC


7. Mostrar apellidos y oficio de los empleados del departamento 20 cuyo trabajo sea el mismo que el de cualquier empleado de ventas.

SELECT APELLIDO, OFICIO FROM EMP WHERE DEPT_NO = 20 AND OFICIO IN
(SELECT OFICIO FROM EMP WHERE DEPT_NO =
(SELECT DEPT_NO FROM DEPT WHERE DNOMBRE = 'VENTAS'))
ORDER BY 2


8. Mostrar los empleados que tienen mejor salario que la media de los directores, no incluyendo al presidente.

SELECT * FROM EMP WHERE SALARIO >
(SELECT AVG (SALARIO) FROM EMP WHERE OFICIO = 'DIRECTOR')
AND OFICIO <> 'PRESIDENTE'


9. Mostrar el apellido, función, salario y código de hospital de los empleados de la plantilla que siendo enfermeros o enfermeras pertenecen al hospital SAN CARLOS.

SELECT APELLIDO, FUNCION, SALARIO, HOSPITAL_COD FROM PLANTILLA WHERE
(FUNCION
= 'ENFERMERO' OR FUNCION = 'ENFERMERA') AND HOSPITAL_COD = (SELECT
HOSPITAL_COD FROM HOSPITAL WHERE NOMBRE = 'SAN CARLOS')


10. Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiología.

SELECT * FROM HOSPITAL WHERE HOSPITAL_COD IN (SELECT HOSPITAL_COD FROM
DOCTOR WHERE ESPECIALIDAD = 'CARDIOLOGÍA')


11. Visualizar el salario anual de los empleados de la plantilla del Hospital Provincial y General.

SELECT APELLIDO, FUNCION, SALARIO * 12 AS [SALARIO ANUAL] FROM PLANTILLA
WHERE HOSPITAL_COD IN (SELECT HOSPITAL_COD FROM HOSPITAL WHERE
NOMBRE =
'PROVINCIAL' OR NOMBRE= 'GENERAL')


12. Mostrar el apellido de los enfermos que nacieron antes que el Señor Miller.

SELECT APELLIDO FROM ENFERMO WHERE FECHA_NAC < (SELECT FECHA_NAC
FROM
ENFERMO WHERE APELLIDO = 'MILLER B.')


Descargar Scripts SQL

Espero haber ayudado en algo. Hasta la próxima oportunidad!








6 comentarios:

  1. No me ejecuta la consulta 12
    ****************************************************
    SELECT APELLIDO
    FROM ENFERMO
    WHERE FECHA_NAC < (SELECT FECHA_NAC FROM ENFERMO WHERE APELLIDO = 'Miller B.')

    *****************************************************
    Mens. 512, Nivel 16, Estado 1, Línea 1
    La subconsulta ha devuelto más de un valor, lo que no es correcto cuando va a continuación de =, !=, <, <=, >, >= o cuando se utiliza como expresión.

    ResponderEliminar
    Respuestas
    1. Hola 2m3-Corp, gracias por la visita y el aporte de tu comentario!
      Si estás utilizando la misma base de datos que está en el indice debería salir. Acabo de correr la consulta en mi editor SQL y los resultados salen correctamente.

      Éxitos!! Hasta cualquier momento!

      Eliminar
    2. Debés tener más de un 'Miller B.' en la base, podes elegri solo uno con SELECT TOP 1 FECHA_NAC, o SELECT MAX(FECHA_NAC)

      Eliminar
    3. Hola Cacho, gracias por la visita y el aporte de tu comentario!
      Los mejores deseos!! Hasta cualquier instante!

      Eliminar
  2. Profe buenas noches podría subir porfavor de nuevo la base de datos, he entrado al link y me sale ESTA PAGINA NO ESTA DISPONIBLE...lo sube de nuevo porfa

    ResponderEliminar
    Respuestas
    1. Hola Miguel Castillo Infantes, gracias por la visita y el aporte de tu comentario!
      La base de datos ya está subida!! Puedes descargarla si deseas!!
      Los mejores deseos!! Hasta cualquier instante!

      Eliminar