1.
Consider the following relation schema
Works(Pname,Cname,salary)
Lives(Pname,Street,City)
located_in (Cname, city)
Manager(Pname,Mgrname)
Write the SQL queries for the following
(i)Find the names of all persons who live in the city Bangalore.
SELECT Pname
FROM Lives
WHERE City = ‘Bangalore’;
(ii)Retrieve the names of all person of "Infosys" whose salary is between Rs .50000
SELECT Pname
FROM Works
WHERE Cname = ‘Infosys’
AND salary BETWEEN 50000;
iii)Find the names of all persons who lives and work in the same city
SELECT W.Pname
FROM Works W
JOIN Lives L ON W.Pname = L.Pname
JOIN located_in LI ON W.Cname = LI.Cname
WHERE L.City = LI.City;
iv)List the names of the people who work for “Tech M” along with the cities they live in.
SELECT W.Pname, L.City
FROM Works W
JOIN Lives L ON W.Pname = L.Pname
WHERE W.Cname = ‘Tech M’;
v)Find the average salary of “Infosys” persons
SELECT AVG(salary) AS average_salary
FROM Works
WHERE Cname = ‘Infosys’;
2. Consider the following COMPANY database (10 marks)
EMP(Name,SSN,Salary,SuperSSN,Dno)
DEPT(DNum,Dname,MgrSSN,Dno)
DEPT_LOC(Dnum,Dlocation)
DEPENDENT(ESSN,Dep_name,Sex)
WORKS_ON(ESSN,Pno,Hours)
PROJECT(Pname,Pnumber,Plocation,Dnum)
Write the SQL queries for the following
(i)Retrieve the name of the employee who works with same department as ravi
SELECT E1.Name
FROM EMP E1
JOIN EMP E2 ON E1.Dno = E2.Dno
WHERE E2.Name = 'Ravi' AND E1.Name != 'Ravi';
ii)Retrieve the number of dependents for an employee “Ravi”
SELECT COUNT(*) AS NumberOfDependents
FROM EMP E
JOIN DEPENDENT D ON E.SSN = D.ESSN
WHERE E.Name = ‘Ravi’;
iii)Retrieve the name of the managers working in location “DELHI”who has no female dependents
SELECT E.Name
FROM EMP E
JOIN DEPT D ON E.SSN = D.MgrSSN
JOIN DEPT_LOC DL ON D.DNum = DL.Dnum
WHERE DL.Dlocation = ‘DELHI’
AND NOT EXISTS (
SELECT 1
FROM DEPENDENT DEP
WHERE DEP.ESSN = E.SSN AND DEP.Sex = ‘F’
);
iv)List female employees from Dno=20 earning more than 50000
SELECT Name
FROM EMP
WHERE Dno = 20 AND Salary > 50000 AND Sex = ‘F’;
v)List “CSE” department details
SELECT *
FROM DEPT
WHERE Dname = ‘CSE’;
3. Consider the Movie database:
MOVIE(Title,Director,Movieyear,Rating)
ACTORS(Actor,Age)
ACTS(Actor,Title)
DIRECTORS(Director,DirectorsAge)
Write the following queries using SQL
(i)List the movies directed by “STEVEN ” after 2018
SELECT Title
FROM MOVIE
WHERE Director = ‘STEVEN’ AND Movieyear > 2018;
ii) List all the actors who are over 40 year old and worked in all movies directed by “JOHN”.
SELECT A.Actor
FROM ACTORS A
WHERE A.Age > 40
AND NOT EXISTS (
SELECT M.Title
FROM MOVIE M
WHERE M.Director = ‘JOHN’
AND NOT EXISTS (
SELECT AC.Actor
FROM ACTS AC
WHERE AC.Title = M.Title AND AC.Actor = A.Actor
);
iii) Find an actor who was casted in “maxim” movie.
SELECT Actor
FROM ACTS
WHERE Title = ‘maxim’;
iv) Find director and actor of the movie whose title starts with letter “A”.
SELECT M.Director, A.Actor
FROM MOVIE M
JOIN ACTS A ON M.Title = A.Title
WHERE M.Title LIKE ‘A%’;
v) List all female actresses.
SELECT Actor
FROM ACTRESSES;
Or can write as below
SELECT Actor
FROM ACTORS
WHERE Gender = ‘F’;
4.Write the sql queries for the following database schema:
Student(usn,name,branch,percentage)
Faculty(fid,fname,department,designation,salary)
Course(cid,cname,fid)
Enroll(cid,usn,grade)
(i)retrieve the names of all students enrolled for the course’CS_54”
SELECT S.name
FROM Student S
JOIN Enroll E ON S.usn = E.usn
WHERE E.cid = ‘CS_54’;
(ii) list all the departments having an average salary of the faculties above Rs.10,000
SELECT F.department
FROM Faculty F
GROUP BY F.department
HAVING AVG(F.salary) > 10000;
(iii) list the names of the students enrolled for the course’CS_51’ and having ‘B’ grade.
SELECT S.name
FROM Student S
JOIN Enroll E ON S.usn = E.usn
WHERE E.cid = ‘CS_51’ AND E.grade = ‘B’;
5. Consider the following schemas:
sailor(sid,sname,rating,age)
Boat(bid,bname,colour)
Reserve(sid,bid,day)
(i) retrieve the sailor names that have reserved red and green boats.
SELECT S.sname
FROM sailor S
JOIN Reserve R1 ON S.sid = R1.sid
JOIN Boat B1 ON R1.bid = B1.bid AND B1.colour = ‘red’
JOIN Reserve R2 ON S.sid = R2.sid
JOIN Boat B2 ON R2.bid = B2.bid AND B2.colour = ‘green’;
(ii) retrieve the colors of boats reserved by raj
SELECT DISTINCT B.colour
FROM sailor S
JOIN Reserve R ON S.sid = R.sid
JOIN Boat B ON R.bid = B.bid
WHERE S.sname = ‘Raj’;
(iii) retrieve the sid’s of sailors with age over 20,who have not reserved a red boat.
SELECT S.sid
FROM sailor S
WHERE S.age > 20
AND NOT EXISTS (
SELECT 1
FROM Reserve R
JOIN Boat B ON R.bid = B.bid
WHERE S.sid = R.sid AND B.colour = ‘red’
);
(iv) retrieve the names of sailors who have reserved all boats.
SELECT S.sname
FROM sailor S
WHERE NOT EXISTS (
SELECT B.bid
FROM Boat B
WHERE NOT EXISTS (
SELECT R.bid
FROM Reserve R
WHERE R.bid = B.bid AND R.sid = S.sid
);
(i) SELECT e.employee_name, e.street, e.city
FROM Employee e
JOIN Works w ON e.employee_name = w.employee_name
WHERE w.company_name = 'First Bank Corporation'
AND w.salary > 10000;
(ii) SELECT e.employee_name
FROM Employee e
JOIN Works w ON e.employee_name = w.employee_name
WHERE w.company_name != 'First Bank Corporation';
(iii) SELECT e.employee_name
FROM Employee e
JOIN Works w ON e.employee_name = w.employee_name
WHERE w.salary > (
SELECT MAX(w2.salary)
FROM Works w2
WHERE w2.company_name = 'Small Bank Corporation'
);
(iv) SELECT c.company_name
FROM Company c
JOIN Works w ON c.company_name = w.company_name
GROUP BY c.company_name
ORDER BY SUM(w.salary) ASC
LIMIT 1;
(v) SELECT e.employee_name
FROM Employee e
JOIN Manages m ON e.employee_name = m.employee_name
JOIN Employee mgr ON m.manager_name = mgr.employee_name
WHERE e.city = mgr.city
AND e.street = mgr.street;
(i) SELECT Dname, fname, Lname
FROM dept
JOIN emp ON dept.MgrSSN = emp.SSN;
(ii) SELECT project.Pnumber, project.Pname, COUNT(works_on.ESSN) AS NumOfEmployees
FROM project
JOIN works_on ON project.Pnumber = works_on.Pno
GROUP BY project.Pnumber, project.Pname;
(iii) SELECT fname, Lname
FROM emp
WHERE NOT EXISTS (
SELECT project.Pnumber
FROM project
WHERE project.Dnum = 5
EXCEPT
SELECT works_on.Pno
FROM works_on
WHERE works_on.ESSN = emp.SSN
);
(iv) SELECT fname, Lname
FROM emp
WHERE SSN NOT IN (
SELECT ESSN
FROM dependent
);
(v) SELECT gender, COUNT(*) AS NumOfEmployees
FROM emp
GROUP BY gender;
(i) SELECT E.Fname, E.Lname, E.address
FROM Emp E
JOIN dept D ON E.dno = D.dnumber
WHERE D.dname = 'sports';
(ii) SELECT E.dno, COUNT(E.SSN) AS num_employees, AVG(E.salary) AS avg_salary
FROM Emp E
GROUP BY E.dno;
(iii) SELECT P.Pnumber, P.dnum, M.Lname, M.address, M.bdate
FROM project P
JOIN dept D ON P.dnum = D.dnumber
JOIN Emp M ON D.mgrSSN = M.SSN;
(iv) SELECT E.Fname, E.Lname
FROM Emp E
JOIN dependent D ON E.SSN = D.ESSN
GROUP BY E.SSN, E.Fname, E.Lname
HAVING COUNT(D.dependent_name) >= 2;
(v) SELECT E.Fname, E.Lname
FROM Emp E
WHERE E.dno = 20 AND E.gender = 'F' AND E.salary > 50000;
(i) SELECT age
FROM Sailors
WHERE Sname LIKE 'A%A'
AND LENGTH(Sname) >= 3;
(ii) SELECT rating, MIN(age) AS youngest_age
FROM Sailors
WHERE age >= 18
GROUP BY rating
HAVING COUNT(Sid) >= 2;
(iii) SELECT Sname
FROM Sailors
WHERE Sid NOT IN (
SELECT DISTINCT Sid
FROM Reservers R
JOIN Boats B ON R.bid = B.bid
WHERE B.color = 'red'
);
(iv) SELECT S.sid, S.Sname, S.rating, (S.rating + 1) AS incremented_rating
FROM Sailors S
JOIN (
SELECT Sid, day
FROM Reservers
GROUP BY Sid, day
HAVING COUNT(DISTINCT bid) >= 2
) R ON S.sid = R.sid;
(i) SELECT
P.Pnumber,
P.Dnum,
E.Lname,
E.Address,
E.Bdate
FROM
PROJECT P
JOIN
DEPARTMENT D ON P.Dnum = D.Dnumber
JOIN
EMPLOYEE E ON D.Mgr_ssn = E.Ssn
WHERE
P.Plocation = 'Stafford';
(ii) SELECT
E.Fname,
E.Lname
FROM
EMPLOYEE E
JOIN
DEPENDENT D ON E.Ssn = D.Essn
WHERE
E.Fname = D.Dependent_name;
(iii) SELECT
P.Pname,
SUM(W.Hours) AS Total_Hours
FROM
PROJECT P
JOIN
WORKS_ON W ON P.Pnumber = W.Pno
GROUP BY
P.Pname;
(iv) SELECT
E.Fname,
E.Lname
FROM
EMPLOYEE E
WHERE NOT EXISTS (
SELECT
P.Pnumber
FROM
PROJECT P
JOIN
DEPARTMENT D ON P.Dnum = D.Dnumber
WHERE
D.Dname = 'Research'
AND NOT EXISTS (
SELECT
W.Essn
FROM
WORKS_ON W
WHERE
W.Essn = E.Ssn
AND
W.Pno = P.Pnumber
);
(i) SELECT w.Pname, l.City
FROM works w
JOIN lives l ON w.Pname = l.Pname
WHERE w.Cname = 'Wipro';
(ii) SELECT DISTINCT w.Pname
FROM works w
WHERE w.Cname != 'Infosys';
(iii) SELECT w1.Pname
FROM works w1
WHERE w1.Salary > ALL (SELECT w2.Salary
FROM works w2
WHERE w2.Cname = 'Oracle');
(iv) SELECT w.Pname
FROM works w
JOIN lives l ON w.Pname = l.Pname
JOIN located_In li ON w.Cname = li.Cname AND l.City = li.City;
(i) SELECT DISTINCT I.ITEM_NAME
FROM ITEM I
JOIN SALES S ON I.ITEM_NO = S.ITEM_NO
JOIN CUSTOMER C ON S.CID = C.CID
WHERE C.CNAME = 'Prasanth';
(ii) SELECT DISTINCT I.ITEM_NAME
FROM ITEM I
JOIN SUPPLY SP ON I.ITEM_NO = SP.ITEM_NO
WHERE SP.SUPPLY_DATE BETWEEN '2019-01-01' AND '2019-01-30';
(iii) SELECT C.CID, C.CNAME, C.EMAIL, C.ADDR, C.PHONE
FROM CUSTOMER C
JOIN SALES S ON C.CID = S.CID
GROUP BY C.CID, C.CNAME, C.EMAIL, C.ADDR, C.PHONE
HAVING SUM(S.AMOUNT) > 5000;
(iv) SELECT
SUM(S.AMOUNT) AS Total_Sales_Amount,
SUM(S.#ITEMS) AS Total_Items,
AVG(S.AMOUNT) AS Average_Sale_Amount
FROM SALES S;
(v) SELECT C.CID, C.CNAME, C.EMAIL, C.ADDR, C.PHONE
FROM CUSTOMER C
LEFT JOIN SALES S ON C.CID = S.CID
WHERE S.CID IS NULL;
(i) SELECT *
FROM RESORT
WHERE resortcity = 'Los Angeles';
(ii) SELECT *
FROM RESORT
WHERE numsuite > 30;
(iii) SELECT *
FROM VISITOR
ORDER BY firstname ASC;
(i) SELECT S.SName, COUNT(E.Courseno) AS NumberOfCourses
FROM STUDENT S
JOIN ENROLL E ON S.SSn = E.SSn
WHERE S.SName = 'John Smith' AND E.Quarter = 'WO9'
GROUP BY S.SName;
(ii) SELECT B.Courseno, B.book_isbn, T.book_title
FROM BOOK_ADOPTION B
JOIN TEXT T ON B.book_isbn = T.book_isbn
JOIN COURSE C ON B.Courseno = C.Courseno
WHERE C.dept = 'CS'
GROUP BY B.Courseno, B.book_isbn, T.book_title
HAVING COUNT(B.book_isbn) > 2;
(iii) SELECT DISTINCT C.dept
FROM COURSE C
JOIN BOOK_ADOPTION B ON C.Courseno = B.Courseno
JOIN TEXT T ON B.book_isbn = T.book_isbn
WHERE T.Publisher = 'Pearson'
GROUP BY C.dept
HAVING COUNT(DISTINCT B.book_isbn) = (SELECT COUNT(DISTINCT B2.book_isbn)
FROM BOOK_ADOPTION B2
JOIN TEXT T2 ON B2.book_isbn = T2.book_isbn
WHERE B2.Courseno IN (SELECT C2.Courseno
FROM COURSE C2
WHERE C2.dept = C.dept)
AND T2.Publisher = 'Pearson');
(i) SELECT E.Name
FROM EMP E
JOIN DEPT D ON E.dno = D.dnum
WHERE D.dnum = (
SELECT dno
FROM EMP
WHERE Salary = (SELECT MAX(Salary) FROM EMP)
);
(ii) SELECT E1.Name
FROM EMP E1
WHERE E1.Salary >= (
SELECT MIN(Salary) + 10000
FROM EMP
);
(iii) CREATE VIEW ResearchEmployees AS
SELECT E.Name AS EmployeeName, S.Name AS SupervisorName, E.Salary
FROM EMP E
JOIN EMP S ON E.Superssn = S.Ssn
JOIN DEPT D ON E.dno = D.dnum
WHERE D.dname = 'Research';
(iv) CREATE VIEW ProjectSummary AS
SELECT P.Pname AS ProjectName, D.dname AS ControllingDeptName,
COUNT(W.Essn) AS NumberOfEmployees,
SUM(W.Hours) AS TotalHoursWorked
FROM PROJECT P
JOIN DEPT D ON P.dnum = D.dnum
JOIN WORKS_ON W ON P.Pnumber = W.Pno
GROUP BY P.Pname, D.dname
HAVING COUNT(W.Essn) > 1;
(i) SELECT Title
FROM Movie
WHERE director = 'Hanson' AND Myear > 1997;
(ii) -- Find all actors
SELECT Actor AS Name, Aage AS Age
FROM Actors
UNION
-- Find all directors
SELECT Director AS Name, dage AS Age
FROM Directors;
(iii) SELECT M.Title
FROM Movie M
JOIN Acts A ON M.Title = A.title
JOIN Actors AC ON A.Actor = AC.Actor
WHERE M.director = 'Coen' AND AC.Actor = 'Mc Dormand';
(iv) SELECT D.Director, A.Actor
FROM Directors D
JOIN Movie M ON D.Director = M.director
JOIN Acts A ON M.Title = A.title
JOIN Actors A ON A.Actor = A.Actor
WHERE D.dage < A.Aage;
(i) SELECT DISTINCT S1.Sname
FROM Sailors S1
JOIN RESERVE R1 ON S1.SID = R1.SID
JOIN BOATS B1 ON R1.BID = B1.BID
JOIN RESERVE R2 ON S1.SID = R2.SID
JOIN BOATS B2 ON R2.BID = B2.BID
WHERE B1.Color = 'Red' AND B2.Color = 'Green';
(ii) SELECT DISTINCT S.Sname
FROM Sailors S
JOIN RESERVE R ON S.SID = R.SID
JOIN BOATS B ON R.BID = B.BID
WHERE S.Age > 20 AND B.Color = 'Black';
(iii) SELECT DISTINCT S.Sname
FROM Sailors S
JOIN RESERVE R ON S.SID = R.SID
JOIN BOATS B ON R.BID = B.BID
WHERE B.Color = 'Green' AND R.Day = 'Monday';
(iv) SELECT COUNT(*)
FROM BOATS B
LEFT JOIN RESERVE R ON B.BID = R.BID
WHERE R.BID IS NULL;
(v) SELECT Sname
FROM Sailors
WHERE Rating = 10
AND Age = (SELECT MAX(Age) FROM Sailors WHERE Rating = 10);
(i) SELECT DISTINCT p.PNo
FROM PROJECT p
JOIN EMPLOYEE e ON p.DNo = e.DNo
WHERE e.Name LIKE '%Scott%'
UNION
SELECT DISTINCT p.PNo
FROM PROJECT p
JOIN DEPARTMENT d ON p.DNo = d.DNo
JOIN EMPLOYEE e ON d.MgrSSN = e.SSN
WHERE e.Name LIKE '%Scott%';
(ii) SELECT e.SSN, e.Name, e.Salary * 1.10 AS NewSalary
FROM EMPLOYEE e
JOIN WORK_ON w ON e.SSN = w.SSN
JOIN PROJECT p ON w.PNo = p.PNo
WHERE p.PName = 'IOT';
(iii) SELECT
SUM(e.Salary) AS TotalSalary,
MAX(e.Salary) AS MaxSalary,
MIN(e.Salary) AS MinSalary,
AVG(e.Salary) AS AvgSalary
FROM EMPLOYEE e
JOIN DEPARTMENT d ON e.DNo = d.DNo
WHERE d.Dname = 'accounts';
(iv) SELECT e.Name
FROM EMPLOYEE e
WHERE NOT EXISTS (
SELECT p.PNo
FROM PROJECT p
WHERE p.DNo = 5
AND NOT EXISTS (
SELECT w.SSN
FROM WORK_ON w
WHERE w.SSN = e.SSN
AND w.PNo = p.PNo
);
(v) SELECT e.DNo, COUNT(*) AS NumberOfHighEarners
FROM EMPLOYEE e
WHERE e.Salary > 600000
GROUP BY e.DNo
HAVING COUNT(*) > 5;
(i) UPDATE FACULTY
SET Salary = Salary * 1.15;
(ii) SELECT Dept
FROM FACULTY
GROUP BY Dept
HAVING AVG(Salary) > 20000;
(iii) SELECT Fname
FROM FACULTY
WHERE Fname LIKE 'R%U';
(iv) SELECT Sname
FROM STUDENTS
JOIN ENROL ON STUDENTS.SID = ENROL.SID
JOIN COURSE ON ENROL.CID = COURSE.CID
WHERE COURSE.Cname = 'GS-53' AND ENROL.GRADE = 'A';
(i) SELECT E.Name, E.Address
FROM EMPLOYEE E
JOIN DEPARTMENT D ON E.DNo = D.DNumber
WHERE D.DName = 'Research';
(ii) SELECT E.Name
FROM EMPLOYEE E
WHERE NOT EXISTS (
SELECT P.PNumber
FROM PROJECT P
WHERE P.DNum = 5
AND NOT EXISTS (
SELECT W.ESSN
FROM WORKS-ON W
WHERE W.PNo = P.PNumber
AND W.ESSN = E.SSN
);
(iii) SELECT P.PName
FROM PROJECT P
JOIN WORKS-ON W ON P.PNumber = W.PNo
JOIN EMPLOYEE E ON W.ESSN = E.SSN
WHERE E.Name = 'Smith';
(iv) SELECT E.Name
FROM EMPLOYEE E
LEFT JOIN DEPENDENT D ON E.SSN = D.ESSN
WHERE D.ESSN IS NULL;
(i) SELECT DISTINCT S.SNAME
FROM SAILORS S
JOIN RESERVES R ON S.SID = R.SID
JOIN BOATS B ON R.BID = B.BID
WHERE B.COLOR IN ('red', 'green');
(ii) SELECT S1.SNAME
FROM SAILORS S1
WHERE S1.AGE > (SELECT MAX(S2.AGE) FROM SAILORS S2 WHERE S2.RATING = 10);
(iii) SELECT S1.SID, S1.SNAME, S1.RATING
FROM SAILORS S1
WHERE S1.RATING > (SELECT S2.RATING FROM SAILORS S2 WHERE S2.SNAME = 'Ramesh');
(i) SELECT Name
FROM MEMBERS
WHERE Designation = 'Professor' AND Age > 45;
(ii) SELECT DISTINCT B.Book_Title
FROM BOOKS B
JOIN RESERVES R ON B.Bookid = R.Book-id
JOIN MEMBERS M ON R.Member-id = M.member-id
WHERE M.Designation = 'Professor';
(iii) SELECT M.member-id
FROM MEMBERS M
WHERE NOT EXISTS (
SELECT 1
FROM RESERVES R
JOIN BOOKS B ON R.Book-id = B.Bookid
WHERE M.member-id = R.Member-id AND B.Book-price > 500
);
(iv) SELECT B.Book-Author, B.Book_Title
FROM BOOKS B
JOIN RESERVES R ON B.Bookid = R.Book-id
WHERE R.Date = '2017-05-27';
(v) SELECT M.Name
FROM MEMBERS M
WHERE NOT EXISTS (
SELECT B.Bookid
FROM BOOKS B
WHERE NOT EXISTS (
SELECT 1
FROM RESERVES R
WHERE R.Member-id = M.member-id AND R.Book-id = B.Bookid
);
(i) SELECT DISTINCT S1.Sname
FROM Sailors S1
JOIN Reserve R1 ON S1.Sid = R1.Sid
JOIN Boats B1 ON R1.Bid = B1.Bid
JOIN Reserve R2 ON S1.Sid = R2.Sid
JOIN Boats B2 ON R2.Bid = B2.Bid
WHERE B1.color = 'red' AND B2.color = 'green';
(ii) SELECT COUNT(*)
FROM Boats B
WHERE B.Bid NOT IN (SELECT DISTINCT Bid FROM Reserve);
(iii) SELECT S.Sname
FROM Sailors S
JOIN Reserve R ON S.Sid = R.Sid
WHERE R.Bid = 103;
(iv) SELECT S.Sname
FROM Sailors S
WHERE NOT EXISTS (
SELECT B.Bid
FROM Boats B
WHERE NOT EXISTS (
SELECT R.Bid
FROM Reserve R
WHERE R.Bid = B.Bid AND R.Sid = S.Sid
);