domingo, 3 de mayo de 2015

Uso de Join SQL Server - Combinaciones internas



1. Seleccionar el apellido, oficio, salario, numero de departamento y su nombre de todos los empleados cuyo salario sea mayor de 300000

SELECT E.APELLIDO
,E.OFICIO
,E.SALARIO
,D.DEPT_NO AS [Nº DEPT]
,DNOMBRE AS [DEPARTAMENTO]
FROM EMP AS E
INNER JOIN DEPT AS D ON
E.DEPT_NO = D.DEPT_NO
WHERE E.SALARIO > 300000


2. Mostrar todos los nombres de Hospital con sus nombres de salas correspondientes.

SELECT S.NOMBRE AS [NOMBRE SALA]
,H.NOMBRE AS [NOMBRE HOSPITAL]
FROM SALA S INNER JOIN HOSPITAL H ON
S.HOSPITAL_COD = H.HOSPITAL_COD


3. Calcular cuantos trabajadores de la empresa hay en cada ciudad.

SELECT COUNT(E.EMP_NO) AS [Nº DE TRABAJADORES]
,D.LOC AS [CIUDAD]
FROM EMP AS E
RIGHT OUTER JOIN DEPT AS D
ON D.DEPT_NO = E.DEPT_NO
GROUP BY D.LOC


4. Visualizar cuantas personas realizan cada oficio en cada departamento mostrando el nombre del departamento.

SELECT D.DNOMBRE AS [Nº DEPARTAMENTO]
,COUNT(*) AS [Nº DE PERSONAS]
,E.OFICIO
FROM EMP E
RIGHT OUTER JOIN DEPT D
ON E.DEPT_NO = D.DEPT_NO
GROUP BY E.DEPT_NO, E.OFICIO,D.DNOMBRE


5. Contar cuantas salas hay en cada hospital, mostrando el nombre de las salas y el nombre del hospital.

SELECT COUNT(S.NOMBRE) AS [NUMERO DE SALAS]
,S.NOMBRE AS [SALA]
,H.NOMBRE AS [HOSPITAL]
FROM SALA AS S
INNER JOIN HOSPITAL AS H
ON H.HOSPITAL_COD = S.HOSPITAL_COD
GROUP BY S.NOMBRE,H.NOMBRE


6. Calcular cuantos trabajadores hay en cada departamento(nombre de departamento)

SELECT COUNT(E.EMP_NO) AS [Nº DE TRABAJADORES]
,D.DNOMBRE AS [DEPARTAMENTO]
FROM EMP E
RIGHT OUTER JOIN DEPT D
ON D.DEPT_NO = E.DEPT_NO
GROUP BY D.DNOMBRE


7. Buscar aquellos departamentos con cuatro o mas personas trabajando.

SELECT D.DNOMBRE AS [DEPARTAMENTO]
,COUNT(*) AS [Nº DE PERSONAS]
FROM EMP E
INNER JOIN DEPT D
ON E.DEPT_NO = D.DEPT_NO
GROUP BY D.DEPT_NO,D.DNOMBRE
HAVING COUNT(*) >= 4


8. Calcular el valor medio de las camas que existen para cada nombre de sala. Indicar el nombre de cada sala y el codigo de cada una de ellas.

SELECT AVG(NUM_CAMA) AS [MEDIA CAMAS]
,NOMBRE
,SALA_COD
FROM SALA
GROUP BY NOMBRE,SALA_COD


9. Calcular la media salarial por ciudad.

SELECT D.LOC AS [CIUDAD]
,AVG(SALARIO) AS [MEDIA SALARIAL]
FROM EMP E INNER JOIN DEPT D
ON D.DEPT_NO = E.DEPT_NO
GROUP BY D.LOC


10. Mostrar los doctores junto con el nombre de hospital en el que ejercen, la dirección y el teléfono del mismo.

SELECT D.APELLIDO
,H.NOMBRE
,H.DIRECCION
,H.TELEFONO
FROM DOCTOR D
INNER JOIN HOSPITAL H
ON H.HOSPITAL_COD = D.HOSPITAL_COD


11. Mostrar los nombres de los hospitales junto con el mejor salario de los empleados de cada hospital.

SELECT H.NOMBRE AS [HOSPITAL]
,MAX(P.SALARIO) AS [SALARIO MAXIMO]
FROM PLANTILLA P
INNER JOIN HOSPITAL H
ON P.HOSPITAL_COD = H.HOSPITAL_COD
GROUP BY H.NOMBRE


12. Visualizar el nombre de los empleados de la plantilla junto con el nombre de la sala, el nombre del hospital y el número de camas libres de cada una de ellas.

SELECT P.APELLIDO AS [APELLIDO Y NOMBRE]
,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


13. Visualizar el máximo salario, mínimo salario de los empleados dependiendo de la ciudad en la que trabajen. Indicando el número total de trabajadores por ciudad.

SELECT COUNT(E.EMP_NO) AS [Nº DE TRABAJADORES]
,D.LOC AS [CIUDAD]
,MAX(E.SALARIO) AS [SALARIO MÁXIMO]
,MIN(E.SALARIO) AS [SALARIO MÍNIMO]
FROM EMP E
INNER JOIN DEPT D
ON E.DEPT_NO = D.DEPT_NO
GROUP BY D.LOC


14. Averiguar la combinación de que salas podría haber por cada uno de los hospitales.

SELECT S.NOMBRE AS [NOMBRE SALA]
,H.NOMBRE AS [NOMBRE HOSPITAL]
FROM SALA AS S
CROSS JOIN HOSPITAL AS H


15. Mostrar el Numero de empleado, apellido, oficio y Nombre del departamento de los empleados, junto al Número de empleado, apellido, oficio y Nombre del departamento de sus subordinados respectivamente, para obtener una visión jerarquica de la empresa.

SELECT A.EMP_NO AS [Nº DE EMPLEADO]
,A.APELLIDO AS [JEFE], A.OFICIO
,D.DNOMBRE AS [DEPARTAMENTO]
,B.EMP_NO AS [Nº EMPLEADO]
,B.APELLIDO AS [SUBORDINADO]
,B.OFICIO
,D.DNOMBRE AS [DEPARTAMENTO]
FROM EMP AS A
INNER JOIN EMP AS B
ON B.DIR = A.EMP_NO
INNER JOIN DEPT AS D
ON A.DEPT_NO = D.DEPT_NO
AND B.DEPT_NO = D.DEPT_NO
ORDER BY B.DIR




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








2 comentarios:

  1. Estimado buen tutorial, gracias por la información... Pero el script no lo puedo descargar
    Subelo de nuevo Guillermo
    Slds

    ResponderEliminar
    Respuestas
    1. Hola LANDIO ROJAS, gracias por la visita y el aporte de tu comentario.
      Cuando hagas clic en el enlace "Descargar Scripts SQL", se abrirá una pestaña o ventana aparte en la cual se mostrará una publicidad de 5 segundos, cuya cuenta regresiva aparecerá en la parte superior derecha de la página. Una vez termine los 5 segundos aparecerá un link que dice quitar publicidad, le das clic ahí y automáticamente empezará la descarga del archivo.

      Los mejores deseos! Hasta cualquier momento!

      Eliminar