MySQL多表查询中的 JOIN ON 用法介绍

一、引言
在数据库中,表之间的关系是非常常见的。有时候我们需要从多个表中取出数据,并根据某种关联条件将这些表连接起来,这就是多表查询。在多表查询中,使用 JOIN ON 来指定连接条件是非常常见的做法。本文将详细介绍 MySQL 中 JOIN ON 的用法,包括内连接、外连接等。
二、JOIN 和 ON 的概念
1. JOIN 的概念
在 MySQL 中,JOIN 关键字用于将两个或多个表连接起来,从而实现数据的联合查询。常用的 JOIN 包括内连接、外连接等,它们的具体用法稍后会讲到。
2. ON 的概念
在 JOIN 子句中,使用 ON 来指定表之间的连接条件。ON 可以在多个表之间指定多个条件来进行连接。JOIN ON 语法如下所示:
SELECT *
FROM table1
JOIN table2
ON table1.column_name = table2.column_name;
三、JOIN ON 的用法示例
为了更好地理解 JOIN ON 的用法,我们将举例说明。下面我们假设有两个表,一个是学生表 (students),另一个是成绩表 (scores)。
1. 学生表 (students)
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(20)
);
INSERT INTO students VALUES (1, '张三');
INSERT INTO students VALUES (2, '李四');
INSERT INTO students VALUES (3, '王五');
2. 成绩表 (scores)
CREATE TABLE scores (
student_id INT,
subject VARCHAR(20),
score INT
);
INSERT INTO scores VALUES (1, '语文', 90);
INSERT INTO scores VALUES (1, '数学', 85);
INSERT INTO scores VALUES (2, '语文', 80);
INSERT INTO scores VALUES (2, '数学', 95);
INSERT INTO scores VALUES (3, '语文', 75);
INSERT INTO scores VALUES (3, '数学', 70);
3. 内连接示例
内连接是 JOIN 中最常见的一种连接方式,它会返回两个表中满足连接条件的交集。使用 JOIN ON 来实现内连接的示例如下:
SELECT students.name, scores.subject, scores.score
FROM students
JOIN scores
ON students.id = scores.student_id;
运行以上查询语句,得到的结果如下:
| name | subject | score |
|---|---|---|
| 张三 | 语文 | 90 |
| 张三 | 数学 | 85 |
| 李四 | 语文 | 80 |
| 李四 | 数学 | 95 |
| 王五 | 语文 | 75 |
| 王五 | 数学 | 70 |
以上结果为两个表中满足连接条件的交集,即根据学生表的 id 字段和成绩表的 student_id 字段进行连接。
4. 外连接示例
外连接是 JOIN 中另一种常见的连接方式,它会返回两个表中满足连接条件的所有记录,并将不满足条件的字段补充为 NULL。使用 JOIN ON 来实现外连接的示例如下:
左外连接
左外连接是外连接的一种常见形式,它会返回左表 (左边的 table1) 的所有记录,并将右表 (右边的 table2) 中满足连接条件的记录补充进来。
SELECT students.name, scores.subject, scores.score
FROM students
LEFT JOIN scores
ON students.id = scores.student_id;
运行以上查询语句,得到的结果如下:
| name | subject | score |
|---|---|---|
| 张三 | 语文 | 90 |
| 张三 | 数学 | 85 |
| 李四 | 语文 | 80 |
| 李四 | 数学 | 95 |
| 王五 | 语文 | 75 |
| 王五 | 数学 | 70 |
| NULL | NULL | NULL |
以上结果中,最后一行为不满足连接条件的记录,补充了 NULL 值。
右外连接
右外连接是外连接的另一种形式,它会返回右表 (右边的 table2) 的所有记录,并将左表 (左边的 table1) 中满足连接条件的记录补充进来。
SELECT students.name, scores.subject, scores.score
FROM students
RIGHT JOIN scores
ON students.id = scores.student_id;
运行以上查询语句,得到的结果如下:
| name | subject | score |
|---|---|---|
| 张三 | 语文 | 90 |
| 张三 | 数学 | 85 |
| 李四 | 语文 | 80 |
| 李四 | 数学 | 95 |
| 王五 | 语文 | 75 |
| 王五 | 数学 | 70 |
| NULL | NULL | NULL |
以上结果中,最后一行为不满足连接条件的记录,补充了 NULL 值。
5. 自连接示例
自连接是指一个表与自身进行连接的操作。自连接主要用于解决需要在同一表中进行关联查询的情况。下面我们通过一个示例来演示自连接的用法。
假设我们有一个员工表 (employees),其中包含员工的信息和上级的 ID。我们希望查询每个员工及其上级的姓名。
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(20),
manager_id INT
);
INSERT INTO employees VALUES (1, '张三', NULL);
INSERT INTO employees VALUES (2, '李四', 1);
INSERT INTO employees VALUES (3, '王五', 1);
INSERT INTO employees VALUES (4, '赵六', 2);
使用自连接进行查询的示例代码如下:
SELECT A.name AS employee_name, B.name AS manager_name
FROM employees AS A
LEFT JOIN employees AS B
ON A.manager_id = B.id;
运行以上查询语句,得到的结果如下:
| employee_name | manager_name |
|---|---|
| 张三 | NULL |
| 李四 | 张三 |
| 王五 | 张三 |
| 赵六 | 李四 |
以上结果表示每个员工及其上级的姓名。通过将表自身进行连接,我们可以更方便地进行关联查询。
四、总结
本文介绍了 MySQL 中多表查询中的 JOIN ON 的用法。通过使用 JOIN ON,我们可以将多个表连接起来,并根据指定的连接条件进行数据查询。在具体使用 JOIN ON 时,我们需要注意以下几点:
- 连接条件必须是两个表中的字段进行比较,例如上述示例中的
students.id = scores.student_id。 - JOIN ON 语句的位置可以在 FROM 子句之后,也可以在其它子句(如 WHERE 子句)之后。但是,在实际使用中,一般将 JOIN ON 放在 FROM 子句之后,以增加查询的可读性。
- JOIN ON 可以用于不同类型的连接,包括内连接、外连接、交叉连接等。在实际使用时,需要根据具体的需求选择适合的连接方式。
除了使用 JOIN ON 进行连接,还有其他一些连接方式:
- 使用 WHERE 子句进行连接:
SELECT students.name, scores.subject, scores.score
FROM students, scores
WHERE students.id = scores.student_id;
- 使用 USING 子句进行连接:
SELECT students.name, scores.subject, scores.score
FROM students
JOIN scores
USING (id);
USING 子句用来指定连接的字段,它会自动去除重复的字段。
总之,JOIN ON 是实现多表查询的一种常用方式,通过连接条件将多个表联合查询,可以更灵活地获取所需的数据。在实际应用中,根据具体的业务需求和数据结构,选择合适的连接方式进行查询,能够有效提高查询效率和准确性。
极客笔记