[go: up one dir, main page]

0% found this document useful (0 votes)
46 views12 pages

Case Study On Employee Database Queries - Lab

The document outlines the creation of database tables for a departmental employee management system, including tables for departments, employees, leave types, and employee leaves. It also includes various SQL queries for managing and retrieving employee data, such as joining dates, salary ranges, and leave records. Additionally, it provides examples of data insertion and specific queries to analyze employee and leave information based on different criteria.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
46 views12 pages

Case Study On Employee Database Queries - Lab

The document outlines the creation of database tables for a departmental employee management system, including tables for departments, employees, leave types, and employee leaves. It also includes various SQL queries for managing and retrieving employee data, such as joining dates, salary ranges, and leave records. Additionally, it provides examples of data insertion and specific queries to analyze employee and leave information based on different criteria.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 12

CREATE TABLE DEPT

(
DEPTNO NUMBER(2) CONSTRAINT DEPT_PK PRIMARY KEY,
DEPTNAME VARCHAR2(20) CONSTRAINT DEPT_DEPTNAME_U UNIQUE,
HOD VARCHAR2(20)
);

CREATE TABLE LEAVES


(
LEAVETYPE CHAR(1) CONSTRAINT LEAVES_PK PRIMARY KEY,
LEAVENAME VARCHAR2(20),
NOLEAVES NUMBER(2) CONSTRAINT LEAVES_NOLEAVES_CHK CHECK (
NOLEAVES <= 20)
);

CREATE TABLE EMPLOYEE


(
EMPNO NUMBER(5) CONSTRAINT EMPLOYEE_PK PRIMARY KEY,
EMPNAME VARCHAR2(20),
SAL NUMBER(5) CONSTRAINT EMPLOYEE_SAL_CHK CHECK ( SAL >=
1000),
DEPTNO NUMBER(2) CONSTRAINT EMPLOYEE_DEPTNO_FK REFERENCES
DEPT(DEPTNO),
DESG VARCHAR2(20),
DJ DATE,
);

CREATE TABLE EMP_LEAVES


(
EMPNO NUMBER(5) CONSTRAINT EMP_LEAVES_EMPNO_FK REFERENCES
EMPLOYEE(EMPNO),
LEAVETYPE CHAR(1) CONSTRAINT EMP_LEAVES_LEAVETYPE_FK
REFERENCES LEAVES(LEAVETYPE)
CONSTRAINT EMP_LEAVES_LEAVETYPE_NN NOT NULL,
STDATE DATE,
ENDDATE DATE,
CONSTRAINT EMP_LEAVES_PK PRIMARY KEY (EMPNO,STDATE),
CONSTRAINT EMP_LEAVES_DATES_CHK CHECK (STDATE <= ENDDATE)
);

INSERT INTO LEAVES VALUES('S','SICK',15);


INSERT INTO LEAVES VALUES('C','CASUAL',15);
INSERT INTO LEAVES VALUES('E','EARNING',5);
INSERT INTO LEAVES VALUES('O','OVERTIME',5);

INSERT INTO DEPT VALUES(1,'MAINFRAME','GEORGE');


INSERT INTO DEPT VALUES(2,'CLIENT/SERVER','BILL');
INSERT INTO DEPT VALUES(3,'SYSTEMS','GARRY');
INSERT INTO DEPT VALUES(4,'INTERNET','PAUL');
INSERT INTO DEPT VALUES(5,'ACCOUNTS','ANDY');

