Вы находитесь на странице: 1из 11

Employee Database

An enterprise wishes to maintain a database to automate its operations. Enterprise divided


into to certain departments and each department consists of employees. The following two
tables describes the automation schemas.

DEPT1 (DEPTNO, DNAME, LOC)


EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO)

Creating DEPT table

SQL>Create table DEPT1(


DEPTNO number(3)primary key,
DNAME varchar(30)not null,
LOC varchar(30));

Inserting the values into the DEPT1 table

SQL> insert into dept1 values(&DEPTNO,'&DNAME','&LOC');


Enter value for deptno: 10
Enter value for dname: ACCOUNTING
Enter value for loc: NEW YORK
old 1: insert into dept1 values(&DEPTNO,'&DNAME','&LOC')
new 1: insert into dept1 values(10,'ACCOUNTING','NEW YORK')

1 row created.
SQL> /
Enter value for deptno: 20
Enter value for dname: RESEARCH
Enter value for loc: DALLAS
old 1: insert into dept1 values(&DEPTNO,'&DNAME','&LOC')
new 1: insert into dept1 values(20,'RESEARCH','DALLAS')

1 row created.
SQL> /
Enter value for deptno: 30
Enter value for dname: SALES
Enter value for loc: CHICAGO
old 1: insert into dept1 values(&DEPTNO,'&DNAME','&LOC')
new 1: insert into dept1 values(30,'SALES','CHICAGO')

1 row created.

SQL> /
Enter value for deptno: 40
Enter value for dname: OPERATIONS
Enter value for loc: BOSTON
old 1: insert into dept1 values(&DEPTNO,'&DNAME','&LOC')
new 1: insert into dept1 values(40,'OPERATIONS','BOSTON')

1 row created.

Cresting EMP1 Table

SQL> create table EMP1(


2 EMPNO number(4) primary key,
3 ENAME varchar(30) not null,
4 JOB varchar(30) ,
5 MGR number(4),
6 HIREDATE date,
7 SAL number(7,2),
8 COMM number(5,2),
9 DEPTNO number(3) references DEPT1(DEPTNO));

Table created.

Inserting the values into EMP1 Table


SQL> insert into emp1
values(&EMPNO,'&ENAME','&JOB',&MGR,'&HIREDATE',&SAL,&COMM,&DEPTNO);
Enter value for empno: 7369
Enter value for ename: SMITH
Enter value for job: CLERK
Enter value for mgr: 7902
Enter value for hiredate: 17-DEC-80
Enter value for sal: 800
Enter value for comm: NULL
Enter value for deptno: 20
old 1: insert into emp1
values(&EMPNO,'&ENAME','&JOB',&MGR,'&HIREDATE',&SAL,&COMM,&DEPTNO)
new 1: insert into emp1 values(7369,'SMITH','CLERK',7902,'17-DEC-80',800,NULL,20)

1 row created.

SQL> /
Enter value for empno: 7499
Enter value for ename: ALLEN
Enter value for job: SALESMAN
Enter value for mgr: 7698
Enter value for hiredate: 20-FEB-81
Enter value for sal: 1600
Enter value for comm: 300
Enter value for deptno: 30
old 1: insert into emp1
values(&EMPNO,'&ENAME','&JOB',&MGR,'&HIREDATE',&SAL,&COMM,&DEPTNO)
new 1: insert into emp1 values(7499,'ALLEN','SALESMAN',7698,'20-FEB-81',1600,300,30)

1 row created.

SQL> /
Enter value for empno: 7521
Enter value for ename: WARD
Enter value for job: SALESMAN
Enter value for mgr: 7698
Enter value for hiredate: 22-FEB-81
Enter value for sal: 1250
Enter value for comm: 500
Enter value for deptno: 30
old 1: insert into emp1
values(&EMPNO,'&ENAME','&JOB',&MGR,'&HIREDATE',&SAL,&COMM,&DEPTNO)
new 1: insert into emp1 values(7521,'WARD','SALESMAN',7698,'22-FEB-81',1250,500,30)

