83% found this document useful (6 votes)
2K views

Database Management Systems Practical File: ROLL NUMBER - 2018UCO1615 NAME - Amogh Agarwal COE-2

Here are the SQL queries and relational algebra expressions for the questions: 1) Find sailors who’ve reserved at least one boat SQL Query: SELECT DISTINCT sname FROM sailors JOIN reserves ON sailors.sid = reserves.sid Relational Algebra: Πsname(σ(sailors X reserves)) 2) Find names of sailors who’ve reserved a red or a green boat in the month of March. SQL Query: SELECT DISTINCT sname FROM sailors JOIN reserves ON sailors.sid = reserves.sid JOIN boats ON boats.bid = reserves.bid WHERE rdate LIKE '%-03-%' AND (color = 'red' OR color = 'green')

Uploaded by

Amogh Agarwal
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as RTF, PDF, TXT or read online on Scribd
83% found this document useful (6 votes)
2K views

Database Management Systems Practical File: ROLL NUMBER - 2018UCO1615 NAME - Amogh Agarwal COE-2

Here are the SQL queries and relational algebra expressions for the questions: 1) Find sailors who’ve reserved at least one boat SQL Query: SELECT DISTINCT sname FROM sailors JOIN reserves ON sailors.sid = reserves.sid Relational Algebra: Πsname(σ(sailors X reserves)) 2) Find names of sailors who’ve reserved a red or a green boat in the month of March. SQL Query: SELECT DISTINCT sname FROM sailors JOIN reserves ON sailors.sid = reserves.sid JOIN boats ON boats.bid = reserves.bid WHERE rdate LIKE '%-03-%' AND (color = 'red' OR color = 'green')

Uploaded by

Amogh Agarwal
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as RTF, PDF, TXT or read online on Scribd
You are on page 1/ 20

DATABASE MANAGEMENT

SYSTEMS
PRACTICAL FILE

ROLL NUMBER - 2018UCO1615


NAME – Amogh Agarwal
COE-2
Q 1: Consider the following relational schema
SAILORS (sid, sname, rating, date_of_birth)
BOATS (bid, bname, color)
RESERVES (sid, bid, date, time slot)
CREATE TABLE sailors (
sid int PRIMARY KEY,
sname varchar(20) ,
rating int NOT NULL,
dob date
);

CREATE TABLE boats (


bid int PRIMARY KEY,
bname varchar(20) NOT NULL,
color varchar(20) NOT NULL
);
CREATE TABLE reserves (
sid int NOT NULL,
bid int NOT NULL,
rdate date,
FOREIGN KEY (sid) REFERENCES sailors(sid),
FOREIGN KEY (bid) REFERENCES boats(bid)
);
INSERT INTO sailors VALUES (102,'Kartik',9,'1997-05-21');
INSERT INTO sailors VALUES (103,'Rohan',5,'1999-06-15');
INSERT INTO sailors VALUES (104,'John',7,'1997-01-10');
INSERT INTO sailors VALUES (105,'Rahul',6,'2000-04-07');
INSERT INTO sailors VALUES (106,'Ram',8,'1998-09-15');
INSERT INTO sailors VALUES (107,'Daksh',8,'1997-12-25');
INSERT INTO sailors VALUES (108,'Jaivin',7,'1999-02-27');
INSERT INTO sailors VALUES (109,'Shubham',5,'1999-05-16');
INSERT INTO sailors VALUES (110,'Hitesh',6,'2000-11-30');
INSERT INTO boats VALUES (1,'B1','red');
INSERT INTO boats VALUES (2,'B2','white');
INSERT INTO boats VALUES (3,'B3','green');
INSERT INTO boats VALUES (4,'B4','black');
INSERT INTO boats VALUES (5,'B5','green');
INSERT INTO boats VALUES (6,'B6','red');
INSERT INTO boats VALUES (7,'B7','green');
INSERT INTO boats VALUES (8,'B8','pink');
INSERT INTO boats VALUES (9,'B9','blue');
INSERT INTO boats VALUES (10,'B10','orange');
INSERT INTO boats VALUES (11,'B11','red');
INSERT INTO boats VALUES (12,'B12','obrown');
INSERT INTO boats VALUES (13,'B13','blue');
INSERT INTO boats VALUES (14,'B14','black');
INSERT INTO boats VALUES (15,'B15','blue');
INSERT INTO boats VALUES (16,'B16','yellow');

INSERT INTO reserves VALUES (102,5,'2016-01-12');


INSERT INTO reserves VALUES (102,6,'2019-03-09');
INSERT INTO reserves VALUES (102,1,'2019-12-09');
INSERT INTO reserves VALUES (103,3,'2018-01-19');
INSERT INTO reserves VALUES (107,4,'2017-04-17');
INSERT INTO reserves VALUES (108,10,'2019-10-01');
INSERT INTO reserves VALUES (107,16,'2019-09-29');
INSERT INTO reserves VALUES (109,11,'2018-07-23');

