100% found this document useful (2 votes)
6K views

Dac DBT SQL Exercises and Solutions Assignments III IV V

The document describes the structure of tables in the Human Resource Schema in Oracle Database 11g and provides 52 example queries on those tables. The queries retrieve employee, job, department, and other data. They use functions like SELECT, WHERE, GROUP BY, HAVING, JOIN, and aggregate functions.

Uploaded by

agile singh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
100% found this document useful (2 votes)
6K views

Dac DBT SQL Exercises and Solutions Assignments III IV V

The document describes the structure of tables in the Human Resource Schema in Oracle Database 11g and provides 52 example queries on those tables. The queries retrieve employee, job, department, and other data. They use functions like SELECT, WHERE, GROUP BY, HAVING, JOIN, and aggregate functions.

Uploaded by

agile singh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 10

Practice Questions for HR Schema in

Oracle Database 11g


The following is the structure of the tables provided by Oracle in Human Resource
Schema (HR).

Note: Columns in RED color indicate primary key(s).

Queries
1. Display details of jobs where the minimum salary is greater than 10000.

SELECT * FROM JOBS WHERE MIN_SALARY > 10000;

2. Display the first name and join date of the employees who joined between 2002
and 2005.

SELECT FIRST_NAME, HIRE_DATE FROM EMPLOYEES


WHERE TO_CHAR(HIRE_DATE, 'YYYY') BETWEEN 2002 AND 2005 ORDER BY
HIRE_DATE;
3. Display first name and join date of the employees who is either IT Programmer or
Sales Man.

SELECT FIRST_NAME, HIRE_DATE


FROM EMPLOYEES WHERE JOB_ID IN ('IT_PROG', 'SA_MAN');

4. Display employees who joined after 1st January 2008.

SELECT * FROM EMPLOYEES where hire_date > '01-jan-2008';

5. Display details of employee with ID 150 or 160.

SELECT * FROM EMPLOYEES WHERE EMPLOYEE_ID in (150,160);

6. Display first name, salary, commission pct, and hire date for employees with
salary less than 10000.

SELECT FIRST_NAME, SALARY, COMMISSION_PCT, HIRE_DATE FROM


EMPLOYEES WHERE SALARY < 10000;

7. Display job Title, the difference between minimum and maximum salaries for
jobs with max salary in the range 10000 to 20000.

SELECT JOB_TITLE, MAX_SALARY-MIN_SALARY DIFFERENCE FROM JOBS


WHERE MAX_SALARY BETWEEN 10000 AND 20000;

8. Display first name, salary, and round the salary to thousands.

SELECT FIRST_NAME, SALARY, ROUND(SALARY, -3) FROM EMPLOYEES;

9. Display details of jobs in the descending order of the title.

SELECT * FROM JOBS ORDER BY JOB_TITLE;

10. Display employees where the first name or last name starts with S.

SELECT FIRST_NAME, LAST_NAME FROM EMPLOYEES WHERE FIRST_NAME


LIKE 'S%' OR LAST_NAME LIKE 'S%';

11. Display employees who joined in the month of May.

SELECT * FROM EMPLOYEES WHERE TO_CHAR(HIRE_DATE, 'MON')= 'MAY';

12. Display details of the employees where commission percentage is null and salary
in the range 5000 to 10000 and department is 30.

SELECT * FROM EMPLOYEES WHERE COMMISSION_PCT IS NULL AND SALARY


BETWEEN 5000 AND 10000 AND DEPARTMENT_ID=30;
13. Display first name and date of first salary of the employees.

SELECT FIRST_NAME, HIRE_DATE, LAST_DAY(HIRE_DATE)+1 FROM


EMPLOYEES;

14. Display first name and experience of the employees.

SELECT FIRST_NAME, HIRE_DATE, FLOOR((SYSDATE-HIRE_DATE)/365)FROM


EMPLOYEES;

15. Display first name of employees who joined in 2001.

SELECT FIRST_NAME, HIRE_DATE FROM EMPLOYEES WHERE


