You are on page 1of 8

SQL Assignment # 1

A small IT firm designing business software for its clients wants to store and manage its data.
It has identified following entities for which, it will maintain data.
1. Clients
2. Employees
3. Departments
4. Projects
5. EmpProjectTasks *
* This will hold data of employees working on projects.
You are required to create the tables using the information provided below. Once tables are ready, fill
in the given data in each table.
NOTE: Submit the CREATE TABLE, INSERT and SELECT commands as answer to this
assignment.
The tables below describe attributes for each entity.
Clients
Attribute Name Attribute Type Constraint Remarks
Client_ID NUMBER(4) Primary Key
Cname VARCHAR2(40) Not Null
Address VARCHAR2(30)
Email VARCHAR2(30) Unique
Phone NUMBER(10)
Business VARCHAR2(20) Not Null Business type of client
like Manufacturer,
Reseller, Consultant,
Professional etc.

Employees
Attribute Name Attribute Type Constraint Remarks
Empno NUMBER(4) Primary Key
Ename VARCHAR2(20) Not Null
Job VARCHAR2(15)
Salary NUMBER(7) Must be positive Use CHECK constraint
to ensure salary is > 0
Deptno NUMBER(2) Foreign Key Deptno as per
Departments table

Departments
Attribute Name Attribute Type Constraint Remarks
Deptno NUMBER(2) Primary Key
Dname VARCHAR2(15) Not Null
Loc VARCHAR2(20)

Projects
Attribute Name Attribute Type Constraint Remarks
Project_ID NUMBER(3) Primary Key
Descr VARCHAR2(30) Not Null Description of project
like ‘Accounting’ ,
‘Inventory’, ‘Payroll’
etc.
Start_Date DATE Start date of project
Planned_End_Date DATE Planned End date of
project
Actual_End_date DATE Must be later than Actual End date of
Planned_End_Date project (Use CHECK
constraint)
Budget NUMBER(10) Must be positive Use CHECK constraint
to ensure budget is > 0
Client_ID NUMBER(4) Foreign Key Client ID from Clients
table
EmpProjectTasks
Attribute Name Attribute Type Constraint Remarks
Project_ID NUMBER(3) Primary Key, Foreign Key Composite primary key
Empno NUMBER(4) Primary Key, Foreign Key and foreign keys
referring Projects and
Employees table
Start_Date DATE Start date when
employee begins task
on this project
End_Date DATE End date when
employee finishes task
on this project
Task VARCHAR2(25) Not Null Task performed by
employee like
designing, coding,
review, testing etc.
Status VARCHAR2(15) Not Null Status of task like ‘in
progress’,
‘complete’,’cancelled’

Clients
Client ID Cname Addres Email Phone Business
s
1001 ACME Utilities Noida contact@acmeutil.com 956788003 Manufacturing
2
1002 Trackon Consultants Mumbai consult@trackon.com 873421009 Consultant
0
1003 MoneySaver Kolkata save@moneysaver.co 779988665 Reseller
Distributors m 5
1004 Lawful Corp Chennai justice@lawful.com 921034221 Professional
9

Employees
Emp Enam Job Sala Dept
no e ry no
7001 Sande Analyst 250 10
ep 00
7002 Rajesh Designer 300 10
00
7003 Madha Develope 400 20
v r 00
7004 Manoj Develope 400 20
r 00
7005 Abhay Designer 350 10
00
7006 Uma Tester 300 30
00
7007 Gita Tech. 300 40
Writer 00
7008 Priya Tester 350 30
00
7009 Nutan Develope 450 20
r 00
7010 Smita Analyst 200 10
00
7011 Anand Project 650 10
Mgr 00

Departments
Deptno Dname Loc
10 Design Pune
20 Developm Pune
ent
30 Testing Mumbai
40 Document Mumbai

Projects
Project_I Descr Start_Dat Planned_End_Da Actual_End_date Budge Client_I
D e te t D
401 Inventory 01-Apr-11 01-Oct-11 31-Oct-11 150000 1001
402 Accounting 01-Aug-11 01-Jan-12 500000 1002
403 Payroll 01-Oct-11 31-Dec-11 75000 1003
404 Contact Mgmt 01-Nov-11 31-Dec-11 50000 1004

