在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,那么在查询结果中只会显示一条记录。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/371503.html