Write the following queries in SQL and relational algebra


1) Find sailors who’ve reserved at least one boat
SQL QUERY
SELECT DISTINCT(sname)
FROM sailors JOIN reserves
ON sailors.sid = reserves.sid ;

RELATIONAL ALGEBRA
2) Find names of sailors who’ve reserved a red or a green boat in the month of March.

SQL QUERY
SELECT DISTINCT(sname)
FROM sailors JOIN reserves
ON sailors.sid = reserves.sid
JOIN boats ON boats.bid = reserve.bid
WHERE rdate LIKE ‘%-03-%’ AND (color = ‘red’ or color = ‘green’) ;

RELATIONAL ALGEBRA

3) Find names of sailors who’ve reserved a red and a green boat.

SQL QUERY
SELECT sailors.sname
FROM
(SELECT DISTINCT(reserves.sid)
FROM boats JOIN reserves
ON boats.bid = reserves.bid
WHERE color = 'red' and reserves.sid
IN
(SELECT DISTINCT(reserves.sid)
FROM boats JOIN reserves
ON boats.bid = reserves.bid
WHERE color = 'green'))
AS boats JOIN sailors
WHERE boats.sid = sailors.sid;
RELATIONAL ALGEBRA

4) Find sid of sailors who have not reserved a boat after Jan 2018.

SQL QUERY
SELECT DISTINCT(sailors.sid)
FROM sailors JOIN reserves
ON sailors.sid = reserves.sid
WHERE rdate < ‘2018-01-01’;
RELATIONAL ALGEBRA
5) Find sailors whose rating is greater than that of all the sailors named “John”.

SQL QUERY
SELECT *
FROM sailors
WHERE rating >
(SELECT rating from sailors WHERE sname = ‘John’);

RELATIONAL ALGEBRA

6) Find sailors who’ve reserved all boats.

SQL QUERY
SELECT S.sname
FROM sailors S
WHERE NOT EXISTS (SELECT B.bid
FROM boats B SELECT S.sname
FROM sailors S
WHERE NOT EXISTS (SELECT B.bid
FROM boats B
WHERE NOT EXISTS(SELECT R.bid
FROM reserves R
WHERE R.bid = B.bid
AND R.sid = S.sid));
WHERE NOT EXISTS(SELECT R.bid
FROM reserves R
WHERE R.bid = B.bid
AND R.sid = S.sid));
7) Find name and age of the oldest sailor(s).

SQL QUERY
SELECT sname ,
FLOOR(DATEDIFF(CURDATE(),date_of_birth)/365.25) AS AGE
FROM sailors WHERE FLOOR(DATEDIFF(CURDATE(),date_of_birth)/365.25) >= ALL (SELECT
FLOOR(DATEDIFF(CURDATE(),date_of_birth)/365.25) AS AGE
FROM sailors);
RELATIONAL ALGEBRA

8) Find the age of the youngest sailor for each rating with at least 2 such sailors.

SQL QUERY
SELECT MIN(FLOOR(DATEDIFF(CURDATE(),date_of_birth)/365.25)) AS AGE , rating FROM
sailors
GROUP BY rating HAVING COUNT(*) > 1;

RELATIONAL ALGEBRA
Q 2: Consider the following relational schema:

CUSTOMER (cust_num, cust_lname , cust_fname, cust_balance);

PRDUCT (prod_num, prod_name, price)

INVOICE (inv_num, prod_num, cust_num, inv_date ,unit_sold, inv_amount);

CREATE TABLE CUSTOMER_1 (

Cust_Num int PRIMARY KEY,

Cust_Fname varchar(20),

Cust_Lname varchar(20),

Cust_Balance int

);

INSERT INTO CUSTOMER_1 VALUES (1,'Kartik','Gupta',200000);

INSERT INTO CUSTOMER_1 VALUES (2,'Ram','Kumar',350000);

INSERT INTO CUSTOMER_1 VALUES (3,'Gaurav','Singh',450000);

INSERT INTO CUSTOMER_1 VALUES (4,'Himanshu','Singh',55000);

INSERT INTO CUSTOMER_1 VALUES (5,'Kunal','Rohilla',34000);

INSERT INTO CUSTOMER_1 VALUES (6,'Shubham','Aggarwal',2200000);

INSERT INTO CUSTOMER_1 VALUES (7,'Jai','Anand',120000);

INSERT INTO CUSTOMER_1 VALUES (8,'Raj','Gupta',540000);

create table CUSTOMER_2 (

Cust_Num int PRIMARY KEY,

Cust_Fname varchar(20) NOT NULL,

Cust_Lname varchar(20) NOT NULL,


Cust_Balance int NOT NULL

);

