在MySQL中,内连接和外连接是用于从多个表中检索数据的两种不同的连接方式。
-
内连接(INNER JOIN) :
内连接返回两个表之间匹配的行。它只返回两个表中共同匹配的行,如果在一个表中没有匹配到对应的行,则不会显示在结果中。
语法如下:
sqlSELECT columns FROM table1 INNER JOIN table2 ON table1.column = table2.column;
例如,假设我们有两个表:
students
和grades
,它们通过学生ID进行关联。下面的查询将返回两个表中匹配的学生及其成绩:sqlSELECT students.name, grades.grade FROM students INNER JOIN grades ON students.student_id = grades.student_id;
-
外连接(OUTER JOIN) :
外连接允许返回匹配的行以及未匹配的行。MySQL支持左外连接(LEFT JOIN)、右外连接(RIGHT JOIN)和全外连接(FULL JOIN)。
-
左外连接(LEFT JOIN):返回左表中的所有行,以及右表中与左表中行匹配的行。如果右表中没有匹配的行,则会在结果中显示 NULL 值。
语法如下:
sqlSELECT columns FROM table1 LEFT JOIN table2 ON table1.column = table2.column;
-
右外连接(RIGHT JOIN):与左外连接类似,但是返回右表中的所有行,以及左表中与右表中行匹配的行。
语法如下:
sqlSELECT columns FROM table1 RIGHT JOIN table2 ON table1.column = table2.column;
-
全外连接(FULL JOIN):返回两个表中的所有行,并且对于没有匹配的行,将会使用 NULL 值填充。
MySQL并不直接支持FULL JOIN,但可以通过UNION ALL和LEFT JOIN、RIGHT JOIN的组合来实现。
例如,下面的查询将返回所有学生,以及他们的成绩(如果有的话):
sqlSELECT students.name, grades.grade FROM students LEFT JOIN grades ON students.student_id = grades.student_id;
-