TO_CHAR(HIRE_DATE, 'YYYY')=2001;

16. Display first name and last name after converting the first letter of each name to
upper case and the rest to lower case.

SELECT INITCAP(FIRST_NAME), INITCAP(LAST_NAME) FROM EMPLOYEES;

17. Display the first word in job title.

SELECT JOB_TITLE, SUBSTR(JOB_TITLE,1, INSTR(JOB_TITLE, ' ')-1)


FROM JOBS;

18. Display the length of first name for employees where last name contain character
‘b’ after 3rd position.

SELECT FIRST_NAME, LAST_NAME FROM EMPLOYEES WHERE


INSTR(LAST_NAME,'B') > 3;

19. Display first name in upper case and email address in lower case for employees
where the first name and email address are same irrespective of the case.

SELECT UPPER(FIRST_NAME), LOWER(EMAIL) FROM EMPLOYEES WHERE


UPPER(FIRST_NAME)= UPPER(EMAIL);

20. Display employees who joined in the current year.

SELECT * FROM EMPLOYEES WHERE


TO_CHAR(HIRE_DATE,'YYYY')=TO_CHAR(SYSDATE, 'YYYY');

21. Display the number of days between system date and 1st January 2011.

SELECT SYSDATE - to_date('01-jan-2011') FROM DUAL;

22. Display how many employees joined in each month of the current year.

SELECT TO_CHAR(HIRE_DATE,'MM'), COUNT (*) FROM EMPLOYEES


WHERE TO_CHAR(HIRE_DATE,'YYYY')= TO_CHAR(SYSDATE,'YYYY') GROUP BY
TO_CHAR(HIRE_DATE,'MM') ;

23. Display manager ID and number of employees managed by the manager.

SELECT MANAGER_ID, COUNT(*) FROM EMPLOYEES GROUP BY MANAGER_ID;

24. Display employee ID and the date on which he ended his previous job.

SELECT EMPLOYEE_ID, MAX(END_DATE) FROM JOB_HISTORY GROUP BY


EMPLOYEE_ID;

25. Display number of employees joined after 15th of the month.

SELECT COUNT(*) FROM EMPLOYEES WHERE TO_CHAR(HIRE_DATE,'DD') >


15;

26. Display the country ID and number of cities we have in the country.

SELECT COUNTRY_ID, COUNT(*) FROM LOCATIONS GROUP BY COUNTRY_ID;

27. Display average salary of employees in each department who have commission
percentage.

SELECT DEPARTMENT_ID, AVG(SALARY) FROM EMPLOYEES


WHERE COMMISSION_PCT IS NOT NULL GROUP BY DEPARTMENT_ID;

28. Display job ID, number of employees, sum of salary, and difference between
highest salary and lowest salary of the employees of the job.

SELECT JOB_ID, COUNT(*), SUM(SALARY), MAX(SALARY)-MIN(SALARY)


SALARY FROM EMPLOYEES GROUP BY JOB_ID;

29. Display job ID for jobs with average salary more than 10000.

SELECT JOB_ID, AVG(SALARY) FROM EMPLOYEES


GROUP BY JOB_ID
HAVING AVG(SALARY)>10000;

30. Display years in which more than 10 employees joined.

SELECT TO_CHAR(HIRE_DATE,'YYYY') FROM EMPLOYEES


GROUP BY TO_CHAR(HIRE_DATE,'YYYY')
HAVING COUNT(EMPLOYEE_ID) > 10;

31. Display departments in which more than five employees have commission
percentage.

SELECT DEPARTMENT_ID FROM EMPLOYEES


WHERE COMMISSION_PCT IS NOT NULL
GROUP BY DEPARTMENT_ID
HAVING COUNT(COMMISSION_PCT)>5;

32. Display employee ID for employees who did more than one job in the past.

SELECT EMPLOYEE_ID FROM JOB_HISTORY GROUP BY EMPLOYEE_ID HAVING


COUNT(*) > 1;

33. Display job ID of jobs that were done by more than 3 employees for more than
100 days.

