Assignment Solutions for RDBMS Punjabi University Patiala
1
Assignments Day 3
1. Create a database called COMPANY consisting of two tables - EMP &
DEPT
Assignment Solutions for RDBMS Punjabi University Patiala
3
2. Perform the following queries on the tables just created:
1. List the names of analysts and salesmen.
SQL> select ename from emp where job=‟analyst‟ and job=‟salesman‟;
2. List details of employees who have joined before 30 Sep 81.
SQL> select * from emp where hiredate < ‟30-sep-81‟;
3. List names of employees who are not managers.
SQL> select ename from emp where job is not manager;
4. List the names of employees whose employee numbers are 7369, 7521, 7839,
7934, 7788.
SQL> select ename from from emp where empno in
(7369,7521,7839,7934,7788);
5. List employees not belonging to department 30, 40, or 10.
SQL> select ename from emp where deptno not in (30,40,10);
6. List employee names for those who have joined between 30 June and 31
Dec. 81.
SQL> select ename from emp where hiredate between ‟30-jun-81‟ and ‟31-
dec-81‟;
7. List the different designations in the company.
SQL> select distinct job from emp;
8. List the names of employees who are not eligible for commission.
SQL> select ename from emp where comm = NULL;
9. List the name and designation of the employee who does not report to
anybody.
SQL> select ename,job from emp where job = „president‟;
Assignment Solutions for RDBMS Punjabi University Patiala
4
10. List the employees not assigned to any department.
SQL> select ename from emp where job = NULL;
11. List the employees who are eligible for commission.
SQL> select ename from emp where comm. is not NULL;
12. List employees hose names either start or end with “S”.
SQL> select ename from emp where ename like „S%‟ and like „%S‟;
13. List names of employees whose names have “i” as the second character.
SQL> select ename from emp where ename like „_i%‟;
14. List the number of employees working with the company.
SQL> select ename from emp;
15. List the number of designations available in the EMP table.
SQL> select distinct job from emp;
16. List the total salaries paid to the employees.
SQL> select sum(sal) from emp;
17. List the maximum, minimum and average salary in the company.
SQL> select max(sal),min(sal),avg(sal) from emp;
18. List the maximum salary paid to a salesman.
SQL> select max(sal) from emp where job = „salesman‟;
Assignment Solutions for RDBMS Punjabi University Patiala
5
Assignment Day 4
1) Please refer to the tables created as a part of Assignment 3. Perform the
following queries against those tables:
1. List the number of employees and average salary for employees in
department 20.
SQL> select count(ename),avg(sal) from emp where deptno = 20;
2. List name, salary and PF amount of all employees. (PF is calculated as 10%
of basic salary)
SQL> select ename,sal,sal((sal/100)*10) from emp;
3. List names of employees who are more than 2 years old in the company.
SQL>
4. List the employee details in the ascending order of their basic salary.
SQL> select * from emp order by sal;
5. List the employee name and hire date in the descending order of the hire
date.
SQL> select ename,hiredate from emp order by hiredate desc;
6. List employee name, salary, PF, HRA, DA and gross; order the results in the
ascending order of gross. HRA is 50% of the salary and DA is 30% of the
salary.
SQL> select ename,sal, ((sal/100)*10)”PF”, ((sal/100)*50)”HRA”,
((sal/100)*30)”DA”,
(sal+((sal/100)*10)+((sal/100)*50)+((sal/100)*30))”Gross” from emp;
7. List the department numbers and number of employees in each department.
SQL> select deptno,count(ename) from emp group by deptno;
Assignment Solutions for RDBMS Punjabi University Patiala
6
8. List the department number and total salary payable in each department.
SQL> select deptno,sum(sal) from emp group by deptno;
9. List the jobs and number of employees in each job. The result should be in
the descending order of the number of employees.
SQL> select job,count(empno) from emp group by job;
10. List the total salary, maximum and minimum salary and average salary of
the employees jobwise.
SQL> select sum(sal),max(sal),min(sal),avg(sal) from emp group by job;
11. List the total salary, maximum and minimum salary and average salary of
the employees, for department 20.
SQL> select sum(sal),max(sal),min(sal),avg(sal) from emp where deptno = 20
group by job;
12. List the total salary, maximum and minimum salary and average salary of
the employees jobwise, for department 20 and display only those rows
having an average salary > 1000
SQL> select sum(sal),max(sal),min(sal),avg(sal) from emp where deptno = 20
having avg(sal) > 1000 group by job;
Assignment Solutions for RDBMS Punjabi University Patiala
7
2) The following questions pertain to a database with the following tables.
Suppliers - S (S#, Name, Status, City)
Parts - P (P#, Pname, Colour, Weight, City)
Projects - J (J#, Jname, City)
Shipment - SPJ (S#, P#, J#, Qty)
The significance of an SPJ record is that the specified supplier supplies the
specified part to the specified project in the specified quantity (and the
combination S#-P#-J# uniquely identifies such a record).
1. Get full details of all projects in London.
SQL> select * from J where city = „London‟;
2. Get S# for suppliers who supply project J1.
SQL> select S# from S where S# in (select S# from SPJ where J# = J1);
3. Get all part-color/part-city combinations.
SQL> select city,colour from P group by (city,colour);
4. Get all S#/P#/J# triples such that all are co-located.
SQL> select S#,P#,J# from S,P,J where S.city = P.city and P.city = J.city and
J.city = S.city and (S#,P#,J#) in (select S#,P#,J# from SPJ);
5. Get al S#, P#, J# triples such that they are not all co-located.
SQL> select S#,P#,J# from S,P,J where (S.city <> J.city or J.city <> P.city or
S.city <> P.city) and (S#,P#,J#) in (select S#,P#,J# from SPJ);
6. Get P# for parts supplied by a supplier in London.
SQL> select distinct (P#) from SPJ where S# in (select S# from A where city =
„London‟);
7. Get all pairs of cities such that a supplier in the first city supplies to a Project
in the second city.
Assignment Solutions for RDBMS Punjabi University Patiala
8
SQL> select S.city,J.city from S,J where S.city <> J.city and (S#,J#) in (select
S#,J# from SPJ);
8. Get J# for projects supplied by at least one supplier not in the same city.
SQL> select distinct (J#) from J where exist (select S# from S where S.city <>
J.city and (J#,S#) in (select J#,S# from SPJ));
9. Get all pairs of part numbers such that some supplier supplies both the
indicated parts.
SQL> select SPJ.P#,P.P# from SPJ, P where P.P# <> SPJ.P# and (S#,P.P#) in
(select S#,P# from SPJ) group by (SPJ.P#,P.P#);
10. Get the total quantity of part P1 supplied by S1.
SQL> select sum(qty) from SPJ where P# = „P1‟ and S# = „S1‟;
11. For each part supplied to a project, get the P#, J# and corresponding total
quantity.
SQL> select P#,J#,sum(qty) from SPJ group by (P#,J#);
12. Get P# of parts supplied to some project in an average quantity > 320.
SQL> select P#,avg(qty) from SPJ goup by P# having avg(qty)>320;
13. Get project names for projects supplied by supplier S1.
SQL> select Pname from P where P# in (select P# from SPJ where S# = „S1‟);
14. Get colors of parts supplied by S1.
SQL> select colour from P where P# in (select P# from SPJ where S# = „S1‟);
15. Get J# for projects using at least one part available from supplier S1.
SQL> select J# from J where J# in (select J# from SPJ where S# = „S1‟);
Assignment Solutions for RDBMS Punjabi University Patiala
9
16. Get supplier numbers for suppliers supplying at least one part supplied by at
least one supplier who supplies at least one red part.
SQL> select S# from S where S# in (select S# from SPJ where P# in (select P#
from SPJ where S# in (select S# from SPJ where P# in (select P# from SPJ
where P# in (select P# from P where colour =‟red‟)))));
17. Get supplier numbers for suppliers with a status lower than that of supplier
S1.
SQL> select S# from S where status < (select status from S where S# = „S!);
18. Get project numbers for projects not supplied with any red part by any
London supplier.
SQL> select J# from J where J# in (select J# from SPJ where P# not in (select
P# from P where colour = „red‟)) and S# in ( select S# from S where city
=‟London‟);
Assignment Solutions for RDBMS Punjabi University Patiala
10
Assignment Day 5
1) Write the SQL commands to create a database schema for the following
relational schema:
CUSTOMER (CUST_ID, CUST_NAME, ANNUAL_REVENUE,
CUST_TYPE)
CUST_ID must be between 100 and 10,000
ANNUAL_REVENUE defaults to $20,000
CUST_TYPE must be manufacturer, wholesaler, or retailer
SHIPMENT (SHIPMENT_#, CUST_ID, WEIGHT, TRUCK_#,
DESTINATION, SHIP_DATE)
Foreign Key: CUST_ID REFERENCES CUSTOMER, on deletion cascade
Foreign Key: TRUCK_# REFERENCES TRUCK, on deletion set to null
Foreign Key: DESTINATION REFERENCES CITY, on deletion set to null
WEIGHT must be under 1000 and defaults to 10
TRUCK (TRUCK_#, DRIVER_NAME)
CITY (CITY_NAME, POPULATION)
Perform the following queries:
1. What are the names of customers who have sent packages (shipments) to
Sioux City?
SQL> select cust_id,cust_name from customer where cust_id in (select cust_id
from shipment where designation = „Sioux‟);
2. To what destinations have companies with revenue less than $1 million sent
packages?
SQL> select distinct(designation) from shipment where cust_id in (select
cust_id from customer where annual_revenue < $1);
3. What are the names and populations of cities that have received shipments
weighing over 100 pounds?
Assignment Solutions for RDBMS Punjabi University Patiala
11
SQL> select city_name,population from city where city_name in (select
designation from shipment where weight > 100);
4. Who are the customers having over $5 million in annual revenue who have
sent shipments weighing less than 1 pound?
SQL> select cust_id,cust_name from customers where annual_revenue > $5
and cust_id in ( select cust_id from shipment where weight <1);
5. Who are the customers having over $5 million in annual revenue who have
sent shipments weighing less than 1 pound or have sent a shipment to San
Francisco?
SQL> select cust_id,cust_name from customers where annual_revenue > $5
and cust_id in (select cust_id from shipment where weight < 1 or designation =
‟San Francisco‟);
6. Who are the drivers who have delivered shipments for customers with
annual revenue over $20 million to cities with populations over 1 million?
SQL> select truck_#,driver_name from truck where truck_# in (select truck_#
from shipment where cust_id in (select cust_id from customer where
annual_revenue > $20) and destination in (select city_name from city where
position > 1000000));
7. List the cities that have received shipments from customers having over $15
million in annual revenue.
SQL> select distinct(designation) from shipment where cust_id in ( select
cust_id from customer where annual_revenue > $15);
8. List the names of drivers who have delivered shipments weighing over 100
pounds.
SQL> select truck_#,driver_name from truck where truck_# in (select truck_#
from shipment where weight > 100);
9. List the name and annual revenue of customers who have sent shipments
weighing over 100 pounds.
Assignment Solutions for RDBMS Punjabi University Patiala
12
SQL> select cust_name,annual_revenue from customer where cust_id in
(select cust_id from shipment where weight > 100);
10. List the name and annual revenue of customers whose shipments have been
delivered by truck driver Jensen.
SQL> select cust_name,annual_revenue from customer where cust_id in
(select cust_id from shipment where truck_# in (select truck_# from truck
where driver_name = „Jensen‟));
11. List customers who had shipments delivered by every truck.
SQL> select cust_id,cust_name from customer where ( select
count(distinct(truck_#)) from shipment where shipment.cust_id =
customer.cust_id) >= (select count(*) from truck);
12. List cities that have received shipments from every customer.
SQL> select city_name from city where (select count (distinct ( cust_id)) from
shipment where designation = city.city_name) >= (select count (*) from
customer);
13. List drivers who have delivered shipments to every city.
SQL> select driver_name from truck where truck_# in (select truck_# from
truck where (select count(distinct(designation)) from shipment where
shipment.truck_# = truck.truck#) >= (select count (*) from city));
14. Customers who are manufacturers or have sent a package to St. Louis.
SQL> select cust_id,cust_name from customer where cust_type =
„manufacturer‟ or cust_id in (select cust_id from shipment where designation =
„St. Louis‟);
15. Cities of population over 1 million which have received a 100-pound
package From customer 311.
SQL> select city_name from city where population > 1000000 and city_name
in (select designation from shipment where weight = 100 and cust_id = 311);
Assignment Solutions for RDBMS Punjabi University Patiala
13
16. Trucks driven by Jake Stinson which have never delivered a shipment to
Denver.
SQL> select truck_# from truck where driver_name = „Jake Stinson‟ and
truck_# in (select truck_# from shipment where designation <> „Denver‟);
17. Customers with annual revenue over $10 million which have sent packages
under 1 pound to cities with population less than 10,000.
SQL> select cust_id,cust_name from customer where annual_revenue >
10000000 and cust_id in (select cust_id from shipment where designation in
(select city_name from city where population < 10000) and weight < 1);
18. Create views for each of the following:
a. Customers with annual revenue under $1 million.
b. Customers with annual revenue between $1 million and $5 million.
c. Customers with annual revenue over $5 million.
a. SQL> create view revenue_1 as select cust_id,cust_name from customer
where annual_revenue < 1000000;
b. SQL> create view revenue_2 as select cust_id,cust_name from customer
where annual_revenue > 1000000 and annual_revenue < 5000000;
c. SQL> create view revenue_3 as select cust_id, cust_name from customer
where annual_revenue > 5000000;
19. Use these views to answer the following queries:
a. Which drivers have taken shipments to Los Angeles for customers with
revenue over $5 million?
b. What are the populations of cities which have received shipments from
customers with revenue between $1 million and $5 million?
c. Which drivers have taken shipments to cities for customers with revenue
under $1 million, and what are the populations of those cities?
Assignment Solutions for RDBMS Punjabi University Patiala
14
a. SQL> select * from revenue_3 where cust_id in (select cust_id from
shipment where designation = „Los Angeles‟);
b. SQL> select city_name,population from city where city_name in (select
designation from shipment where cust_id in (select cust_id from
revenue_2));
c. SQL> select driver_name,population from truck,city where (
truck_#,city_name) in (select truck_#, designation from shipment where
cust_id in (select cust_id from revenue_1));
Assignment Solutions for RDBMS Punjabi University Patiala
15
PL/SQL
PL/SQL Blocks
1. Construct a PL/SQL block to find greater of two numbers.
Declare
A number:=&enter_A;
B number:=&enter_B;
Begin
If A>B then
Dbms_output.put_line(„A is greater‟);
Else
Dbms_output.put_line(„B is greater‟);
End if;
End;
Assignment Solutions for RDBMS Punjabi University Patiala
16
2. Construct a PL/SQL block to find greatest of three numbers.
Declare
A number:=&enter_A;
B number:=&enter_B;
C number:=&enter_C;
Begin
If A>B then
If A>C then
Dbms_output.put_line(„A is greatest‟);
Else
Dbms_output.put_line(„C is greatest‟);
End if;
Else
If B>C then
Dbms_output.put_line(„B is greater‟);
Else
Dbms_output.put_line(„C is greater‟);
End if;
End if;
End;
Assignment Solutions for RDBMS Punjabi University Patiala
17
3. A PL/SQL block to calculate addition, subtraction, multiplication and
division of two numbers according to users choice.
Declare
A number:=&A;
B number:=&B;
C number;
X number;
Begin
X:=&enter_choice;
If X=1 then
C:=A+B;
Else if X=2 then
C:=A-B;
Else if X=3 then
C:=A*B;
Else if X=4 then
C:=A/B;
Else
Dbms_output.put_line(„Not a valid option‟);
End if;
Dbms_output.put_line(„Result is‟||C);
End;
Assignment Solutions for RDBMS Punjabi University Patiala
18
4. A PL/SQL block to print the numbers from 1 to n.
Declare
Var1 number:=1;
n number:=&enter_n;
Begin
Loop
Dbms_output.put_line(var1);
Var1:=var1+1;
Exit when var1>n;
End loop;
End;
Assignment Solutions for RDBMS Punjabi University Patiala
19
5. A PL/SQL block to print the desired multiplication table.
Declare
Table_of number:=&enter_tableof;
Count number:=1;
Result number;
Begin
While count<=10
Loop
Result:=table_of *count;
Dbms_output.put_line(table_of||‟*‟||count||‟=‟||result);
Count:=count+1;
End loop;
End;
Assignment Solutions for RDBMS Punjabi University Patiala
20
Cursor management
1. A PL/SQL code to display a message to check whether the record is deleted
or not.
Begin
Delete emp where empno=&empno;
If sql%notfound then
Dbms_output.put_line(„record not deleted‟);
Else
Dbms_output.put_line(„record deleted‟);
End if;
End;
Assignment Solutions for RDBMS Punjabi University Patiala
21
2. A PL/SQL code to display a message to give the number of records deleted
by the delete statement issued in a PL/SQL block.
Declare
n number;
Begin
Delete emp where deptno=&deptno;
N:=sql%rowcount;
Dbms_output.put_line(„total number of record deleted‟||n);
End;
Assignment Solutions for RDBMS Punjabi University Patiala
22
3. A PL/SQL code to display the empno, ename, job of employees of
department number 10.
Declare
Cursor c1 is select empno, ename, job from emp where deptno=10;
Rec c1%rowtype;
Begin
Open c1;
Loop
Fetch c1 into rec;
Exit when c1%notfound;
Dbms_output.put_line(„empno‟||rec.empno);
Dbms_output.put_line(„ename‟||rec.ename);
Dbms_output.put_line(„job‟||rec.job);
End loop;
Close c1;
End;
Assignment Solutions for RDBMS Punjabi University Patiala
23
4. A PL/SQL code to display the employee number and name of top 5 highest
paid employees.
Declare
Empname emp.ename%type;
Empsal emp.sal%type;
Cursor temp1 is select ename, sal from emp order by sal desc;
Begin
Open temp1;
Loop
Fetch temp1 into empname, empsal;
Exit when temp1%rowcount>5 or temp1%notfound;
Dbms_output.put_line(empname||empsal);
End loop;
Close temp1;
End;
Assignment Solutions for RDBMS Punjabi University Patiala
24
5. A PL/SQL code to calculate the total salary of first n records of emp table.
The value of n is passed to cursor as parameter.
Declare
e number(5);
s number(5):=0;
cursor c1(n number) is select sal from emp where rownum<=n;
Begin
Open c1(&n);
Loop
Fetch c1 into e;
Exit when c1%notfound;
S:=s+e;
End loop;
Dbms_output.put_line(s);
Close c1;
End;
Assignment Solutions for RDBMS Punjabi University Patiala
25
Triggers
1. To create a trigger for the emp table, which makes the entry in ename
column in uppercase.
Create or replace trigger upper_trigger
Before insert or update of ename on emp
For fetch row
Begin
:new.ename:=upper(:new.ename);
End;
Assignment Solutions for RDBMS Punjabi University Patiala
26
2. A trigger on emp table, which shows the old values and new values of
ename after any updation on ename of emp table.
Create or replace trigger emp_update
After update of ename on emp for each row
Begin
Dbms_output.put_line(„old name:‟||:old.ename);
Dbms_output.put_line(„new name:‟||:new.ename);
End;
Assignment Solutions for RDBMS Punjabi University Patiala
27
3. A trigger on the emp table, which store the empno and operation in table
auditor for each operation i.e. insert, update and delete.
Create or replace trigger emp_audit
After insert or update on emp
For each row
Begin
If inserting then
Insert into auditor values(:new.empno,‟insert‟);
Elsif updating then
Insert into auditor values(:new.empno,‟update‟);
Elsif deleting then
Insert into auditor values(:new.empno,‟delete‟);
End if;
End;
Assignment Solutions for RDBMS Punjabi University Patiala
28
4. To create a trigger so that no operation can be performed on emp table on
Sunday.
Create or replace trigger emp_Sunday
Before insert or update or delete on emp
Begin
If rtrim(upper(to_char(sysdate,‟day‟)))=‟sunday‟ then
Raise_application_error(-20022, „no operation can be performed o
Sunday‟);
End if;
End;
Assignment Solutions for RDBMS Punjabi University Patiala
29
5. To create a trigger, which verify that updated salary of employee must be
greater than his/her previous salary.
Create or replace trigger update_check
Before update on emp
For each row
Begin
If :new.sal<:old.sal then
Raise_application_error(-20000. „new salary cannot be less than old
salary‟);
End if;
End;
Top Related