Bird
Raised Fist0
SQLquery~5 mins

Many-to-many with junction tables in SQL - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is a many-to-many relationship in databases?
It is a relationship where multiple records in one table relate to multiple records in another table. For example, students can enroll in many courses, and courses can have many students.
Click to reveal answer
beginner
Why do we use a junction table in many-to-many relationships?
A junction table breaks down a many-to-many relationship into two one-to-many relationships. It stores pairs of related record IDs from the two tables, making the relationship manageable and queryable.
Click to reveal answer
intermediate
What columns does a junction table usually have?
It usually has at least two columns, each holding a foreign key that references the primary key of one of the related tables. Sometimes it also has its own primary key or additional data.
Click to reveal answer
intermediate
Write a simple SQL query to find all courses a student with ID 1 is enrolled in, using a junction table named Enrollment.
SELECT Courses.* FROM Courses JOIN Enrollment ON Courses.CourseID = Enrollment.CourseID WHERE Enrollment.StudentID = 1;
Click to reveal answer
intermediate
How does a junction table improve data integrity in many-to-many relationships?
By using foreign keys, it ensures that only valid records from the related tables can be linked. This prevents invalid or orphaned relationships and keeps data consistent.
Click to reveal answer
What does a junction table do in a many-to-many relationship?
ADeletes duplicate records automatically
BStores only one record per table
CStores pairs of related record IDs from two tables
DCreates a one-to-one relationship
Which of these is true about foreign keys in a junction table?
AThey reference primary keys in related tables
BThey are always primary keys themselves
CThey store duplicate data
DThey are not needed in junction tables
If a student can enroll in many courses and a course can have many students, what kind of relationship is this?
AOne-to-one
BNo relationship
COne-to-many
DMany-to-many
Which SQL clause is commonly used to connect tables through a junction table?
AJOIN
BORDER BY
CGROUP BY
DWHERE
What is a common name for a table that links two tables in a many-to-many relationship?
APrimary table
BJunction table
CLookup table
DIndex table
Explain how a many-to-many relationship is implemented using a junction table.
Think about how two tables connect through a third table storing pairs of IDs.
You got /4 concepts.
    Describe how you would write a SQL query to find all related records using a junction table.
    Consider joining the main tables through the junction table on matching IDs.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of a junction table in a many-to-many relationship?
      easy
      A. To store pairs of related records from two tables using foreign keys
      B. To store all data from both tables in one place
      C. To replace one of the original tables completely
      D. To create a one-to-one relationship between tables

      Solution

      1. Step 1: Understand many-to-many relationships

        Many-to-many means each record in one table can relate to many records in another table, and vice versa.
      2. Step 2: Role of junction table

        A junction table holds pairs of foreign keys from both tables to link related records without duplicating data.
      3. Final Answer:

        To store pairs of related records from two tables using foreign keys -> Option A
      4. Quick Check:

        Junction table = pairs of foreign keys [OK]
      Hint: Junction tables link two tables with pairs of keys [OK]
      Common Mistakes:
      • Thinking junction table stores all data from both tables
      • Confusing junction table with a single main table
      • Assuming junction table creates one-to-one links
      2. Which SQL statement correctly creates a junction table named StudentCourse linking Student and Course tables by their IDs?
      easy
      A. CREATE TABLE StudentCourse (StudentID INT, CourseID INT, FOREIGN KEY (StudentID) REFERENCES Student(ID));
      B. CREATE TABLE StudentCourse (ID INT PRIMARY KEY, StudentID INT, CourseID INT);
      C. CREATE TABLE StudentCourse (StudentID INT UNIQUE, CourseID INT UNIQUE);
      D. CREATE TABLE StudentCourse (StudentID INT, CourseID INT, PRIMARY KEY (StudentID, CourseID));

      Solution

      1. Step 1: Define junction table columns

        It needs two columns for foreign keys: StudentID and CourseID.
      2. Step 2: Set primary key on both columns

        Primary key on (StudentID, CourseID) ensures unique pairs and no duplicates.
      3. Final Answer:

        CREATE TABLE StudentCourse (StudentID INT, CourseID INT, PRIMARY KEY (StudentID, CourseID)); -> Option D
      4. Quick Check:

        Junction table needs composite primary key [OK]
      Hint: Use composite primary key on both foreign keys [OK]
      Common Mistakes:
      • Using UNIQUE on individual columns instead of composite key
      • Missing one foreign key column
      • Not defining primary key on the pair
      3. Given tables Author, Book, and junction table AuthorBook with columns AuthorID and BookID, what does this query return?
      SELECT Author.Name, Book.Title FROM Author
      JOIN AuthorBook ON Author.ID = AuthorBook.AuthorID
      JOIN Book ON Book.ID = AuthorBook.BookID;
      medium
      A. A list of authors and the titles of books they wrote
      B. A list of books without any author names
      C. A list of all authors with all books, including unrelated pairs
      D. An error because of missing WHERE clause

      Solution

      1. Step 1: Understand JOINs with junction table

        The query joins Author to AuthorBook by AuthorID, then AuthorBook to Book by BookID, linking authors to their books.
      2. Step 2: Result of the query

        It returns pairs of author names and book titles where the author wrote the book, no unrelated pairs included.
      3. Final Answer:

        A list of authors and the titles of books they wrote -> Option A
      4. Quick Check:

        JOINs with junction table = related pairs only [OK]
      Hint: JOIN junction table to get related pairs only [OK]
      Common Mistakes:
      • Thinking it returns all combinations of authors and books
      • Expecting an error without WHERE clause
      • Ignoring the role of junction table in filtering
      4. You wrote this query to find all students and their courses:
      SELECT Student.Name, Course.Title FROM Student
      JOIN StudentCourse ON Student.ID = StudentCourse.StudentID
      JOIN Course ON Course.ID = StudentCourse.CourseID
      WHERE StudentCourse.StudentID = Student.ID;

      But it has a problem. What is the problem?
      medium
      A. The WHERE clause is redundant and causes a syntax error
      B. Missing alias for tables causes ambiguity
      C. The WHERE clause is unnecessary because JOIN already matches IDs
      D. StudentCourse.CourseID is missing in the WHERE clause

      Solution

      1. Step 1: Analyze the JOIN conditions

        The JOINs already match Student.ID to StudentCourse.StudentID and Course.ID to StudentCourse.CourseID.
      2. Step 2: Check the WHERE clause

        The WHERE clause repeats the JOIN condition, which is unnecessary but not an error; however, it does not filter or add value.
      3. Final Answer:

        The WHERE clause is unnecessary because JOIN already matches IDs -> Option C
      4. Quick Check:

        JOIN matches IDs, WHERE clause redundant [OK]
      Hint: JOIN conditions handle matching; WHERE often not needed here [OK]
      Common Mistakes:
      • Assuming WHERE clause causes syntax error
      • Adding unnecessary conditions that duplicate JOINs
      • Confusing alias usage with errors
      5. You have tables Employee, Project, and junction table EmployeeProject with EmployeeID and ProjectID. How do you find employees who work on all projects listed in Project?
      hard
      A. Join EmployeeProject and Project, then filter with WHERE ProjectID IS NOT NULL
      B. Use GROUP BY EmployeeID and HAVING count of projects equal to total projects count
      C. Select employees with a simple JOIN to EmployeeProject without grouping
      D. Use DISTINCT on EmployeeID in EmployeeProject without counting projects

      Solution

      1. Step 1: Count total projects

        Find total number of projects from Project table.
      2. Step 2: Group EmployeeProject by EmployeeID

        Count how many projects each employee works on.
      3. Step 3: Use HAVING to compare counts

        Only select employees whose project count equals total projects count.
      4. Final Answer:

        Use GROUP BY EmployeeID and HAVING count of projects equal to total projects count -> Option B
      5. Quick Check:

        Group and count projects per employee = all projects [OK]
      Hint: Group by employee, HAVING count = total projects [OK]
      Common Mistakes:
      • Not grouping and counting projects per employee
      • Using WHERE instead of HAVING for aggregate filtering
      • Ignoring total projects count in comparison