Concept Flow - Why joins are needed
Start with Table A
Identify related data
Combine matching rows
Create joined result
Use combined data
We start with two tables, find related rows, combine them, and get a new table with connected information.
Jump into concepts and practice - no test required
SELECT employees.name, departments.name FROM employees JOIN departments ON employees.dept_id = departments.id;
| Step | Action | employees row | departments row | Match Condition | Output row |
|---|---|---|---|---|---|
| 1 | Check employees row 1 with departments row 1 | {id:1, name:'Alice', dept_id:10} | {id:10, name:'HR'} | 10 = 10 (True) | {employee_name:'Alice', department_name:'HR'} |
| 2 | Check employees row 1 with departments row 2 | {id:1, name:'Alice', dept_id:10} | {id:20, name:'Sales'} | 10 = 20 (False) | No output |
| 3 | Check employees row 2 with departments row 1 | {id:2, name:'Bob', dept_id:20} | {id:10, name:'HR'} | 20 = 10 (False) | No output |
| 4 | Check employees row 2 with departments row 2 | {id:2, name:'Bob', dept_id:20} | {id:20, name:'Sales'} | 20 = 20 (True) | {employee_name:'Bob', department_name:'Sales'} |
| 5 | Check employees row 3 with departments row 1 | {id:3, name:'Carol', dept_id:30} | {id:10, name:'HR'} | 30 = 10 (False) | No output |
| 6 | Check employees row 3 with departments row 2 | {id:3, name:'Carol', dept_id:30} | {id:20, name:'Sales'} | 30 = 20 (False) | No output |
| 7 | No more rows to check | N/A | N/A | N/A | End |
| Variable | Start | After Step 1 | After Step 4 | Final |
|---|---|---|---|---|
| Current employees row | None | {id:1, name:'Alice', dept_id:10} | {id:2, name:'Bob', dept_id:20} | None |
| Current departments row | None | {id:10, name:'HR'} | {id:20, name:'Sales'} | None |
| Output rows | [] | [{employee_name:'Alice', department_name:'HR'}] | [{employee_name:'Alice', department_name:'HR'}, {employee_name:'Bob', department_name:'Sales'}] | [{employee_name:'Alice', department_name:'HR'}, {employee_name:'Bob', department_name:'Sales'}] |
Joins combine rows from two tables based on a related column. They match rows where the join condition is true. Only matching rows appear in the output. This lets us see connected data from separate tables. Syntax example: SELECT * FROM A JOIN B ON A.key = B.key;
JOIN in SQL when working with multiple tables?Employees and Departments on the column DepartmentID?Students(id, name)Grades(student_id, grade)SELECT Students.name, Grades.grade FROM Students JOIN Grades ON Students.id = Grades.student_id;
SELECT * FROM Orders JOIN Customers ON Orders.CustomerID = Customers.ID;
Authors(author_id, name)Books(book_id, title, author_id)