1 row created.
SQL> /
Enter value for empno: 7566
Enter value for ename: JONES
Enter value for job: MANAGER
Enter value for mgr: 7839
Enter value for hiredate: 02-APR-81
Enter value for sal: 2975
Enter value for comm: NULL
Enter value for deptno: 20
old 1: insert into emp1
values(&EMPNO,'&ENAME','&JOB',&MGR,'&HIREDATE',&SAL,&COMM,&DEPTNO)
new 1: insert into emp1 values(7566 ,'JONES','MANAGER',7839,'02-APR-
81',2975,NULL,20)

1 row created.

Note : Press forward slash (/) and insert the following rows into the EMP1 table

7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30


7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10

Retrieve all the records form DEPT1 table

SQL> select * from DEPT!;

DEPTNO DNAME LOC


--------- -------------- ------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON

Retrieve all the records form EMP1 table


SQL> select * from emp;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO


--------- ---------- --------- --------- --------- --------- --------- ---------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10

14 rows selected.
Q1. 1. Find out the details of top 3 earner of company.

SQL> SELECT ENAME, SAL, DEPTNO FROM EMP X WHERE 2>=


2 (SELECT COUNT (DISTINCT SAL) FROM EMP Y WHERE X. SAL<=Y.SAL)
3* ORDER BY SAL DESC

ENAME SAL DEPTNO


---------- -------------- ----------
KING 5000 10
SCOTT 3000 20
FORD 3000 20

Q2 . Display those managers name whose salary is more than average


salary of his employees.

SQL> SELECT DISTINCT(E2.ENAME) FROM EMP E1,EMP E2 WHERE E1.MGR = E2.EMPNO


AND E2.SAL> (SELECT AVG(SAL) FROM EMP);

ENAME
----------
BLAKE
CLARK
FORD
JONES
KING
SCOTT

Q3.Display those employees who joined the company before 15th of the
Month?

SQL> SELECT EMPNO,EMPNO,HIREDATE FROM EMP WHERE


TO_CHAR(HIREDATE,'DD')<15;

EMPNO EMPNO HIREDATE


--------- --------- ---------
7566 7566 02-APR-81
7698 7698 01-MAY-81
7782 7782 09-JUN-81
7844 7844 08-SEP-81
7900 7900 03-DEC-81
7902 7902 03-DEC-81

Q4) Display the manager who is having maximum number of employees


working under him?

Q5. Print a list of employees displaying ‘less salary’ if less than


1500 if exactly 1500 display as ‘Exact salary’ and if greater than 1500
display ‘more salary’?

6. Update the employee salary by 15%, whose experience is greater


than 10 years.
7. Delete the employees, who completed 30 years of service.

SQL> DELETE FROM EMP1


WHERE (MONTHS_BETWEEN(SYSDATE,HIREDATE))/12>30;

1 row deleted.

8. Determine the minimum salary of an employee and his details, who


joined on the same date.

SQL> SELECT * FROM EMP WHERE SAL IN(SELECT MIN(SAL) FROM EMP GROUP BY
HIREDATE HAVING COUNT(HIREDATE)>1)

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO


--------- ---------- --------- --------- --------- --------- --------- ---------
7900 JAMES CLERK 7698 03-DEC-81 1187.5 30

9. Determine the count of employees, who are taking commission.


SQL> SELECT COUNT(*) FROM EMP WHERE COMM IS NOT NULL;

COUNT(*)
----------
4
10. Create a view, which contain employee names and their manager
names working in sales department.
SQL> CREATE VIEW EMPDEPTMGR_SALESVIEW
2 AS SELECT E1.ENAME " EMPLOYEE NAME",E2.ENAME "MANAGER NAME"
3 FROM EMP1 E1, EMP1 E2
4 WHERE E1.MGR=E2.EMPNO
5 AND
6* E1.DEPTNO =(SELECT DEPTNO FROM DEPT1 WHERE DNAME ='SALES');
SQL>

View created.
Retrieve the values from view

SQL> SELECT * FROM EMPDEPTMGR_SALESVIEW;

EMPLOYEE MANAGER NA
---------- ----------
ALLEN BLAKE
WARD BLAKE
MARTIN BLAKE
BLAKE KING
TURNER BLAKE
JAMES BLAKE

6 rows selected.