EmpProjectTasks
Project Emp Start_D End_Da Task Status
_ID no ate te
401 7001 01-Apr- 20-Apr- System Complet
11 11 Analysis ed
401 7002 21-Apr- 30-May- System Complet
11 11 Design ed
401 7003 01-Jun- 15-Jul- Coding Complet
11 11 ed
401 7004 18-Jul- 01-Sep- Coding Complet
11 11 ed
401 7006 03-Sep- 15-Sep- Testing Complet
11 11 ed
401 7009 18-Sep- 05-Oct- Code Complet
11 11 Change ed
401 7008 06-Oct- 16-Oct- Testing Complet
11 11 ed
401 7007 06-Oct- 22-Oct- Documentat Complet
11 11 ion ed
401 7011 22-Oct- 31-Oct- Sign of Complet
11 11 ed
402 7010 01-Aug- 20-Aug- System Complet
11 11 Analysis ed
402 7002 22-Aug- 30-Sep- System Complet
11 11 Design ed
402 7004 01-Oct- Coding In
11 Progress

SQL Assignment 1 – Answers


CREATE TABLE CLIENTS(
CLIENT_ID NUMBER(4) PRIMARY KEY,
CNAME VARCHAR2(40) NOT NULL,
ADDRESS VARCHAR2(30),
EMAIL VARCHAR2(30) UNIQUE,
PHONE NUMBER(10),
BUSINESS VARCHAR2(20) NOT NULL);

Insert into CLIENTS


