在 MySQL 中,LEFT JOIN
、RIGHT JOIN
和INNER JOIN
是用于连接两个或多个表的操作,以下是它们的详细用法:
一、INNER JOIN(内连接)
内连接只返回两个表中满足连接条件的行。
语法:
SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;
例如,有两个表students
和grades
,分别存储学生信息和成绩信息,通过学生的 ID 进行内连接查询学生的姓名和对应的成绩:
SELECT s.name, g.score FROM students s INNER JOIN grades g ON s.student_id = g.student_id;
特点:
- 只返回两个表中在连接条件上匹配的行。
- 如果在一个表中有行在连接条件上没有匹配到另一个表中的行,那么这些行不会出现在结果集中。
二、LEFT JOIN(左连接)
左连接返回左表中的所有行以及右表中满足连接条件的行。如果右表中没有满足连接条件的行,则相应的列将填充为 NULL。
语法:
SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name;
例如,使用左连接查询所有学生的姓名以及他们的成绩,如果某个学生没有成绩,则成绩列为 NULL:
SELECT s.name, g.score FROM students s LEFT JOIN grades g ON s.student_id = g.student_id;
特点:
- 以左表为基础,确保左表的所有行都出现在结果集中。
- 右表中没有匹配的行用 NULL 填充。
三、RIGHT JOIN(右连接)
右连接返回右表中的所有行以及左表中满足连接条件的行。如果左表中没有满足连接条件的行,则相应的列将填充为 NULL。
语法:
SELECT column_name(s) FROM table1 RIGHT JOIN table2 ON table1.column_name = table2.column_name;
例如,使用右连接查询所有有成绩的学生信息以及对应的成绩,如果某个成绩没有对应的学生信息,则学生信息列为 NULL:
SELECT s.name, g.score FROM students s RIGHT JOIN grades g ON s.student_id = g.student_id;
特点:
- 以右表为基础,确保右表的所有行都出现在结果集中。
- 左表中没有匹配的行用 NULL 填充。