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!








17 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
  3. IMPORTANTE!! En la cláusula/consulta 5 hay un error, existe un "<" demás al lado de ON E.DEPT_NO = D.DEPT_NO, deben borrarlo y funcionará

    Aquí esta de forma Correcta:


    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

    ResponderEliminar
    Respuestas
    1. Hola AlexM, gracias por el aporte de tus conocimientos. Los mejores deseos para este 2021.

      Eliminar
    2. Hola Alex me ayusarias con esta consulta? como crearian una consulta que te dice devolver los datos del/los repuestos mas utilizadosen lo que va del 2022 considerar aquellos que el costo actual sea superio a 20000
      Tengo la tabla Reparacion_Repuesto (Rep_Cod,RepAñio, Repuesto_Cod, cantidad, CostoUnitario) y Repuesto(Repuesto_Cod,RepuestoDesc, RepuestoCosto, Repuesto_Tipo)

      Eliminar
    3. Hola Anónimo, gracias por la visita y el aporte de tu consulta.

      Eliminar
  4. como crearian una consulta que te dice devolver los datos del/los repuestos mas utilizadosen lo que va del 2022 considerar aquellos que el costo actual sea superio a 20000
    Tengo la tabla Reparacion_Repuesto (Rep_Cod,RepAñio, Repuesto_Cod, cantidad, CostoUnitario) y Repuesto(Repuesto_Cod,RepuestoDesc, RepuestoCosto, Repuesto_Tipo) ayudaaa

    ResponderEliminar
  5. Buenas. necesito realizar una consulta donde hay una partida que puede tener dos propietarios, es decir porque se le hace el pase de uno al otro, donde uno de los dos es siempre la misma entidad. por ejemplo partida xx tiene como propietario a raul y a entidad. es decir es una consulta de uno a muchos

    ResponderEliminar
    Respuestas
    1. otro ejemplo seria un cliente puede realizar muchas compras, donde detalle que compras hizo.

      Eliminar
    2. Hola Anónimo, gracias por la visita y el aporte de tu consulta. Esperemos que algún usuario pueda apoyarte con la solución.

      Eliminar
  6. Alguien tiene los scripts, la pagina ya no esa disponible

    ResponderEliminar
    Respuestas
    1. Hola Miguel Duran, gracias por la visita y avisar que había problemas con los enlaces. Ahora la descarga es directa sin avisos publicitarios. Si encuentras otro problema similar déjame un comentario y lo resolveré.

      Eliminar

       
free counters

Páginas vistas en total según Google