Consider the following insurance database, where the primary keys are bolded.
Construct the following SQL queries for this relational database.
SELECT COUNT(DISTINCT sin)
FROM Accident
WHERE date LIKE "2002%";
SELECT p.sin, p.name, COUNT(DISTINCT a.acc#)
FROM PERSON AS p
LEFT JOIN Accident as a
ON a.sin = p.sin
LEFT JOIN Owns as o
ON o.license = a.license AND a.sin = o.sin
GROUP BY p.sin, p.name;
INSERT INTO Person VALUES (123123123, 'Name', 'Addr');
DELETE FROM Car
WHERE model = 'Mazda'
AND license IN (
SELECT o.license FROM Owns AS o
JOIN Person as p ON o.sin = p.sin
WHERE p.name = 'Bebe Yang'
);
INSERT INTO Accident VALUES (
2222,
(
SELECT o.license FROM Person AS p
JOIN Owns as o
ON o.sin = p.sin
JOIN CAR as c
ON c.license = o.license
WHERE p.name = "Jones" AND c.model = "Toyota"
),
(
SELECT o.sid FROM Person AS p
JOIN Owns as o
ON o.sin = p.sin
JOIN CAR as c
ON c.license = o.license
WHERE p.name = "Jones" AND c.model = "Toyota"
),
"2002/12/31",
"Vancouver",
"Unknown"
);
Consider the following collection of relation schemas:
Write an SQL query to answer each of the following questions.
SELECT p.profname FROM Professor AS p
JOIN Committee AS c1 ON p.profname = c1.profname
WHERE c1.commname IN (
SELECT c2.commname FROM Committee as c2
WHERE c2.profname = 'Piper'
);
SELECT p.profname FROM Professor as p
WHERE NOT EXISTS (
SELECT commname FROM Committee c1 WHERE c1.profname = 'Piper' AND
NOT EXISTS (
SELECT * FROM Committee c2 WHERE c2.commname = c1.commname AND c2.profname = p.profname
)
);
SELECT p.profname FROM Professor as p
WHERE p.deptname NOT IN (
SELECT d1.deptname FROM Department as d1
WHERE EXISTS (
SELECT * from Department as d2
JOIN Professor as p1
ON p1.deptname = d2.deptname
WHERE p1.profname = 'Piper' AND d2.building = d1.building
)
);
Consider the following relational schemas.
Write an SQL query to answer each of the following questions.
SELECT DISTINCT b.color FROM Boats AS b
JOIN Reserves as r ON r.bid = b.bid
JOIN Sailors as s ON s.sid = r.sid
WHERE s.sname = 'Albert'
SELECT s.sid FROM Sailors AS s
WHERE (
s.rating >= 8
OR EXISTS (
SELECT * FROM Reserves AS r
WHERE s.sid = r.sid AND r.bid = 103
)
);
SELECT s.sname FROM Sailors AS s
WHERE NOT EXISTS (
SELECT * FROM Boats AS b
JOIN Reserves AS r
ON b.bid = r.bid
WHERE r.sid = s.sid AND (
b.bname ILIKE '%storm%'
)
)
ORDER BY s.sname ASC;
SELECT s.sid FROM Sailors AS s
WHERE s.age > 20
AND NOT EXISTS (
SELECT * FROM Boats AS b
JOIN Reserves AS r
ON b.bid = r.bid
WHERE r.sid = s.sid AND (
b.bname ILIKE '%thunder%'
)
);
SELECT s.sname FROM Sailors AS s
JOIN Reserves as r ON s.sid = r.sid
GROUP BY s.sid, s.sname
HAVING COUNT(DISTINCT r.bid) >= 2;
SELECT s.sname FROM Sailors AS s
WHERE NOT EXISTS (
SELECT * FROM Boats AS b
WHERE NOT EXISTS (
SELECT * FROM Reserves AS r
WHERE r.bid = b.bid AND r.sid = s.sid
)
);
SELECT s.sname FROM Sailors AS s
WHERE NOT EXISTS (
SELECT * FROM Boats AS b
WHERE b.bname ILIKE 'typhoon%'
AND NOT EXISTS (
SELECT * FROM Reserves as r
WHERE b.bid = r.bid AND r.sid = s.sid
)
);
SELECT s1.sid FROM Sailors AS s1
WHERE s1.rating > ANY(
SELECT s2.rating FROM Sailors as s2
WHERE s2.sname = 'Bob'
);
SELECT s1.sid FROM Sailors AS s1
WHERE s1.rating > ALL(
SELECT s2.rating FROM Sailors AS s2
WHERE s2.sname = 'Bob'
);
SELECT s1.sid FROM Sailors AS s1
WHERE s1.rating = SELECT MAX(s2.rating) FROM Sailors AS s2;
SELECT s1.name, s1.age FROM Sailors AS s1
WHERE s1.age = (SELECT MAX(s2.age) FROM Sailors AS s2);
SELECT s1.sname FROM Sailors AS s1
WHERE NOT EXISTS (
SELECT * FROM Sailors AS s2
JOIN Reserves AS r1
ON r1.sid = s2.sid
JOIN Boats AS b1
ON b1.bid = r1.bid
WHERE (
s1.rating > s2.rating
AND NOT EXISTS (
SELECT * FROM Reserves AS r2
WHERE r2.sid = s1.sid AND r2.bid = b1.bid
)
)
);
SELECT rating, AVG(age) FROM Sailors
GROUP BY rating;
SELECT r.bid, AVG(s.age) FROM Reserves AS r
JOIN Sailors s ON r.sid = s.sid
GROUP BY r.bid
HAVING COUNT(DISTINCT r.sid) >= 5;
SELECT r.bid, AVG(s.age) FROM Reserves AS r
JOIN Sailors s ON r.sid = s.sid
WHERE s.age >= 40
GROUP BY r.bid
HAVING COUNT(DISTINCT r.sid) >= 5;
WITH prev AS (
SELECT r.bid FROM Reserves AS r
JOIN Sailors s ON r.sid = s.sid
WHERE s.age >= 40
GROUP BY r.bid
HAVING COUNT(DISTINCT r.sid) >= 5
)
SELECT r.bid, AVG(s.age) FROM Reserves as r
JOIN Sailors s ON r.sid = s.sid
JOIN prev ON r.bid = prev.bid
GROUP BY r.bid;
Consider the following relations
Write an SQL query to answer each of the following questions.
SELECT sid FROM Took as t1
GROUP BY t1.sid
HAVING COUNT(DISTINCT t1.cid, t1.deptName) = (
SELECT MAX(course_count)
FROM (
SELECT COUNT(DISTINCT cid, deptName) AS course_count
FROM Took
GROUP BY sid
)
);
SELECT cid, deptName, COUNT(DISTINCT sid) as total_students FROM Took
GROUP BY cid, deptName;
SELECT DISTINCT sid FROM Took as t1
WHERE NOT EXISTS (
SELECT c.cid FROM Course AS c
WHERE c.deptName = 'CPSC'
AND NOT EXISTS (
SELECT * FROM Took as t2
WHERE t1.sid = t2.sid
AND t2.cid = c.cid
AND t2.deptName = c.deptName
)
);
DELETE FROM Course
WHERE majorRequired = FALSE
UPDATE Offering
SET avgGrade = LEAST(avgGrade * 1.10, 100)
WHERE calendarYear = 2007;
CREATE VIEW NumberOfOfferingsPerCourse(cid, deptName, numOfferings) AS
SELECT cid, deptName, COUNT(*) AS numOfferings
FROM Offering
GROUP BY cid, deptName;
SELECT cid, deptName FROM NumberOfOfferingsPerCourse
WHERE numOfferings = (
SELECT MAX(numOfferings) FROM NumberOfOfferingsPerCourse
);
SELECT cid, deptName FROM Course
WHERE cName ILIKE '%uwu%';
CREATE VIEW PreReqsPerCourse(cid, deptName, numPreReqs) AS
SELECT cid, deptName COUNT(*) AS numPreReqs
FROM Prereq
GROUP BY cid, deptName;
SELECT cid, deptName FROM PreReqsPerCourse
WHERE numPreReqs = (
SELECT MAX(numPreReqs) FROM PreReqsPerCourse
);
SELECT cid, deptName FROM Took
WHERE (
sid = 1010102
AND grade >= 72
AND grade <= 80
)
A zoo has the following schema:
Where Bold indicates primary keys and italic indicates foreign keys.
and conforms the the ER-diagram
Write the following queries in SQL.
SELECT visitorID FROM Visitor AS v
JOIN Pass AS p ON p.visitorID = v.visitorID
WHERE p.cost > 15
GROUP BY visitorID
HAVING COUNT(*) > 3;
SELECT species FROM AnimalType
WHERE LOWER(species) LIKE '%cat%';
SELECT species FROM AnimalType
WHERE LOWER(species) NOT LIKE 'cat%';
SELECT DISTINCT visitorID FROM Pass AS p1
WHERE cost > ALL (
SELECT p.cost FROM Pass AS p
JOIN Visitor AS v ON v.visitorID = p.visitorID
WHERE v.firstName = 'Sam'
AND v.lastName = 'Smith'
);
SELECT DISTINCT visitorID FROM Pass AS p1
WHERE cost > ANY (
SELECT p.cost FROM Pass AS p
JOIN Visitor AS v ON v.visitorID = p.visitorID
WHERE v.firstName = 'Sam'
AND v.lastName = 'Smith'
);
SELECT DISTINCT firstName FROM Employee
ORDER BY firstName ASC;
SELECT DISTINCT e.id as enclosureID, a.id as animalID
FROM Enclosure as e
LEFT JOIN Animal as a
ON a.enclosureId = e.id
SELECT DISTINCT em.lastName, ec.id as enclosureID
FROM Employee AS em
JOIN TakesCareOf as t
ON t.employeeID = em.employeeID
JOIN Animal as a
ON a.id = t.animalID
JOIN Enclosure as ec
ON ec.id = a.enclosureID