Exp14 Case Study1 Company Dtabase

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 8

CaseStusy1: Design and implementation of COMPANY database.

Consider the schema for COMPANY Database:

EMPLOYEE (SSN, Name, Address, Salary, Sex)


DEPARTMENT (DNo, DName, MgrSSN)
PROJECT (PNo, PName, PLocation, DNo)
WORKS_FOR(SSN,Dno)
WORKS_ON (SSN, Pno, Hours)

SCHEMA DIAGRAM:
ER DIAGRAM:

CREATE ALL TABLES:

CREATE TABLE EMPLOYEE(SSN INT PRIMARY KEY,ENAME VARCHAR(20),DOB


DATE,ADDRESS VARCHAR(40),SALARY REAL,SEX ENUM('MALE','FEMALE'));
CREATE TABLE DEPARTMENT (DNO INT PRIMARY KEY, DNAME VARCHAR(30),
MGR_SSN INT, FOREIGN KEY(MGR_SSN) REFERENCES EMPLOYEE(SSN));
CREATE TABLE PROJECT(PNO INT PRIMARY KEY, PNAME VARCHAR(40),
PLOCATION VARCHAR(30), DNO INT, FOREIGN KEY(DNO) REFERENCES
DEPARTMENT(DNO));
CREATE TABLE WORKS_FOR(SSN INT,DNO INT,PRIMARY KEY(SSN,DNO), FOREIGN
KEY(SSN) REFERENCES EMPLOYEE(SSN), FOREIGN KEY(DNO) REFERENCES
DEPARTMENT(DNO));
CREATE TABLE WORKS_ON (SSN INT, PNO INT, HOURS FLOAT, PRIMARY
KEY(SSN,PNO), FOREIGN KEY(SSN) REFERENCES EMPLOYEE(SSN), FOREIGN
KEY(PNO) REFERENCES PROJECT(PNO));

INSERT INTO TABLES

INSERT INTO EMPLOYEE VALUES (101,’AMIT’, ‘2000-03-30’,’HEBBAL’,40000,


’MALE’);

INSERT INTO DEPARTMENT VALUES (1, ‘RESEARCH’, 103);


INSERT INTO PROJECT VALUES (501,'DATA ANALYTICS','MUMBAI',1);

INSERT INTO WORKS_FOR VALUES (101,1);


INSERT INTO WORKS_ON VALUES (101,501,4);

Write and Execute the SQL Queries for the following statements:

1. Make a list of all project numbers for projects that involve an employee whose last name
is ‘Ganesh’, either as a worker or as a manager of the department that controls the project.

(SELECT DISTINCT P.PNO FROM PROJECT P, DEPARTMENT D, EMPLOYEE E WHERE


P.DNO=D.DNO AND D.MGR_SSN=E.SSN AND E.ENAME='GANESH')
UNION
(SELECT DISTINCT P.PNO FROM PROJECT P, WORKS_ON W, EMPLOYEE E WHERE
P.PNO=W.PNO AND E.SSN=W.SSN AND E.ENAME='GANESH');

2. Show the resulting salaries if every employee working on the ‘IoT’ project is given a 10
percent raise.

SELECT E.ENAME, E.SALARY AS PRESENT_SAL,1.1 * E.SALARY AS


INCREASED_SAL FROM EMPLOYEE E, WORKS_ON W, PROJECT P WHERE
E.SSN=W.SSN AND W.PNO=P.PNO AND P.PNAME='IOT';

3. Find the sum of the salaries of all employees of the ‘Accounts’ department, as well as the
maximum salary, the minimum salary, and the average salary in this department
SELECT SUM(E.SALARY), MAX(E.SALARY), MIN(E.SALARY), AVG(E.SALARY)
FROM EMPLOYEE E JOIN WORKS_FOR W ON(E.SSN=W.SSN) JOIN DEPARTMENT D
ON(W.DNO=D.DNO) WHERE D.DNAME='RESEARCH';

4. For each project on which more than ONE employee(s) work, retrieve the project
number, the project name, and the number of employees who work on the project.

SELECT P.PNO, P.PNAME, COUNT(*)


FROM PROJECT P, WORKS_ON W
WHERE W.PNO=P.PNO
GROUP BY P.PNO, P.PNAME
HAVING COUNT(*)>1;

5. For each project, retrieve the project number, the project name, and the number of
employees from department 3 who work on the project.

SELECT P.PNO, P.PNAME, COUNT(*)


FROM PROJECT P, WORKS_ON W, EMPLOYEE E
WHERE P.PNO=W.PNO AND W.SSN=E.SSN AND P.DNO=3
GROUP BY P.PNO, P.PNAME;