(CLIENT_ID,CNAME,ADDRESS,EMAIL,PHONE,BUSINESS)
values (1001,'ACME
Utilities','Noida','contact@acmeutil.com',9567880032,'Man
ufacturing');
Insert into CLIENTS
(CLIENT_ID,CNAME,ADDRESS,EMAIL,PHONE,BUSINESS)
values (1002,'Trackon
Consultants','Mumbai','consult@trackon.com',8734210090,
'Consultant');
Insert into CLIENTS
(CLIENT_ID,CNAME,ADDRESS,EMAIL,PHONE,BUSINESS)
values (1003,'MoneySaver
Distributors','Bangalore','save@moneysaver.com',7799886
655,'Reseller');
Insert into CLIENTS
(CLIENT_ID,CNAME,ADDRESS,EMAIL,PHONE,BUSINESS)
values (1004,'Lawful
Corp','Chennai','justice@lawful.com',9210342219,'Professi
onal');
CREATE TABLE DEPARTMENTS(
DEPTNO NUMBER(2) PRIMARY KEY,
DNAME VARCHAR2(15) NOT NULL,
LOC VARCHAR2(20));

Insert into DEPARTMENTS (DEPTNO,DNAME,LOC) values


(10,'Design','Pune');
Insert into DEPARTMENTS (DEPTNO,DNAME,LOC) values
(20,'Development','Pune');
Insert into DEPARTMENTS (DEPTNO,DNAME,LOC) values
(30,'Testing','Mumbai');
Insert into DEPARTMENTS (DEPTNO,DNAME,LOC) values
(40,'Document','Mumbai');

CREATE TABLE EMPLOYEES(


EMPNO NUMBER(4) PRIMARY KEY,
ENAME VARCHAR2(20) NOT NULL,
JOB VARCHAR2(15),
SALARY NUMBER(7) CHECK (SALARY > 0),
DEPTNO NUMBER(2) REFERENCES
DEPARTMENTS(DEPTNO));

Insert into EMPLOYEES


(EMPNO,ENAME,JOB,SALARY,DEPTNO) values
(7001,'Sandeep','Analyst',25000,10);
Insert into EMPLOYEES
(EMPNO,ENAME,JOB,SALARY,DEPTNO) values
(7002,'Rajesh','Designer',30000,10);
Insert into EMPLOYEES
(EMPNO,ENAME,JOB,SALARY,DEPTNO) values
(7003,'Madhav','Developer',40000,20);
Insert into EMPLOYEES
(EMPNO,ENAME,JOB,SALARY,DEPTNO) values
(7004,'Manoj','Developer',40000,20);
Insert into EMPLOYEES
(EMPNO,ENAME,JOB,SALARY,DEPTNO) values
(7005,'Abhay','Designer',35000,10);
Insert into EMPLOYEES
(EMPNO,ENAME,JOB,SALARY,DEPTNO) values
(7006,'Uma','Tester',30000,30);
Insert into EMPLOYEES
(EMPNO,ENAME,JOB,SALARY,DEPTNO) values
(7007,'Gita','Tech. Writer',30000,40);
Insert into EMPLOYEES
(EMPNO,ENAME,JOB,SALARY,DEPTNO) values
(7008,'Priya','Tester',35000,30);
Insert into EMPLOYEES
(EMPNO,ENAME,JOB,SALARY,DEPTNO) values
(7009,'Nutan','Developer',45000,20);
Insert into EMPLOYEES
(EMPNO,ENAME,JOB,SALARY,DEPTNO) values
(7010,'Smita','Analyst',20000,10);
Insert into EMPLOYEES
(EMPNO,ENAME,JOB,SALARY,DEPTNO) values
(7011,'Anand','Project Mgr',65000,10);

CREATE TABLE PROJECTS(


PROJECT_ID NUMBER(3) PRIMARY KEY,
DESCR VARCHAR2(30) NOT NULL,
START_DATE DATE,
PLANNED_END DATE DATE,
ACTUAL_END_DATE DATE,
BUDGET NUMBER(10) CHECK(BUDGET > 0),
CLIENT_ID NUMBER(4) REFERENCES
CLIENTS(CLIENT_ID));

Insert into PROJECTS


(PROJECT_ID,DESCR,START_DATE,PLANNED_END_DATE,ACT
UAL_END_DATE,BUDGET,CLIENT_ID) values
(401,'Inventory',to_date('01-APR-11','DD-MON-
RR'),to_date('01-OCT-11','DD-MON-RR'),to_date('31-OCT-
11','DD-MON-RR'),150000,1001);
Insert into PROJECTS
(PROJECT_ID,DESCR,START_DATE,PLANNED_END_DATE,ACT
UAL_END_DATE,BUDGET,CLIENT_ID) values
(402,'Accounting',to_date('01-AUG-11','DD-MON-
RR'),to_date('01-JAN-12','DD-MON-RR'),null,500000,1002);
Insert into PROJECTS
(PROJECT_ID,DESCR,START_DATE,PLANNED_END_DATE,ACT
UAL_END_DATE,BUDGET,CLIENT_ID) values
(403,'Payroll',to_date('01-OCT-11','DD-MON-
RR'),to_date('31-DEC-11','DD-MON-RR'),null,75000,1003);
Insert into PROJECTS
(PROJECT_ID,DESCR,START_DATE,PLANNED_END_DATE,ACT
UAL_END_DATE,BUDGET,CLIENT_ID) values (404,'Contact
Mgmt',to_date('01-NOV-11','DD-MON-RR'),to_date('31-DEC-
11','DD-MON-RR'),null,50000,1004);

CREATE TABLE EMPPROJECTTASKS(


PROJECT_ID NUMBER(3) REFERENCES
PROJECTS(PROJECT_ID),
EMPNO NUMBER(4) REFERENCES EMPLOYEES(EMPNO),
START_DATE DATE,
END_DATE DATE,
TASK VARCHAR2(25) NOT NULL,
STATUS VARCHAR2(15) NOT NULL,
PRIMARY KEY(PROJECT_ID,EMPNO));

Insert into EMPPROJECTTASKS


(PROJECT_ID,EMPNO,START_DATE,END_DATE,TASK,STATUS)
values (401,7001,to_date('01-APR-11','DD-MON-
RR'),to_date('20-APR-11','DD-MON-RR'),'System
Analysis','Completed');
Insert into EMPPROJECTTASKS
(PROJECT_ID,EMPNO,START_DATE,END_DATE,TASK,STATUS)
values (401,7002,to_date('21-APR-11','DD-MON-
RR'),to_date('30-MAY-11','DD-MON-RR'),'System
Design','Completed');
Insert into EMPPROJECTTASKS
(PROJECT_ID,EMPNO,START_DATE,END_DATE,TASK,STATUS)
values (401,7003,to_date('01-JUN-11','DD-MON-
RR'),to_date('15-JUL-11','DD-MON-
RR'),'Coding','Completed');
Insert into EMPPROJECTTASKS
(PROJECT_ID,EMPNO,START_DATE,END_DATE,TASK,STATUS)
values (401,7004,to_date('18-JUL-11','DD-MON-
RR'),to_date('01-SEP-11','DD-MON-
RR'),'Coding','Completed');
Insert into EMPPROJECTTASKS
(PROJECT_ID,EMPNO,START_DATE,END_DATE,TASK,STATUS)
values (401,7006,to_date('03-SEP-11','DD-MON-
RR'),to_date('15-SEP-11','DD-MON-
RR'),'Testing','Completed');
Insert into EMPPROJECTTASKS
(PROJECT_ID,EMPNO,START_DATE,END_DATE,TASK,STATUS)
values (401,7009,to_date('18-SEP-11','DD-MON-
RR'),to_date('05-OCT-11','DD-MON-RR'),'Code
Change','Completed');
Insert into EMPPROJECTTASKS
(PROJECT_ID,EMPNO,START_DATE,END_DATE,TASK,STATUS)
values (401,7008,to_date('06-OCT-11','DD-MON-
RR'),to_date('16-OCT-11','DD-MON-
RR'),'Testing','Completed');
Insert into EMPPROJECTTASKS
(PROJECT_ID,EMPNO,START_DATE,END_DATE,TASK,STATUS)
values (401,7007,to_date('06-OCT-11','DD-MON-
RR'),to_date('22-OCT-11','DD-MON-
RR'),'Documentation','Completed');
Insert into EMPPROJECTTASKS
(PROJECT_ID,EMPNO,START_DATE,END_DATE,TASK,STATUS)
values (401,7011,to_date('22-OCT-11','DD-MON-
RR'),to_date('31-OCT-11','DD-MON-RR'),'Sign
of','Completed');
Insert into EMPPROJECTTASKS
(PROJECT_ID,EMPNO,START_DATE,END_DATE,TASK,STATUS)
values (402,7010,to_date('01-AUG-11','DD-MON-
RR'),to_date('20-AUG-11','DD-MON-RR'),'System
Analysis','Completed');
Insert into EMPPROJECTTASKS
(PROJECT_ID,EMPNO,START_DATE,END_DATE,TASK,STATUS)
values (402,7002,to_date('22-AUG-11','DD-MON-
RR'),to_date('30-SEP-11','DD-MON-RR'),'System
Design','Completed');
Insert into EMPPROJECTTASKS
(PROJECT_ID,EMPNO,START_DATE,END_DATE,TASK,STATUS)
values (402,7004,to_date('01-OCT-11','DD-MON-
RR'),null,'Coding','In Progress');

SELECT * FROM CLIENTS;


SELECT * FROM DEPARTMENTS;
SELECT * FROM EMPLOYEES;
SELECT * FROM PROJECTS;
SELECT * FROM EMPPROJECTTASKS;

Given the tables created in Assignment #1, find solutions for the following.
1. Display customer details with business as ‘Consultant’
2. Display employee details who are not ‘Developers’
3. Display project details with budget > 100000
4. Display details of project that are already finished
5. Display employee names beginning with ‘M’
6. Display employee names ending with ‘a’
7. Display the number of months project ‘Inventory’ took for completion
8. Display the task that is ‘In Progress’
9. Display details of departments located in Pune
10. Display employee name and salary in descending order of salary
11. Display tasks in ascending order of end date
12. Display distinct jobs from Employees table
13. Display employee names in all uppercase
14. Display employee name, salary and bonus calculated as 25% of salary
15. Display concatenated string ‘Employee works as Job’ (e.g. Manoj works as Developer) for all
employees
16. Display day of week (e.g. Friday) for each start date of projects
17. Display position number of ‘@’ symbol in each email id of clients
18. Display first 3 characters of each client name
19. Display project budget values formatted as ‘$150,000’
20. Display planned end date and review date as 3 months after planned end date for each project
SQL Assignment # 2 - Answers
1. SELECT * FROM CLIENTS WHERE BUSINESS = 'Consultant';
2. SELECT * FROM EMPLOYEES WHERE JOB <> 'Developer';
3. SELECT * FROM PROJECTS WHERE BUDGET > 100000;
4. SELECT * FROM PROJECTS WHERE ACTUAL_END_DATE IS NOT NULL;
5. SELECT * FROM EMPLOYEES WHERE ENAME LIKE 'M%';
6. SELECT * FROM EMPLOYEES WHERE ENAME LIKE '%a';
7. SELECT ROUND(MONTHS_BETWEEN(ACTUAL_END_DATE,START_DATE)) AS MONTHS FROM
PROJECTS WHERE DESCR = 'Inventory';
8. SELECT * FROM EMPPROJECTTASKS WHERE STATUS = 'In Progress';
9. SELECT * FROM DEPARTMENTS WHERE LOC = 'Pune';
10. SELECT ENAME,SALARY FROM EMPLOYEES ORDER BY SALARY DESC;
11. SELECT TASK,END_DATE FROM EMPPROJECTTASKS ORDER BY END_DATE;
12. SELECT DISTINCT JOB FROM EMPLOYEES;
13. SELECT UPPER(ENAME) FROM EMPLOYEES;
14. SELECT ENAME,SALARY,SALARY * .25 AS BONUS FROM EMPLOYEES;
15. SELECT ENAME||' works as '||JOB FROM EMPLOYEES;
16. SELECT TO_CHAR(START_DATE,'Day'),START_DATE FROM PROJECTS;
17. SELECT EMAIL,INSTR(EMAIL,'@') FROM CLIENTS;
18. SELECT ENAME,SUBSTR(ENAME,1,3) FROM EMPLOYEES;
19. SELECT TO_CHAR(BUDGET,'$999,999') FROM PROJECTS;
20. SELECT PLANNED_END_DATE,ADD_MONTHS(PLANNED_END_DATE,3) AS REVIEW_DATE FROM
PROJECTS;

Given the tables created in Assignment #1, find solutions for the following.
1. Display count of clients
2. Display count of employees and sum of their salaries
3. Display max salary per department
4. Display min salary per job
5. Display average salary
6. Display sum of budget
7. Display count of ‘Coding’ task
8. Display department wise count and sum of salary of employees
9. Display client names and their project desc, start date and budget
10. Display department name, employee name and job
11. Display names of employees doing ‘System Analysis’ along with project name
12. Display job wise count
13. Display employee numbers not present in EmpProjectTasks table using necessary set operator
14. Display employee numbers present in both Employees and EmpProjectTasks table using
necessary set operator
15. Display all employee numbers present in both Employees and EmpProjectTasks table using
necessary set operator

SQL Assignment 3 Answers


1. SELECT COUNT(*) FROM CLIENTS;
2. SELECT COUNT(*) AS NOE,SUM(SALARY) AS SUMSAL FROM EMPLOYEES;
3. SELECT DEPTNO,MAX(SALARY) FROM EMPLOYEES GROUP BY DEPTNO;
4. SELECT JOB,MIN(SALARY) FROM EMPLOYEES GROUP BY JOB;
5. SELECT AVG(SALARY) FROM EMPLOYEES;
6. SELECT SUM(BUDGET) FROM PROJECTS;
7. SELECT COUNT(*) FROM EMPPROJECTTASKS WHERE TASK= 'Coding';
8. SELECT DEPTNO,COUNT(*),SUM(SALARY) FROM EMPLOYEES GROUP BY DEPTNO;
9. SELECT C.CNAME,P.DESCR,P.START_DATE,P.BUDGET FROM CLIENTS C, PROJECTS P WHERE
P.CLIENT_ID = C.CLIENT_ID;
10. SELECT D.DNAME,E.ENAME, E.JOB FROM DEPARTMENTS D,EMPLOYEES E WHERE D.DEPTNO =
E.DEPTNO;
11. SELECT E.ENAME,P.DESCR FROM EMPLOYEES E,PROJECTS P,EMPPROJECTTASKS T WHERE
T.PROJECT_ID = P.PROJECT_ID AND T.EMPNO = E.EMPNO AND T.TASK = 'System Analysis';
12. SELECT JOB,COUNT(*) FROM EMPLOYEES GROUP BY JOB;
13. SELECT EMPNO FROM EMPLOYEES
MINUS
SELECT EMPNO FROM EMPPROJECTTASKS;
14. SELECT EMPNO FROM EMPLOYEES
INTERSECT
SELECT EMPNO FROM EMPPROJECTTASKS;
15. SELECT EMPNO FROM EMPLOYEES
UNION ALL
SELECT EMPNO FROM EMPPROJECTTASKS;

Given the tables created in Assignment #1, find solutions for the following.
1. Display the project name with highest budget
2. Display employee names who have same job as ‘Madhav’
3. Display employee’s name and job who worked on ‘Code Change’ task of project 401
4. Display client name whose project’s ‘Coding’ task is ‘In Progress’
5. Display department number, names and salaries of employees who are earning max salary in
their departments
6. Display name of department with highest SUM of salary
7. Create a table named ‘CLIENT_PROJECTS’ using CTAS method that includes CLIENT_ID, CNAME,
ADDRESS,BUSINESS,DESCR,BUDGET columns from CLIENTS and PROJECTS tables
8. Increase salary of employees by 15% who have performed task of ‘Testing’ on projects
9. Create a view named DEPT_EMP with DEPTNO,DNAME,LOC,ENAME,JOB, and SALARY columns
10. Create synonym EPT for table EmpProjectTasks

SQL Assignment 4 - Answers


1. SELECT DESCR,BUDGET FROM PROJECTS WHERE BUDGET = (SELECT MAX(BUDGET) FROM
PROJECTS);
2. SELECT ENAME,JOB FROM EMPLOYEES WHERE JOB = (SELECT JOB FROM EMPLOYEES WHERE
ENAME = 'Madhav');
3. SELECT ENAME,JOB FROM EMPLOYEES WHERE EMPNO = (SELECT EMPNO FROM
EMPPROJECTTASKS WHERE PROJECT_ID = 401 AND TASK = 'Code Change');
4. SELECT CNAME FROM CLIENTS WHERE CLIENT_ID = (SELECT CLIENT_ID FROM PROJECTS
WHERE PROJECT_ID = (SELECT PROJECT_ID FROM EMPPROJECTTASKS WHERE TASK = 'Coding'
AND STATUS = 'In Progress'));
5. SELECT DEPTNO,ENAME,SALARY FROM EMPLOYEES E WHERE SALARY = (SELECT MAX(SALARY)
FROM EMPLOYEES WHERE DEPTNO = E.DEPTNO);
6. SELECT DNAME FROM DEPARTMENTS WHERE DEPTNO = (SELECT DEPTNO FROM EMPLOYEES
GROUP BY DEPTNO HAVING SUM(SALARY) = (SELECT MAX(SUM(SALARY)) FROM EMPLOYEES
GROUP BY DEPTNO));
7. CREATE TABLE CLIENT_PROJECTS AS SELECT
C.CLIENT_ID,C.CNAME,C.ADDRESS,C.BUSINESS,P.DESCR,P.BUDGET FROM CLIENTS C, PROJECTS
P WHERE P.CLIENT_ID = C.CLIENT_ID;
8. UPDATE EMPLOYEES SET SALARY = SALARY * 1.15 WHERE EMPNO IN (SELECT EMPNO FROM
EMPPROJECTTASKS WHERE TASK = 'Testing');
9. CREATE OR REPLACE VIEW DEPT_EMP AS SELECT
D.DEPTNO,D.DNAME,D.LOC,E.ENAME,E.JOB,E.SALARY FROM DEPARTMENTS D,EMPLOYEES E
WHERE D.DEPTNO=E.DEPTNO;
10. CREATE SYNONYM EPT FOR EMPPROJECTTASKS;

You might also like