欢迎光临
我们一直在努力

一文详解MySQL中数据表的外连接

在MySQL中,外连接是一种连接方式,它不仅返回两个表中匹配的行,还返回左表(第一个表)中的所有行,即使在右表(第二个表)中没有匹配的行,外连接分为左外连接(LEFT JOIN)、右外连接(RIGHT JOIN)和全外连接(FULL JOIN)。

1、左外连接(LEFT JOIN)

左外连接是最常见的外连接类型,它会返回左表中的所有行,即使在右表中没有匹配的行,如果在右表中没有匹配的行,那么结果集中的右表字段将显示为NULL。

语法:

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;

示例:

假设有两个表,一个是学生表(students),另一个是成绩表(scores),我们想要查询所有学生的姓名和他们的成绩,即使有些学生没有成绩记录。

学生表(students):

id | name

1  | 张三
2  | 李四
3  | 王五

成绩表(scores):

id | student_id | score

1  | 1          | 90
2  | 3          | 80

使用左外连接查询:

SELECT students.name, scores.score
FROM students
LEFT JOIN scores ON students.id = scores.student_id;

结果:

name | score

张三  | 90
李四  | NULL
王五  | 80

2、右外连接(RIGHT JOIN)

右外连接与左外连接类似,但它返回的是右表中的所有行,即使在左表中没有匹配的行,如果在左表中没有匹配的行,那么结果集中的左表字段将显示为NULL。

语法:

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;

示例:

使用右外连接查询上述学生表和成绩表:

SELECT students.name, scores.score
FROM students
RIGHT JOIN scores ON students.id = scores.student_id;

结果:

name | score

张三  | 90
李四  | NULL
NULL  | 80

注意:这里有一个NULL值,表示在成绩表中有一个没有对应学生信息的记录。

3、全外连接(FULL JOIN)

全外连接会返回两个表中的所有行,即使在一个表中没有匹配的行,如果在左表或右表中没有匹配的行,那么结果集中的相应字段将显示为NULL,需要注意的是,MySQL不支持全外连接,但可以通过组合LEFT JOIN和UNION来实现。

示例:

使用全外连接查询上述学生表和成绩表:

SELECT students.name, scores.score FROM students LEFT JOIN scores ON students.id = scores.student_id UNION ALL SELECT students.name, scores.score FROM students RIGHT JOIN scores ON students.id = scores.student_id;

问题与解答:

Q1:在使用外连接时,如果两个表中都有相同的数据,会出现重复的数据吗?

A1:不会,外连接只会返回匹配的数据,如果两个表中都有相同的数据,它们会被合并成一条记录,如果学生表和成绩表中都有相同的学生ID,那么在查询结果中只会显示一条记录。

赞(0) 打赏
未经允许不得转载:九八云安全 » 一文详解MySQL中数据表的外连接

评论 抢沙发