SELECT JOB_ID FROM JOB_HISTORY


WHERE END_DATE-START_DATE > 100
GROUP BY JOB_ID
HAVING COUNT(*)>3;

34. Display department ID, year, and Number of employees joined.

SELECT DEPARTMENT_ID, TO_CHAR(HIRE_DATE,'YYYY'),


COUNT(EMPLOYEE_ID)
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID, TO_CHAR(HIRE_DATE, 'YYYY')
ORDER BY DEPARTMENT_ID;

35. Display departments where any manager is managing more than 5 employees.

SELECT DISTINCT DEPARTMENT_ID


FROM EMPLOYEES
GROUP BY DEPARTMENT_ID, MANAGER_ID
HAVING COUNT(EMPLOYEE_ID) > 5;

36. Change salary of employee 115 to 8000 if the existing salary is less than 6000.

UPDATE EMPLOYEES SET SALARY = 8000 WHERE EMPLOYEE_ID = 115 AND


SALARY < 6000;

37. Insert a new employee into employees with all the required details.

INSERT INTO EMPLOYEES (EMPLOYEE_ID, FIRST_NAME, LAST_NAME,


EMAIL, PHONE_NUMBER, HIRE_DATE,JOB_ID, SALARY, DEPARTMENT_ID)
VALUES (207, 'ANGELA', 'SNYDER','ANGELA','215 253 4737', SYSDATE,
'SA_MAN', 12000, 80);

38. Delete department 20.

DELETE FROM DEPARTMENTS WHERE DEPARTMENT_ID=20;

39. Change job ID of employee 110 to IT_PROG if the employee belongs to


department 10 and the existing job ID does not start with IT.

UPDATE EMPLOYEES SET JOB_ID= 'IT_PROG'


WHERE EMPLOYEE_ID=110 AND DEPARTMENT_ID=10 AND NOT JOB_ID LIKE
'IT%';

40. Insert a row into departments table with manager ID 120 and location ID in any
location ID for city Tokyo.

INSERT INTO DEPARTMENTS (150,'SPORTS',120,1200);

41. Display department name and number of employees in the department.

SELECT DEPARTMENT_NAME, COUNT(*) FROM EMPLOYEES NATURAL JOIN


DEPARTMENTS GROUP BY DEPARTMENT_NAME;

42. Display job title, employee ID, number of days between ending date and starting
date for all jobs in department 30 from job history.

SELECT EMPLOYEE_ID, JOB_TITLE, END_DATE-START_DATE DAYS


FROM JOB_HISTORY NATURAL JOIN JOBS
WHERE DEPARTMENT_ID=30;

43. Display department name and manager first name.

SELECT DEPARTMENT_NAME, FIRST_NAME FROM DEPARTMENTS D JOIN


EMPLOYEES E ON (D.MANAGER_ID=E.EMPLOYEE_ID);

44. Display department name, manager name, and city.

SELECT DEPARTMENT_NAME, FIRST_NAME, CITY FROM DEPARTMENTS D JOIN


EMPLOYEES E ON (D.MANAGER_ID=E.EMPLOYEE_ID) JOIN LOCATIONS L
USING (LOCATION_ID);

45. Display country name, city, and department name.

SELECT COUNTRY_NAME, CITY, DEPARTMENT_NAME


FROM COUNTRIES JOIN LOCATIONS USING (COUNTRY_ID)
JOIN DEPARTMENTS USING (LOCATION_ID);

46. Display job title, department name, employee last name, starting date for all jobs
from 2000 to 2005.

SELECT JOB_TITLE, DEPARTMENT_NAME, LAST_NAME, START_DATE


FROM JOB_HISTORY JOIN JOBS USING (JOB_ID) JOIN DEPARTMENTS
USING (DEPARTMENT_ID) JOIN EMPLOYEES USING (EMPLOYEE_ID)
WHERE TO_CHAR(START_DATE,'YYYY') BETWEEN 2000 AND 2005;

47. Display job title and average salary of employees