11. Determine the names of employee, who earn more than their
managers.

SQL> SELECT E1.ENAME FROM EMP1 E1,EMP1 E2 WHERE E1.MGR=E2.EMPNO AND


E1.SAL>E2.SAL;

ENAME
----------
SCOTT
FORD

12. Determine the names of employees, who take highest salary in


their departments.
SQL> SELECT ENAME, DEPTNO FROM EMP WHERE SAL IN (SELECT MAX(SAL) FROM EMP
GROUP BY DEPTNO)

ENAME DEPTNO
---------- ---------
BLAKE 30
SCOTT 20
FORD 20
KING 10

13. Determine the employees, who are located at the same place.

14. Determine the employees, whose total salary is like the minimum
Salary of any department.

SQL> SELECT * FROM EMP WHERE SAL+COMM IN(SELECT MIN(SAL) FROM EMP
2 GROUP BY DEPTNO);

no rows selected

15. Determine the department which does not contain any employees.

SQL> SELECT DEPTNO FROM DEPT1 WHERE DEPTNO NOT IN


(SELECT DEPTNO FROM EMP GROUP BY DEPTNO)

DEPTNO
---------
40
Q1. CREATE A VIEW, WHICH CONTAIN EMPLOYEE NAMES AND THEIR MANAGER
NAMES WORKING IN SALES DEPARTMENT.

SQL> CREATE VIEW EMPDEPTMGR_SALESVIEW


2 AS SELECT E1.ENAME " EMPLOYEE NAME",E2.ENAME "MANAGER NAME"
3 FROM EMP1 E1, EMP1 E2
4 WHERE E1.MGR=E2.EMPNO
5 AND
6* E1.DEPTNO =(SELECT DEPTNO FROM DEPT1 WHERE DNAME ='SALES');
SQL>

View created.
Retrieve the values from view

SQL> SELECT * FROM EMPDEPTMGR_SALESVIEW;

EMPLOYEE MANAGER NA
---------- ----------
ALLEN BLAKE
WARD BLAKE
MARTIN BLAKE
BLAKE KING
TURNER BLAKE
JAMES BLAKE

6 rows selected.

2. DETERMINE THE NAMES OF EMPLOYEE, WHO EARN MORE THAN THEIR


MANAGERS.

SQL> SELECT E1.ENAME FROM EMP1 E1,EMP1 E2 WHERE E1.MGR=E2.EMPNO AND


E1.SAL>E2.SAL;

ENAME
----------
SCOTT
FORD

3. DETERMINE THE NAMES OF EMPLOYEES, WHO TAKE HIGHEST SALARY IN


THEIR DEPARTMENTS.

SQL> SELECT ENAME, DEPTNO FROM EMP WHERE SAL IN (SELECT MAX(SAL) FROM EMP
GROUP BY DEPTNO)

ENAME DEPTNO
---------- ---------
BLAKE 30
SCOTT 20
FORD 20
KING 10

4. DETERMINE THE EMPLOYEES, WHOSE TOTAL SALARY IS LIKE THE MINIMUM


SALARY OF ANY DEPARTMENT.

SQL> SELECT * FROM EMP WHERE SAL+COMM


2 =ANY (SELECT MIN(SAL) FROM EMP GROUP BY DEPTNO);

no rows selected

5. UPDATE THE EMPLOYEE SALARY BY 25%, WHOSE EXPERIENCE IS GREATER


THAN 10 YEARS.

SQL> UPDATE EMP1 SET SAL=SAL+(SAL*25)/100


WHERE MONNTHS_BETWEEN(SYSDATE,HIREDATE))/12>10

14 rows updated.

6. DELETE THE EMPLOYEES, WHO COMPLETED 32 YEARS OF SERVICE.

SQL> DELETE FROM EMP1


WHERE (MONTHS_BETWEEN(SYSDATE,HIREDATE))/12>32;

0 rows deleted.

7. DETERMINE THE MINIMUM SALARY OF AN EMPLOYEE AND HIS DETAILS, WHO


JOIN ON THE SAME DATE.

SQL> SELECT * FROM EMP WHERE SAL IN(SELECT MIN(SAL) FROM EMP GROUP BY
HIREDATE HAVING COUNT(HIREDATE)>1)

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO


--------- ---------- --------- --------- --------- --------- --------- ---------
7900 JAMES CLERK 7698 03-DEC-81 1187.5 30

8. DETERMINE THE COUNT OF EMPLOYEES, WHO ARE TAKING COMMISSION AND


NOT TAKING COMMISSION.

SQL> SELECT COUNT(*) FROM EMP WHERE COMM IS NULL


2 UNION SELECT COUNT(*) FROM EMP WHERE COMM IS NOT NULL;

COUNT(*)
---------
4
10

SQL>

9. DETERMINE THE DEPARTMENT DOES NOT CONTAIN ANY EMPLOYEES.

SQL> SELECT DEPTNO FROM DEPT1 WHERE DEPTNO NOT IN


(SELECT DEPTNO FROM EMP GROUP BY DEPTNO)

DEPTNO
---------
40
10. FIND OUT THE DETAILS OF TOP 5 EARNER OF COMPANY.

SQL> SELECT ENAME, SAL, DEPTNO FROM EMP1 X WHERE 4>= (SELECT COUNT(DISTINCT
SAL) FROM EMP1 Y WHERE X. SAL<=Y.SAL) ORDER BY SAL DESC

ENAME SAL DEPTNO


---------- --------- ---------
KING 6250 10
SCOTT 3750 20
FORD 3750 20
JONES 3718.75 20
BLAKE 3562.5 30

SQL>
11. DISPLAY THOSE MANAGERS NAME WHOSE SALARY IS MORE THAN AVERAGE
SALARY OF HIS EMPLOYEES.

SQL> SELECT DISTINCT(E2.ENAME) FROM EMP E1,EMP E2 WHERE E1.MGR = E2.EMPNO


AND E2.SAL> (SELECT AVG(SAL) FROM EMP);

ENAME
----------
BLAKE
CLARK
FORD
JONES
KING
SCOTT

12. DISPLAY THOSE EMPLOYEES WHO JOINED THE COMPANY BEFORE 15TH OF
THE MONTH?

SQL> SELECT EMPNO,EMPNO,HIREDATE FROM EMP WHERE


TO_CHAR(HIREDATE,'DD')<15;

EMPNO EMPNO HIREDATE


--------- --------- ---------
7566 7566 02-APR-81
7698 7698 01-MAY-81
7782 7782 09-JUN-81
7844 7844 08-SEP-81
7900 7900 03-DEC-81
7902 7902 03-DEC-81

6 rows selected.

13. DISPLAY THOSE EMPLOYEES WHOSE 10% OF SALARY IS EQUAL TO THE YEAR
OF JOINING?
SQL> SELECT * FROM EMP WHERE (SAL*10)/100 = TO_CHAR(HIREDATE,'YY');

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO


--------- ---------- --------- --------- --------- --------- --------- ---------
7369 SMITH CLERK 7902 17-DEC-80 800 20

SQL>
14. IN WHICH YEAR DID MOST PEOPLE JOIN THE COMPANY? DISPLAY THE YEAR
AND NUMBER OF EMPLOYEES.

SQL> SELECT TO_CHAR(HIREDATE,'YY') "YEAR" ,COUNT(EMPNO) "NO OF EMPLOYES"


FROM EMP GROUP BY HIREDATE HAVING COUNT(*) IN (SELECT MAX(COUNT(EMPNO))
FROM EMP GROUP BY HIREDATE)

YE NO OF EMPLOYES
-- --------------
81 2

SQL> SELECT E1.ENAME,E2.ENAME FROM EMP E1,EMP E2 WHERE E1.MGR=E2.EMPNO AND

2 E1.MGR IN (SELECT E1.MGR FROM EMP E1 GROUP BY E1.MGR);

ENAME ENAME

---------- ----------

SCOTT JONES

FORD JONES

ALLEN BLAKE

WARD BLAKE

JAMES BLAKE

TURNER BLAKE

MARTIN BLAKE

MILLER CLARK

ADAMS SCOTT

JONES KING

CLARK KING

BLAKE KING
SMITH FORD

13 rows selected.

Вам также может понравиться