insert into CUSTOMER_2 values(1,'Pulkit','Singh',8000);

insert into CUSTOMER_2 values(2,'Kunal','Rohilla',14000);

insert into CUSTOMER_2 values(3,'Sahil','Kumar',9000);

insert into CUSTOMER_2 values(4,'Rishabh','Chauhan',55000);

insert into CUSTOMER_2 values(5,'Deepanshu','Jindal',70000);

insert into CUSTOMER_2 values(6,'Rahul','Pathak',800000);

create table PRODUCT (

Prod_Num int PRIMARY KEY,

Prod_Name varchar(20),

Price int

);

insert into PRODUCT values(1,'Mixer',1000);

insert into PRODUCT values(2,'Chair',2500);

insert into PRODUCT values(3,'TV',45000);

insert into PRODUCT values(4,'Mobile',30000);

insert into PRODUCT values(5,'Mouse',1000);

insert into PRODUCT values(6,'Heater',5300);

insert into PRODUCT values(7,'Tubelight',200);

insert into PRODUCT values(8,'Air Conditioner',64000);

create table INVOICE (

Inv_Num int PRIMARY KEY,

Prod_Num int,

Unit_Sold int ,

Cust_Num int ,

Inv_Date date,

Inv_Amount int

);
insert into INVOICE values(1, 101, 1, 3, '2019-07-21', 10000);

insert into INVOICE values(2, 102, 4, 6, '2019-02-28', 8000);

insert into INVOICE values(3, 103, 2, 8, '2019-04-23', 12000);

insert into INVOICE values(4, 104, 1, 5, '2019-03-22', 1000);

insert into INVOICE values(5, 105, 9, 7, '2019-01-08', 5000);

insert into INVOICE values(6, 106, 6, 2, '2019-10-20', 3100);

insert into INVOICE values(7, 105, 14, 1, '2019-02-27', 5000);

insert into INVOICE values(8, 1006, 4, 3, '2019-02-28', 3100);

Write the following queries in SQL and relational algebra

1) Write query to generate a combined list of all customers including


duplicate ones

SQL QUERY
SELECT CUST_LNAME, CUST_FNAME FROM CUSTOMER UNION SELECT CUST_LNAME,
CUST_FNAME FROM CUSTOMER_2;

RELATIONAL ALGEBRA

2) Write query to show duplicate records


SQL QUERY
SELECT C.CUST_LNAME, C.CUST_FNAME FROM CUSTOMER_1 AS C, CUSTOMER_2 AS C2
WHERE C.CUST_LNAME=C2.CUST_LNAME AND C.CUST_FNAME=C2.CUST_FNAME
Relational Algebra
3) Write a query that will generate records which are unique to
CUSTOMER_2

SQL QUERY
SELECT C2.CUST_LNAME, C2.CUST_FNAME FROM CUSTOMER_2 C2 WHERE
CONCAT(C2.CUST_LNAME,C2.CUST_FNAME) NOT IN (SELECT
CONCAT(C1.CUST_LNAME,C1.CUST_FNAME) FROM CUSTOMER_1 C1);

RELATIONAL ALGEBRA

4) Write query that will show invoice number, avg invoice amount and their
difference
SQL QUERY
SELECT INV_NUM, INV_AMOUNT, (SELECT AVG(INV_AMOUNT) FROM INVOICE) AS AVG_INV,
(INV_AMOUNT-(SELECT AVG(INV_AMOUNT) FROM INVOICE)) AS DIFF FROm INVOICE GROUP
BY INV_NUM, INV_AMOUNT;

RELATIONAL ALGEBRA
5) Modify CUSTOMER_1 table to include two new attributes:
CUST_DOB and CUST_AGE
Customer 1 was born on 15 march 1969
And customer 2 on 22 December 1977
SQL QUERY
alter table CUSTOMER_1 add column cust_dob date;
alter table CUSTOMER_1 add column cust_age int;
update CUSTOMER_1 set cust_dob = "1969-03-15" where cust_num = 1;
update CUSTOMER_1 set cust_dob = "1977-12-22" where cust_num = 2;

RELATIONAL ALGEBRA

6) Assuming CUSTOMER_1 contains CUST_AGE attribute, write queries to


update values in this attribute

SQL QUERY
update CUSTOMER_1 set cust_age = datediff(curdate(),cust_dob)/365;
RELATIONAL ALGEBRA

7) Find all products with price greater or equal to average product price

SQL QUERY
select * from product where price>=(select avg(price) from product);
Relational Algebra

8) List all products whose total quantity sold is greater than the average
quantity sold
SQL Query
select * from invoice group by prod_num having sum(unit_sold)>(select avg(unit_sold) from
invoice );
Relational Algebra
9) Produce list of product code , price, average price, and the difference
between product price and average price
SQL Query
Select prod_num , price ,(select avg(price) from product) as "average", (price-(select
avg(price) from product)) as "product price-average" from product;