SELECT JOB_TITLE, AVG(SALARY) FROM EMPLOYEES


NATURAL JOIN JOBS GROUP BY JOB_TITLE;
48. Display job title, employee name, and the difference between maximum salary for
the job and salary of the employee.

SELECT JOB_TITLE, FIRST_NAME, MAX_SALARY-SALARY DIFFERENCE FROM


EMPLOYEES NATURAL JOIN JOBS;

49. Display last name, job title of employees who have commission percentage and
belongs to department 30.

SELECT JOB_TITLE, FIRST_NAME, MAX_SALARY-SALARY DIFFERENCE FROM


EMPLOYEES NATURAL JOIN JOBS WHERE DEPARTMENT_ID = 30;

50. Display details of jobs that were done by any employee who is currently drawing
more than 15000 of salary.

SELECT JH.*
FROM JOB_HISTORY JH JOIN EMPLOYEES E ON (JH.EMPLOYEE_ID =
E.EMPLOYEE_ID)
WHERE SALARY > 15000;

51. Display department name, manager name, and salary of the manager for all
managers whose experience is more than 5 years.

SELECT DEPARTMENT_NAME, FIRST_NAME, SALARY


FROM DEPARTMENTS D JOIN EMPLOYEES E ON
(D.MANAGER_ID=E.MANAGER_ID)
WHERE (SYSDATE-HIRE_DATE) / 365 > 5 ;

52. Display employee name if the employee joined before his manager.

SELECT FIRST_NAME FROM EMPLOYEES E1 JOIN EMPLOYEES E2 ON


(E1.MANAGER_ID=E2.EMPLOYEE_ID)
WHERE E1.HIRE_DATE < E2.HIRE_DATE;

53. Display employee name, job title for the jobs employee did in the past where the
job was done less than six months.

SELECT FIRST_NAME, JOB_TITLE FROM EMPLOYEES E JOIN JOB_HISTORY


JH ON (JH.EMPLOYEE_ID = E.EMPLOYEE_ID) JOIN JOBS J ON( JH.JOB_ID
= J.JOB_ID)
WHERE MONTHS_BETWEEN(END_DATE,START_DATE) < 6 ;

54. Display employee name and country in which he is working.

SELECT FIRST_NAME, COUNTRY_NAME FROM EMPLOYEES JOIN DEPARTMENTS


USING(DEPARTMENT_ID)
JOIN LOCATIONS USING( LOCATION_ID)
JOIN COUNTRIES USING ( COUNTRY_ID);
55. Display department name, average salary and number of employees with
commission within the department.

SELECT DEPARTMENT_NAME, AVG(SALARY), COUNT(COMMISSION_PCT)


FROM DEPARTMENTS JOIN EMPLOYEES USING (DEPARTMENT_ID)
GROUP BY DEPARTMENT_NAME;

56. Display the month in which more than 5 employees joined in any department
located in Sydney.

SELECT TO_CHAR(HIRE_DATE,'MON-YY')
FROM EMPLOYEES JOIN DEPARTMENTS USING (DEPARTMENT_ID) JOIN
LOCATIONS USING (LOCATION_ID)
WHERE CITY = 'Seattle'
GROUP BY TO_CHAR(HIRE_DATE,'MON-YY')
HAVING COUNT(*) > 5;

57. Display details of departments in which the maximum salary is more than 10000.

SELECT * FROM DEPARTMENTS WHERE DEPARTMENT_ID IN


( SELECT DEPARTMENT_ID FROM EMPLOYEES
GROUP BY DEPARTMENT_ID
HAVING MAX(SALARY)>10000);

58. Display details of departments managed by ‘Smith’.

SELECT * FROM DEPARTMENTS WHERE MANAGER_ID IN


(SELECT EMPLOYEE_ID FROM EMPLOYEES WHERE FIRST_NAME='SMITH');

59. Display jobs into which employees joined in the current year.

SELECT * FROM JOBS WHERE JOB_ID IN


