This is sourced from the Stanford Coursera self study DB class SQL quizzes:
Students at your hometown high school have decided to organize their social network using databases. So far, they have collected information about sixteen students in four grades, 9-12. Here's the schema:
Highschooler (ID, name, grade)
English: There is a high school student with unique ID and a given first name in a certain grade.
Friend (ID1, ID2)
English: The student with ID1 is friends with the student with ID2. Friendship is mutual, so if (123, 456) is in the Friend table, so is (456, 123).
Likes (ID1, ID2)
English: The student with ID1 likes the student with ID2. Liking someone is not necessarily mutual, so if (123, 456) is in the Likes table, there is no guarantee that (456, 123) is also present.
Prompt: For each student A who likes a student B where the two are not friends, find if they have a friend C in common (who can introduce them!). For all such trios, return the name and grade of A, B, and C.
I would appreciate a brief code review of this working query:
select distinct a.name, a.grade, b.name, b.grade, c.name, c.grade from highschooler a, highschooler b, highschooler c, likes, friend where a.id=likes.id1 and b.id=likes.id2 and a.id=friend.id1 and b.id not in (select id2 from friend where a.id=id1) and b.id in (select id1 from friend where id2=c.id) and a.id in (select id1 from friend where id2=c.id)