6. Count the number of Male & Female Employees in the COMPANY.

SELECT COUNT(IF (SEX='MALE',1,NULL)) AS MALE,


COUNT(IF (SEX='FEMALE',1,NULL)) AS FEMALE
FROM EMPLOYEE;

7. Display the count of Male and Female Employees working for Department 2.

SELECT (SELECT COUNT(*) FROM


EMPLOYEE E,WORKS_FOR W
WHERE E.SSN=W.SSN AND W.DNO=2 AND E.SEX='MALE') AS MALE, (SELECT
COUNT(*) AS MALE FROM EMPLOYEE E,WORKS_FOR W WHERE E.SSN=W.SSN
AND W.DNO=2 AND E.SEX='FEMALE') AS FEMALE;

8. Display the Average working hours for all the projects.

SELECT PNO,AVG(HOURS) AS AVG_TIME


FROM WORKS_ON
GROUP BY PNO
ORDER BY PNO;

9. Find the avg working hours of all female employees.


SELECT (SELECT SUM(HOURS)
FROM EMPLOYEE E, WORKS_ON W
WHERE E.SSN=W.SSN AND E.SEX='FEMALE')/(SELECT COUNT(DISTINCT E.SSN)
FROM EMPLOYEE E, WORKS_ON W WHERE E.SSN=W.SSN AND E.SEX='FEMALE')
AS AVG_HOURS;

10. Display the list of employees of age above 25.

SELECT ENAME, DOB, TIMESTAMPDIFF(YEAR, DOB, CURDATE()) AS AGE FROM


EMPLOYEE
WHERE TIMESTAMPDIFF(YEAR, DOB, CURDATE())>25;

11. Display SSN, Name and Age of Employees working on Project 501.

SELECT SSN, ENAME, TIMESTAMPDIFF(YEAR,DOB,CURDATE()) AS AGE


FROM EMPLOYEE
WHERE SSN IN(SELECT SSN FROM WORKS_ON WHERE PNO=501);

12. Display SSN, Name and Age of Employees NOT working on Project 501.

SELECT SSN, ENAME, TIMESTAMPDIFF(YEAR,DOB,CURDATE()) AS AGE


FROM EMPLOYEE
WHERE SSN NOT IN(SELECT SSN FROM WORKS_ON WHERE PNO=501);

13. Display the Employee name and Address who work for ‘Research’ Department
(USING JOINS).
SELECT DISTINCT ENAME, ADDRESS FROM((EMPLOYEE E JOIN WORKS_FOR W ON
E.SSN=W.SSN) JOIN DEPARTMENT D ON W.DNO=D.DNO AND
D.DNAME='RESEARCH');

Use of Conditional Operators.

SELECT IF(1>3,'TRUE','FALSE');

14. Display SSN, Name and HE/SHE for all employees respectively.

SELECT SSN,ENAME,IF((SELECT SEX)='MALE','HE','SHE') AS GENDER FROM


EMPLOYEE;

15. Display SSN, Name and AGE as Major or Minor for all employees.

SELECT SSN,ENAME,IF((SELECT TIMESTAMPDIFF(YEAR,DOB, CURDATE()))>18,


'MAJOR','MINOR') AS AGE FROM EMPLOYEE;
CREATING & USING VIEWS

16. Create Views for FEMALE employees to check Age>22 and Salary>25000

 CREATE VIEW CHECKSAL_F AS SELECT * FROM EMPLOYEE WHERE


TIMESTAMPDIFF(YEAR,DOB,CURDATE())>22 AND SEX='FEMALE' AND
SALARY>25000;

 SELECT * FROM CHECKSAL_F;

17. Create Views for MALE employees to check Age>22 and Salary>25000

 CREATE VIEW CHECKSAL_M AS SELECT * FROM EMPLOYEE WHERE


TIMESTAMPDIFF(YEAR,DOB,CURDATE())>22 AND SEX='MALE' AND
SALARY>25000;

 SELECT * FROM CHECKSAL_M;

USE OF TRIGGERS

DELIMITER //

CREATE TRIGGER SALCHECK


BEFORE INSERT ON EMPLOYEE
FOR EACH ROW
IF NEW.SALARY < 0 THEN
SET NEW.SALARY =9999;
END IF;//

DELIMITER ;

INSERT INTO EMPLOYEE VALUES(200,'NEHA','1995-09-12', 'BELLANDUR',-


100,'FEMALE');

SELECT * FROM EMPLOYEE;

You might also like