INSERT INTO EMPLOYEE VALUES(101,'GEORGE',12000,1,'12-JUL-


2001','PM');
INSERT INTO EMPLOYEE VALUES(102,'BILL',12000,2,'14-JUL-2001','PM');
INSERT INTO EMPLOYEE VALUES(103,'GARRY',15000,3,'1-JUL-2001','PM');
INSERT INTO EMPLOYEE VALUES(104,'PAUL',11000,4,'2-JUL-2001','PL');
INSERT INTO EMPLOYEE VALUES(105,'ANDY',7000,5,'25-JUN-2001','AM');
INSERT INTO EMPLOYEE VALUES(106,'KEATS',10000,1,'17-JUL-2001','SA');
INSERT INTO EMPLOYEE VALUES(107,'JOEL',8000,2,'15-JUL-2001','SP');
INSERT INTO EMPLOYEE VALUES(108,'ROBERTS',7500,2,'15-JUL-
2001','PRO');
INSERT INTO EMPLOYEE VALUES(109,'HERBERT',8000,4,'22-JUL-
2001','SA');
INSERT INTO EMPLOYEE VALUES(110,'MICHEAL',6000,4,'15-JUL-
2001','PRO');

INSERT INTO EMP_LEAVES VALUES(102,'S','23-JUL-2001','25-JUL-2001');


INSERT INTO EMP_LEAVES VALUES(104,'C','24-JUL-2001','25-JUL-2001');
INSERT INTO EMP_LEAVES VALUES(104,'S','28-JUL-2001','29-JUL-2001');
INSERT INTO EMP_LEAVES VALUES(101,'C','27-JUL-2001','28-JUL-2001');
INSERT INTO EMP_LEAVES VALUES(106,'O','28-JUL-2001','29-JUL-2001');
INSERT INTO EMP_LEAVES VALUES(109,'C','1-AUG-2001','2-AUG-2001');
INSERT INTO EMP_LEAVES VALUES(103,'C','2-AUG-2001','5-AUG-2001');
INSERT INTO EMP_LEAVES VALUES(105,'S','17-AUG-2001',NULL);
INSERT INTO EMP_LEAVES VALUES(108,'S','23-AUG-2001',NULL);

COMMIT;

Queries Related To Employees Management Application


DISPLAY EMPLOYEES WHO HAVE JOINED IN THE LAST 15 DAYS

SELECT * FROM EMPLOYEE


WHERE SYSDATE - DJ <= 15;

DISPLAY EMPLOYEES WHO HAVE JOINED TODAY

SELECT * FROM EMPLOYEE


WHERE TRUNC(SYSDATE) = TRUNC(DJ);

NOTE:
TRUNC FUNCTION IS REQUIRED IN ORDER TO IGNORE TIME DIFFERENCE
BETWEEN TWO DATES.

DISPLAY WHO HAVE JOINED IN THE LAST WEEK OF THE MONTH

SELECT * FROM EMPLOYEE


WHERE DJ >= LAST_DAY(DJ) - 7;

DISPLAY WHEN EMPLOYEE 102 HAS TAKEN HIS FIRST SALARY

SELECT EMPNAME, LAST_DAY(DJ) + 1 "FIRST SALARY DATE"


FROM EMPLOYEE
WHERE EMPNO = 102;
DELETE EMPLOYEES WHO HAVE JOINED THE CURRENT MONTH

DELETE FROM EMPLOYEE WHERE TO_CHAR(SYSDATE,'MMYYYY') =


TO_CHAR(DJ,'MMYYYY')

DETAILS OF EMPLOYEES WHOSE SALARY RANGE IS BETWEEN 12,000 TO 14,000

SELECT * FROM EMPLOYEE


WHERE SAL BETWEEN 12000 AND 14000;

DETAILS OF EMPLOYEES WHO BELONG TO DEPARTMENT 1 OR 3

SELECT * FROM EMPLOYEE


WHERE DEPTNO IN (1,3);

SELECT NAMES OF EMPLOYEES WHOSE NAMES START WITH 'M'

SELECT EMPNAME
FROM EMPLOYEE WHERE EMPNAME LIKE 'M%';

DELETE THOSE EMPLOYEES WHERE NAME HAS THE CHARACTER 'A'

DELETE FROM EMPLOYEE


WHERE EMPNAME LIKE '%A%';
SELECT EMPLOYEES WHERE SECOND CHARACTER IN NAME IS 'S'

SELECT * FROM EMPLOYEE


WHERE EMPNAME LIKE '_S%';
SELECT THOSE EMPLOYEES WHOSE SALARY IS NOT KNOWN

SELECT * FROM EMPLOYEE


WHERE SAL IS NULL;
DISPLAY THE DETAILS OF EMPLOYEES WHO HAVE JOINED IN THE LAST 20 DAYS

SELECT * FROM EMPLOYEE


WHERE SYSDATE - DJ <= 20;
DISPLAY THE DETAILS OF LEAVES IF THE NUMBER OF LEAVES IS MORE THAN 10

SELECT * FROM EMP_LEAVES


WHERE ENDDATE - STDATE > 10;
DISPLAY EMPNO,EMPNAME,DATE OF JOINING,NUMBER OF MONTHS OF EXPERIENCE AND
BASIC SALARY

SELECT EMPNO, EMPNAME, DJ, MONTHS_BETWEEN(SYSDATE,DJ) EXP, SAL


FROM EMPLOYEE;

DISPLAY DETAILS OF EMPLOYEES WHO ARE DRAWING MORE THAN 10000 AND THE
DESIGNATION IS CONTAINING MORE THAN 3 LETTERS
SELECT * FROM EMPLOYEE
WHERE SAL > 10000 AND LENGTH(DESG) > 3;

DISPLAY DETAILS OF EMPLOYEES WHOSE NAME IS CONTAINING MORE THAN ONE SPACE

SELECT * FROM EMPLOYEE


WHERE INSTR(EMPNAME, ' ' , 1, 2) <> 0;

DISPLAY DETAILS OF LEAVES WHERE THE LEAVE STARTED IN THE PREVIOUS MONTH AND
THE LEAVE IS NOT YET COMPLETED

SELECT * FROM EMP_LEAVES


WHERE STDATE BETWEEN LAST_DAY( ADD_MONTHS(STDATE,-2)) + 1 AND
LAST_DAY( ADD_MONTHS(STDATE,-1)) + 1
AND ENDDATE IS NULL;
DISPLAY DETAILS OF EMPLOYEES WHERE BASIC SALARY IS MORE THAN 10000 OR
DESIGNATION IS PL AND EXPERIENCE IS MORE THAN 3 YEARS

SELECT * FROM EMPLOYEE


WHERE SAL > 10000 OR DESG = 'PL' AND MONTHS_BETWEEN(SYSDATE,DJ) >
36;

DISPLAY EMPNO,NAME AND FIRST NAME OF THE EMPLOYEE AND WHEN EMPLOYEE HAS
TAKEN HIS FIRST SALARY

SELECT SUBSTR(EMPNAME,1,INSTR(EMPNAME,' ') -1) FNAME, LAST_DAY(DJ)


+ 1
FROM EMPLOYEE;
FIND THE AVERAGE SALARY OF THE EMPLOYEE WHO JOINED IN THE CURRENT YEAR

SELECT AVG(SAL)
FROM EMPLOYEE
WHERE TO_CHAR(DJ,'YYYY') = TO_CHAR(SYSDATE,'YYYY');

FIND THE AVERAGE SALARY OF EACH DEPARTMENT BY TAKING EMPLOYEES WHO EARN
MORE THAN 10000

SELECT DEPTNO, AVG(SAL)


FROM EMPLOYEE
WHERE SAL > 10000
GROUP BY DEPTNO;
DISPLAY DETAILS OF EMPLOYEES ALONG WITH BONUS WHICH WILL BE 100% ON SALARY
FOR EMPLOYEES OF DEPARTMENT 1 AND 75% FOR OTHERS

SELECT EMPNO, EMPNAME, DESG, DJ, SAL, SAL *


DECODE(DEPTNO,1,1.0,0.75) BONUS
FROM EMPLOYEE;

DISPLAY DETAILS OF LEAVES TAKEN BY EMPLOYEES WHERE TYPE OF LEAVE IS 'S' AND LEAVE
STARTED ON MONDAY

SELECT * FROM EMP_LEAVES


WHERE LEAVETYPE = 'S' AND TO_CHAR(STDATE,'fmDAY') = 'MONDAY';
DISPLAY EMPNO AND NO. OF LEAVES TAKEN BY EMPLOYEE

SELECT EMPNO, SUM(ENDDATE-STDATE) "NO LEAVES"


FROM EMP_LEAVES
GROUP BY EMPNO;
DISPLAY DESIGNATION AND TOTAL SALARY OF THE EMPLOYEES OF DESIGNATION

SELECT DESG,SUM(SAL)
FROM EMPLOYEE
GROUP BY DESG;
FIND THE SUM OF SALARIES IN EACH DESIGNATION IN EACH DEPARTMENT

SELECT DEPTNO, DESG, SUM(SAL)


FROM EMPLOYEE
GROUP BY DEPTNO, DESG;

FIND THE AVERAGE SALARY OF EACH DEPARTMENT AND SELECT ONLY THOSE EMPLOYEES
HAVING SALARY MORE THAN 10000

SELECT DEPTNO, AVG(SAL)


FROM EMPLOYEE
WHERE SAL > 10000
GROUP BY DEPTNO;

DISPLAY MAXIMUM SALARY

SELECT MAX(SAL) FROM EMPLOYEE;


DISPLAY EMPNO ,TYPE OF LEAVE,TOTAL NO OF LEAVES TAKEN

SELECT EMPNO,LEAVETYPE, SUM( ENDDATE -STDATE) "NO. LEAVES"


FROM EMP_LEAVES
GROUP BY EMPNO, LEAVETYPE;

DISPLAY DEPTNO,MIN SALARY,MAX SALARY ,DIFFERENCE BETWEEN MAX AND MIN SALARY
FOR THE DEPARTMENTS THAT HAVE MORE THAN 2 EMPLOYEES

SELECT DEPTNO, MIN(SAL), MAX(SAL), MAX(SAL) - MIN(SAL)


FROM EMPLOYEE
GROUP BY DEPTNO
HAVING COUNT(*) > 2;
DISPLAY LEAVETYPE AND HOW MANY TIMES EACH EMPLOYEE HAS TAKEN LEAVE
SELECT LEAVETYPE, EMPNO, COUNT(*)
FROM EMP_LEAVES
GROUP BY LEAVETYPE,EMPNO;
DISPLAY EMPNO OF THE EMPLOYEE WHO HAS TAKEN MORE THAN 2 LEAVES IN THE
CURRENT MONTH

SELECT EMPNO
FROM EMP_LEAVES
WHERE TO_CHAR(STDATE,'MMYYYY') = TO_CHAR(SYSDATE,'MMYYYY')
GROUP BY EMPNO
HAVING SUM(ENDDATE -STDATE) > 2;

DISPLAY DESIGNATION THAT CONTAIN EITHER MORE THAN 5 EMPLOYEES OR AVERAGE


SALARY MORE THAN 12000

SELECT DESG
FROM EMPLOYEE
GROUP BY DESG
HAVING COUNT(*) > 5 OR AVG(SAL) > 12000;

DISPLAY THE TYPE OF LEAVE THAT IS TAKEN BY MORE THAN 3 EMPLOYEES

SELECT LEAVETYPE
FROM EMP_LEAVES
GROUP BY LEAVETYPE
HAVING COUNT (DISTINCT EMPNO) > 3;
DISPLAY EMPNO,EMPNAME,DATE OF JOINING,DEPTNAME, SALARY AND HOD

SELECT EMPNO, EMPNAME, DJ, DEPTNAME,SAL, HOD


FROM EMPLOYEE E, DEPT D
WHERE E.DEPTNO = D.DEPTNO;
DISPLAY EMPNO,STDATE,ENDDATE,LEAVENAME FOR ALL THE COMPLETED LEAVES

SELECT EMPNO, STDATE, ENDDATE, LEAVENAME


FROM EMP_LEAVES EL, LEAVES L
WHERE EL.LEAVETYPE = L.LEAVETYPE AND ENDDATE IS NOT NULL;
DISPLAY DEPTNO,DEPTNAME,EMPNAME,YEARS OF EXPERIENCE FOR ALL THE EMPLOYEES
WITH DESIG 'PRO'

SELECT E.DEPTNO, DEPTNAME, EMPNAME, TRUNC(MONTHS_BETWEEN(SYSDATE,DJ)


/ 12)
FROM EMPLOYEE E, DEPT D
WHERE E.DEPTNO = D.DEPTNO AND DESG ='PRO';

DISPLAY EMPNO,EMPNAME,DEPTNAME,LEAVENAME,STDATE AND MAX NO. OF LEAVES IN


THE CATEGORY

SELECT EL.EMPNO, EMPNAME, DEPTNAME, LEAVENAME,STDATE, NOLEAVES


FROM EMPLOYEE E, DEPT D, EMP_LEAVES EL, LEAVES L
WHERE E.DEPTNO = D.DEPTNO AND EL.LEAVETYPE = L.LEAVETYPE
AND EL.EMPNO = E.EMPNO;
DISPLAY THE DETAILS OF LEAVES TAKEN BY EMPLOYEES WHO ARE HAVING 'DUKE' AS THE
HEAD OF THE DEPARTMENT.

SELECT EL.*
FROM EMP_LEAVES EL, EMPLOYEE E,DEPT D
WHERE E.EMPNO = EL.EMPNO
AND E.DEPTNO = D.DEPTNO AND HOD = 'DUKE';
DISPLAY THE DETAILS OF EMPLOYEES WHO HAVE JOINED AFTER EMPLOYEE 'WILLY' HAS
JOINED.

SELECT E1.*
FROM EMPLOYEE E1, EMPLOYEE E2
WHERE E2.EMPNAME = 'WILLY'
AND E1.DJ > E2.DJ;

SELECT THE EMPLOYEES WHO HAVE TAKEN LEAVE IN THE PRESENT MONTH

SELECT * FROM EMPLOYEE


WHERE EMPNO IN
( SELECT EMPNO FROM EMP_LEAVES
WHERE TO_CHAR(SYSDATE,'MMYYYY') = TO_CHAR(STDATE,'MMYYYY')
);

DISPLAY THE DETAILS OF DEPARTMENTS WHICH HAVE MORE THAN 2 EMPLOYEES

SELECT * FROM DEPT


WHERE DEPTNO IN
( SELECT DEPTNO
FROM EMPLOYEE
GROUP BY DEPTNO
HAVING COUNT(*) > 2);

DISLAY THE DETAILS OF EMPLOYEES WHO HAVE TAKEN MORE THAN 10 LEAVES

SELECT * FROM EMPLOYEE


WHERE EMPNO IN
( SELECT EMPNO
FROM EMP_LEAVES
GROUP BY EMPNO
HAVING SUM( ENDDATE - STDATE) > 10
);

DISPLAY THE DETAILS OF DEPARTMENTS WHICH HAVE MORE THAN 3 EMPLOYEES JOINED IN
THE CURRENT YEAR
SELECT * FROM DEPT
WHERE DEPTNO IN
( SELECT DEPTNO
FROM EMPLOYEE
WHERE TO_CHAR(DJ,'YYYY') = TO_CHAR(SYSDATE,'YYYY')
GROUP BY DEPTNO
HAVING COUNT(*) > 3
);

DISPLAY THE NAME OF THE EMPLOYEE DRAWING THE MAX SALARY

SELECT EMPNAME FROM EMPLOYEE


WHERE SAL =
( SELECT MAX(SAL)
FROM EMPLOYEE
);

DISPLAY THE DETAILS OF EMPLOYEES WHO HAS TAKEN MORE THAN 10 SICKLEAVES OR
MORE THAN 15 LEAVES

SELECT * FROM EMPLOYEE


WHERE EMPNO IN
( SELECT EMPNO
FROM EMP_LEAVES
WHERE LEAVETYPE='S'
GROUP BY EMPNO
HAVING SUM(ENDDATE - STDATE ) > 10
)
OR EMPNO IN
( SELECT EMPNO
FROM EMP_LEAVES
GROUP BY EMPNO
HAVING SUM(ENDDATE - STDATE ) > 15
);

DISPLAY EMPNO,EMPNAME,DESIGNATION AND DEPTNAME OF EMPLOYEES WHO HAVE


NOT TAKEN ANY LEAVES IN THE CURRENT YEAR
SELECT EMPNO,EMPNAME,DESG,DEPTNAME
FROM EMPLOYEE E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
AND EMPNO NOT IN
( SELECT EMPNO
FROM EMP_LEAVES
WHERE TO_CHAR(STDATE,'YYYY') = TO_CHAR(SYSDATE,'YYYY')
)
DISPLAY THE DETAILS OF HOD'S

SELECT * FROM EMPLOYEE


WHERE EMPNAME IN
( SELECT HOD
FROM DEPT
);

DISPLAY THE DEPARTMENTS IN WHICH EMPLOYEES HAVE TAKEN MAX NO OF LEAVES

SELECT * FROM DEPT


WHERE DEPTNO IN
(
SELECT DEPTNO
FROM EMP_LEAVES EL, EMPLOYEE E
WHERE EL.EMPNO = E.EMPNO
GROUP BY DEPTNO
HAVING SUM(ENDDATE-STDATE) =
(
SELECT MAX(SUM(ENDDATE-STDATE))
FROM EMP_LEAVES EL, EMPLOYEE E
WHERE EL.EMPNO = E.EMPNO
GROUP BY DEPTNO
)
);

DISPLAY EMPNO,NOOFLEAVES FOR ALL EMPLOYEES WHO ARE HEADED BY 'STEVE'

SELECT EMPNO, SUM(ENDDATE-STDATE)


FROM EMP_LEAVES
WHERE EMPNO IN
(
SELECT EMPNO FROM EMPLOYEE
WHERE DEPTNO IN
(
SELECT DEPTNO
FROM DEPT
WHERE HOD = 'STEVE'
)
)
GROUP BY EMPNO;
DISPLAY DETAILS OF EMPLOYEES DRAWING TOP 2 HIGHEST SALARIES

SELECT * FROM EMPLOYEE E


WHERE 2 > ( SELECT COUNT(*)
FROM EMPLOYEE
WHERE SAL > E.SAL);

You might also like