Q 3: Consider the following relational schema

DEPARTMENT (Department_ID, Name, Location_ID)

JOB (Job_ID , Function )

EMPLOYEE (Employee_ID, name, DOB, Job_ID , Manager_ID, Hire_Date, Salary,


department_id)

CREATE TABLE DEPARTMENT (

Department_ID int PRIMARY KEY,

Name varchar(20) NOT NULL,

Location_ID INT
);

INSERT INTO DEPARTMENT VALUES (1,'Finance',302);

INSERT INTO DEPARTMENT VALUES (2,'Security',706);

INSERT INTO DEPARTMENT VALUES (3,'Human Resources',890);

INSERT INTO DEPARTMENT VALUES (4,'IT',6509);

INSERT INTO DEPARTMENT VALUES (5,'Electronic Dept',651);

INSERT INTO DEPARTMENT VALUES (6,'Software Dept',471);

INSERT INTO DEPARTMENT VALUES (7,'Hardware Dept',491);

CREATE TABLE JOB (

Job_ID int PRIMARY KEY,

function varchar(100)

);

INSERT INTO JOB VALUES(501,'Manager of Department');

INSERT INTO JOB VALUES(502,'Works for Security team');

INSERT INTO JOB VALUES(503,'Works for Human Resources team');

INSERT INTO JOB VALUES(504,'works for IT team');

INSERT INTO JOB VALUES(505,'works for Finance team');

INSERT INTO JOB VALUES(506,'works for Electrical Dept team');

INSERT INTO JOB VALUES(507,'works for Hardware team');

INSERT INTO JOB VALUES(508,'works for Software team');

CREATE TABLE EMPLOYEE (

Employee_ID int,

Name varchar(255),

dob date,

Job_ID int,
Manager_ID int,

Hire_Date date,

Salary int,

department_ID INT,

FOREIGN KEY (Job_ID) REFERENCES JOB(Job_ID),

FOREIGN KEY (Department_ID) REFERENCES department(Department_ID)

);

INSERT INTO EMPLOYEE VALUES(1001,'Kartik','1999-03-14',502,801,'2015-03-18',100000,2);

INSERT INTO EMPLOYEE VALUES(1001,'Himanshu','1997-05-16',502,801,'2016-10-10',50000,2);

INSERT INTO EMPLOYEE VALUES(1001,'Rahul','1999-03-26',504,801,'2015-03-05',60000,4);

INSERT INTO EMPLOYEE VALUES(1001,'Raj','1997-09-28',505,801,'2018-10-11',50000,1);

INSERT INTO EMPLOYEE VALUES(1001,'Chetan','1996-11-17',505,801,'2014-05-28',75000,1);

INSERT INTO EMPLOYEE VALUES(1001,'Sahil','1998-07-23',508,801,'2017-12-15',87000,7);

INSERT INTO EMPLOYEE VALUES(1001,'Shiva','1997-12-05',502,801,'2019-10-18',1000,2);

Write the following queries in SQL and relational algebra

1) Write a query to count number of employees who joined in March 2015.

SQL QUERY
SELECT COUNT(Employee_ID)
FROM Employee
WHERE hire_date> '2015-03-01' And hire_date<'2015-04-01';

RELATIONAL ALGEBRA

2) Display the Nth highest salary drawing employee details.


SQL QUERY
SELECT *
FROM employee
GROUP BY salary
ORDER BY salary DESC LIMIT 1;

RELATIONAL ALGEBRA

3) Find the budget (total salary) of each department


SQL QUERY
SELECT SUM(SALARY),DEPARTMENT_ID
FROM EMPLOYEE
GROUP BY DEPARTMENT_ID;

RELATIONAL ALGEBRA

4) Find the department with maximum budget.


SQL QUERY
SELECT SUM(SALARY),DEPARTMENT_ID
FROM EMPLOYEE
GROUP BY DEPARTMENT_ID
Order by sum(salary) desc limit 1;

RELATIONAL ALGEBRA

5) Create a view to show number of employees working in Delhi and update it automatically
when the database is modified.

SQL QUERY
CREATE VIEW DELHI_POPULATION ASSELECT COUNT(EMPLOYEE_ID)FROM
EMPLOYEE,DEPARTMENTWHERE LOCATION_id=10;

RELATIONAL ALGEBRA

6) Write a trigger to ensure that no employee of age less than 25 can be inserted in the
database.

SQL QUERY
delimiter $$
CREATE TRIGGER Check_age BEFORE INSERT ON employee
FOR EACH ROW
BEGIN
IF NEW.dob > 1993-01-01 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'ERROR:
AGE MUST BE ATLEAST 25 YEARS!';
END IF;
END;

You might also like