■ Sailors/Boats SQL Cheat Sheet
1. Counting & Aggregates
COUNT, SUM, AVG, MIN, MAX are used to summarize data.
Example – Count boats:
SELECT COUNT(*) FROM Boats;
Example – Count reservations per sailor:
SELECT sid, COUNT(*)
FROM Reserves
GROUP BY sid;
2. Joins
Use JOIN to connect Sailors, Reserves, and Boats.
Example – Sailors who reserved boats:
SELECT s.sname, r.bid
FROM Sailors s
JOIN Reserves r ON s.sid = r.sid;
Example – Sailors who reserved red boats:
SELECT s.sname
FROM Sailors s
JOIN Reserves r ON s.sid = r.sid
JOIN Boats b ON r.bid = b.bid
WHERE b.color='Red';
3. Filters
Use WHERE to restrict rows.
Example – Names starting with A:
SELECT * FROM Sailors WHERE sname LIKE 'A%';
Example – Boats never reserved:
SELECT b.bname
FROM Boats b
WHERE b.bid NOT IN (SELECT DISTINCT bid FROM Reserves);
4. Subqueries
Use subqueries for comparisons.
Example – Sailors who reserved all boats:
SELECT s.sname
FROM Sailors s
JOIN Reserves r ON s.sid = r.sid
GROUP BY s.sid
HAVING COUNT(DISTINCT r.bid) = (SELECT COUNT(*) FROM Boats);
5. Ranking / Ordering
Use ORDER BY or RANK functions.
Example – Rank sailors by rating:
SELECT sname, rating,
DENSE_RANK() OVER (ORDER BY rating DESC) AS rank
FROM Sailors;
6. Dates
Use MIN, MAX, or WHERE for date-based queries.
Example – Earliest reservation per boat:
SELECT bid, MIN(day)
FROM Reserves
GROUP BY bid;
Example – Reservations on a specific date:
SELECT s.sid, s.sname, b.bname
FROM Sailors s
JOIN Reserves r ON s.sid = r.sid
JOIN Boats b ON r.bid = b.bid
WHERE r.day = '1998-10-10';