Using the social database shown in the this picture and created with this SQL statement.
Finding out what’s in the database
.tables
SELECT * FROM Highschooler ;
SELECT * FROM Likes ;
Testing friendship
Listing pairs of friends
SELECT H1.name, H2.name FROM Highschooler H1, Highschooler H2, Friend F WHERE H1.ID = F.ID1 AND H2.ID = F.ID2 AND H1.name < H2.name ORDER BY H1.name, H2.name ;
Friends of Kris and their grades
SELECT H.name, H.grade FROM Highschooler H, Highschooler Hkris, Friend F WHERE Hkris.name = 'Kris' AND Hkris.ID = F.ID1 AND H.ID = F.ID2 ;
Friends whose names start with the letter ‘A’
SELECT H1.name, H2.name FROM Highschooler H1, Highschooler H2, Friend F WHERE H1.ID = F.ID1 AND H2.ID = F.ID2 AND H1.name < H2.name AND H1.name LIKE 'A%' AND H2.name LIKE 'A%' ;
Highest grade in which each student has a friend
SELECT H.name, MAX(Hfriend.grade) FROM Highschooler H, Highschooler Hfriend, Friend F WHERE H.ID = F.ID1 AND Hfriend.ID = F.ID2 GROUP by H.ID ORDER BY H.name ;
Students with more than two friends
SELECT H.name, COUNT(*) FROM Highschooler H, Highschooler Hfriend, Friend F WHERE H.ID = F.ID1 AND Hfriend.ID = F.ID2 GROUP BY H.ID HAVING COUNT(*) > 2 ORDER BY COUNT(*) DESC, H.name ;
Finding out who likes whom
Listing Students who like each other
SELECT H1.name, H2.name FROM Highschooler H1, Highschooler H2, Likes L1, Likes L2 WHERE H1.ID = L1.ID1 AND H2.ID = L1.ID2 AND H1.ID = L2.ID2 AND H2.ID = L2.ID1 AND H1.name < H2.name ;
Students with unrequited likes
SELECT H1.name, H2.name FROM Highschooler H1, Highschooler H2, Likes L1to2 WHERE H1.ID = L1to2.ID1 AND H2.ID = L1to2.ID2 and not exists( SELECT * FROM Likes L2to1 WHERE H2.ID = L2to1.ID1 AND H1.ID = L2to1.ID2) ;
Generating and using ID pairs of mutual likes
SELECT L.ID1, L.ID2 FROM Likes L, Likes Lrev WHERE L.ID1 = Lrev.ID2 AND L.ID2 = Lrev.ID1 ;
SELECT H1.name, H2.name FROM Highschooler H1, Highschooler H2, (SELECT L.ID1, L.ID2 FROM Likes L, Likes Lrev WHERE L.ID1 = Lrev.ID2 AND L.ID2 = Lrev.ID1) ML WHERE ML.ID1 = H1.ID AND ML.ID2 = H2.ID AND H1.name < H2.name ;
All friends are in the same grade
SELECT H.name, H.grade FROM Highschooler H WHERE H.ID NOT IN ( SELECT H1.ID FROM Highschooler H1, Highschooler H2, Friend F WHERE H1.ID = F.ID1 AND H2.ID = F.ID2 AND H1.grade <> H2.grade ) AND H.ID IN ( SELECT H1.ID FROM Highschooler H1, Highschooler H2, Friend F WHERE H1.ID = F.ID1 AND H2.ID = F.ID2 AND H1.grade = H2.grade ) ORDER BY H.grade, H.name ;
SELECT DISTINCT H.name, H.grade FROM Highschooler H, Highschooler Hsame, Friend F WHERE H.ID = F.ID1 AND Hsame.ID = F.ID2 AND H.ID <> Hsame.ID AND H.grade = Hsame.grade AND H.ID NOT IN ( SELECT H1.ID FROM Highschooler H1, Highschooler H2, Friend F WHERE H1.ID = F.ID1 AND H2.ID = F.ID2 AND H1.grade <> H2.grade ) ;