Bootstrap

MySQL——联表查询JoinON详解

在 MySQL 中, JOIN  操作结合  ON  子句用于实现多表之间的数据关联,以便从多个相关表中获取所需的综合信息。

 

 JOIN  的主要类型及特点:

 

1.  INNER JOIN (内连接):

 

- 这是最常见的连接类型之一。

- 只有当两个表中指定的连接列的值相匹配时,才会返回行。

- 即返回两个表的交集部分。

- 例如,假设有两个表  students (包含  student_id  和  student_name  列)和  courses (包含  course_id  和  student_id  列),要获取选修了课程的学生信息,可以这样写:

 

 

SELECT s.student_id, s.student_name, c.course_id

FROM students s INNER JOIN courses c ON s.student_id = c.student_id;

 

2.  LEFT JOIN (左连接):

 

- 以左表为基础,返回左表中的所有行。

- 对于右表,仅返回与左表连接列匹配的行。如果右表中没有匹配的行,则对应右表的列值为  NULL 。

- 比如,若要获取所有学生及其选修课程的信息,即使某些学生没有选修课程也要显示出来,可以这样写:

 

 

SELECT s.student_id, s.student_name, c.course_id

FROM students s LEFT JOIN courses c ON s.student_id = c.student_id;

 

3.  RIGHT JOIN (右连接):

 

- 与左连接相反,以右表为基础。

- 返回右表中的所有行,对于左表,仅返回与右表连接列匹配的行。若左表无匹配,则对应左表的列值为  NULL 。

- 示例:假设想获取所有课程及其选修学生的信息,即使某些课程没有学生选修也要显示,可以这样写:

 

 

SELECT s.student_id, s.student_name, c.course_id

FROM students s RIGHT JOIN courses c ON s.student_id = c.student_id;

 

 

在使用  ON  子句指定连接条件时,需要清晰地定义两个表中用于关联的列之间的关系。关系可以是相等( = )、大于( > )、小于( < )、大于等于( >= )、小于等于( <= )、不等于( <>  或  != )等。

 

例如,如果要获取年龄大于 18 岁的学生及其选修课程信息,可以这样写:

 

 

SELECT s.student_id, s.student_name, c.course_id

FROM students s INNER JOIN courses c ON s.student_id = c.student_id AND s.age > 18;

 

 

此外,还可以使用多个条件进行连接,例如:

 

 

SELECT s.student_id, s.student_name, c.course_id

FROM students s INNER JOIN courses c ON s.student_id = c.student_id AND s.age > 18 AND c.course_name = 'Math';

 

 

总之,正确使用  JOIN  和  ON  子句可以灵活、高效地从多个表中获取所需的数据,帮助你构建复杂但准确的查询语句来满足各种业务需求。

;