(SELECT JOB_ID FROM EMPLOYEES WHERE
TO_CHAR(HIRE_DATE,'YYYY')=TO_CHAR(SYSDATE,'YYYY'));

60. Display employees who did not do any job in the past.

SELECT * FROM EMPLOYEES WHERE EMPLOYEE_ID NOT IN


(SELECT EMPLOYEE_ID FROM JOB_HISTORY);

61. Display job title and average salary for employees who did a job in the past.

SELECT JOB_TITLE, AVG(SALARY) FROM JOBS NATURAL JOIN EMPLOYEES


GROUP BY JOB_TITLE
WHERE EMPLOYEE_ID IN
(SELECT EMPLOYEE_ID FROM JOB_HISTORY);

62. Display country name, city, and number of departments where department has
more than 5 employees.
SELECT COUNTRY_NAME, CITY, COUNT(DEPARTMENT_ID)
FROM COUNTRIES JOIN LOCATIONS USING (COUNTRY_ID) JOIN DEPARTMENTS
USING (LOCATION_ID)
WHERE DEPARTMENT_ID IN
(SELECT DEPARTMENT_ID FROM EMPLOYEES
GROUP BY DEPARTMENT_ID
HAVING COUNT(DEPARTMENT_ID)>5)
GROUP BY COUNTRY_NAME, CITY;

63. Display details of manager who manages more than 5 employees.

SELECT FIRST_NAME FROM EMPLOYEES


WHERE EMPLOYEE_ID IN
(SELECT MANAGER_ID FROM EMPLOYEES
GROUP BY MANAGER_ID
HAVING COUNT(*)>5);

64. Display employee name, job title, start date, and end date of past jobs of all
employees with commission percentage null.

SELECT FIRST_NAME, JOB_TITLE, START_DATE, END_DATE


FROM JOB_HISTORY JH JOIN JOBS J USING (JOB_ID) JOIN EMPLOYEES E
ON ( JH.EMPLOYEE_ID = E.EMPLOYEE_ID)
WHERE COMMISSION_PCT IS NULL;

65. Display the departments into which no employee joined in last two years.

SELECT * FROM DEPARTMENTS


WHERE DEPARTMENT_ID NOT IN
( SELECT DEPARTMENT_ID FROM EMPLOYEES WHERE FLOOR((SYSDATE-
HIRE_DATE)/365) < 2) ;

66. Display the details of departments in which the max salary is greater than 10000
for employees who did a job in the past.

SELECT * FROM DEPARTMENTS


WHERE DEPARTMENT_ID IN
(SELECT DEPARTMENT_ID FROM EMPLOYEES
WHERE EMPLOYEE_ID IN (SELECT EMPLOYEE_ID FROM JOB_HISTORY)
GROUP BY DEPARTMENT_ID
HAVING MAX(SALARY) >10000);

67. Display details of current job for employees who worked as IT Programmers in
the past.

SELECT * FROM JOBS


WHERE JOB_ID IN
(SELECT JOB_ID FROM EMPLOYEES WHERE EMPLOYEE_ID IN
(SELECT EMPLOYEE_ID FROM JOB_HISTORY WHERE
JOB_ID='IT_PROG'));
68. Display the details of employees drawing the highest salary in the department.

SELECT DEPARTMENT_ID,FIRST_NAME, SALARY FROM EMPLOYEES OUTER


WHERE SALARY =
(SELECT MAX(SALARY) FROM EMPLOYEES WHERE DEPARTMENT_ID =
OUTER.DEPARTMENT_ID);

69. Display the city of employee whose employee ID is 105.

SELECT CITY FROM LOCATIONS WHERE LOCATION_ID =


(SELECT LOCATION_ID FROM DEPARTMENTS WHERE DEPARTMENT_ID =
(SELECT DEPARTMENT_ID FROM EMPLOYEES WHERE
EMPLOYEE_ID=105)
);

70. Display third highest salary of all employees

select salary
from employees main
where 2 = (select count( distinct salary )
from employees
where salary > main.salary);

You might also like