Introduction
In this chapter, we will learn about the INNER JOIN in MySQL. An INNER JOIN returns only the rows that have matching values in both tables. It is the most common type of join used to retrieve data that is related between two tables. We will cover the syntax, examples, filtering with INNER JOIN, and joining multiple tables using INNER JOIN.
Syntax
The basic syntax for the INNER JOIN is:
SELECT columns
FROM table1
INNER JOIN table2 ON table1.common_column = table2.common_column;
columns: The columns you want to retrieve.table1andtable2: The tables to join.common_column: The column that the tables share, used to match rows.
Example with INNER JOIN
Let’s go through an example where we use INNER JOIN to retrieve data from the students and departments tables.
- Create a Database:
CREATE DATABASE school;
- Select the Database:
USE school;
- Create Tables:
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
enrollment_date DATE,
department_id INT
);
CREATE TABLE departments (
id INT PRIMARY KEY AUTO_INCREMENT,
department_name VARCHAR(100) NOT NULL
);
- Insert Data into the Tables:
INSERT INTO students (first_name, last_name, email, enrollment_date, department_id) VALUES
('Rahul', 'Sharma', 'rahul.sharma@example.com', '2023-07-01', 1),
('Priya', 'Singh', 'priya.singh@example.com', '2023-07-02', 2),
('Amit', 'Kumar', 'amit.kumar@example.com', '2023-07-03', 1),
('Neha', 'Verma', 'neha.verma@example.com', '2023-07-04', 3),
('Sahil', 'Mehta', 'sahil.mehta@example.com', '2023-07-05', 2);
INSERT INTO departments (department_name) VALUES
('Mathematics'),
('Science'),
('Literature');
- Use the INNER JOIN:
SELECT students.first_name, students.last_name, departments.department_name
FROM students
INNER JOIN departments ON students.department_id = departments.id;
Output
| first_name | last_name | department_name |
|---|---|---|
| Rahul | Sharma | Mathematics |
| Priya | Singh | Science |
| Amit | Kumar | Mathematics |
| Neha | Verma | Literature |
| Sahil | Mehta | Science |
Filtering with INNER JOIN
You can also filter the results of an INNER JOIN by adding a WHERE clause to specify additional conditions.
Example with Filtering
SELECT students.first_name, students.last_name, departments.department_name
FROM students
INNER JOIN departments ON students.department_id = departments.id
WHERE departments.department_name = 'Science';
Output
| first_name | last_name | department_name |
|---|---|---|
| Priya | Singh | Science |
| Sahil | Mehta | Science |
In this example, the query retrieves only those students who belong to the ‘Science’ department.
Multiple Table INNER JOIN
You can join more than two tables using multiple INNER JOIN statements.
Example with Multiple Tables
Let’s create an additional courses table and join it with the students and departments tables.
- Create the Courses Table:
CREATE TABLE courses (
id INT PRIMARY KEY AUTO_INCREMENT,
course_name VARCHAR(100) NOT NULL,
department_id INT,
FOREIGN KEY (department_id) REFERENCES departments(id)
);
- Insert Data into the Courses Table:
INSERT INTO courses (course_name, department_id) VALUES
('Algebra', 1),
('Biology', 2),
('English Literature', 3);
- Join Multiple Tables:
SELECT students.first_name, students.last_name, departments.department_name, courses.course_name
FROM students
INNER JOIN departments ON students.department_id = departments.id
INNER JOIN courses ON departments.id = courses.department_id;
Output
| first_name | last_name | department_name | course_name |
|---|---|---|---|
| Rahul | Sharma | Mathematics | Algebra |
| Amit | Kumar | Mathematics | Algebra |
| Priya | Singh | Science | Biology |
| Sahil | Mehta | Science | Biology |
| Neha | Verma | Literature | English Literature |
In this example, the query retrieves data from the students, departments, and courses tables, combining them based on the relationships between their columns.
Important Considerations
- Matching Values: The
INNER JOINreturns rows only when there is a match in both tables. If there are rows in either table that do not have matching rows in the other table, those rows will not be included in the result. - Performance: Joins can impact performance, especially on large datasets. Ensure appropriate indexing on the columns used in the join condition to optimize query performance.
- Column Naming: If the joined tables have columns with the same name, use table aliases or fully qualify the column names to avoid ambiguity.
Example with Table Aliases
SELECT s.first_name, s.last_name, d.department_name, c.course_name
FROM students s
INNER JOIN departments d ON s.department_id = d.id
INNER JOIN courses c ON d.id = c.department_id;
Conclusion
The INNER JOIN is used for retrieving related data from multiple tables in MySQL. This chapter covered the syntax and usage of the INNER JOIN, provided examples with the students, departments, and courses tables, and discussed filtering and joining multiple tables using INNER JOIN.