SQL JOIN 连接详细介绍及简单使用实例

1. 什么是SQL JOIN连接

SQL JOIN 连接用于将两个或多个表中的行与相关联的数据组合在一起。连接的方式包括:INNER JOIN(内连接)、LEFT JOIN(左连接)、RIGHT JOIN(右连接)和FULL OUTER JOIN(全外连接)等多种类型。

使用JOIN连接最常见的原因是为了获取表之间的关联数据。例如,假设我们有两个表,一个是学生表,另一个是课程表,两个表之间有一列共同的数据:学生的ID。我们需要将两张表连接起来,然后依据学生的ID匹配每个学生所选的课程。

2. SQL JOIN连接的语法

使用JOIN连接时,需要在SELECT语句中指定连接的表以及连接方式,然后使用ON语句来定义连接条件。以下是SQL JOIN连接的基本语法:

SELECT column_name(s)

FROM table1

JOIN table2

ON table1.column_name = table2.column_name;

其中,table1和table2是要连接的表,ON语句用于指定连接条件。

2.1 INNER JOIN(内连接)

INNER JOIN(内连接)返回符合连接条件的行,即只会返回两个表中都有匹配数据的行。

SELECT table1.column1, table2.column2

FROM table1

INNER JOIN table2

ON table1.column_name = table2.column_name;

2.2 LEFT JOIN(左连接)

LEFT JOIN(左连接)返回左表中的所有行以及右表中符合连接条件的行。

SELECT table1.column1, table2.column2

FROM table1

LEFT JOIN table2

ON table1.column_name = table2.column_name;

2.3 RIGHT JOIN(右连接)

RIGHT JOIN(右连接)返回右表中的所有行以及左表中符合连接条件的行。

SELECT table1.column1, table2.column2

FROM table1

RIGHT JOIN table2

ON table1.column_name = table2.column_name;

2.4 FULL OUTER JOIN(全外连接)

FULL OUTER JOIN(全外连接)返回左表和右表中所有行。

SELECT table1.column1, table2.column2

FROM table1

FULL OUTER JOIN table2

ON table1.column_name = table2.column_name;

3. 使用实例

3.1 INNER JOIN(内连接)实例

假设我们有两个表,一个是学生表,另一个是课程表,两个表都包含一个列t_id,表示学生或者课程的ID。现在我们需要将两张表连接起来,查询每个学生所选的课程及成绩。

SELECT student.name AS '学生姓名', course.name AS '课程名称', score.score_num AS '成绩'

FROM student

INNER JOIN score ON student.t_id = score.t_id

INNER JOIN course ON score.c_id = course.c_id;

3.2 LEFT JOIN(左连接)实例

假设我们有两个表,一个是学生表,另一个是成绩表,两个表都包含一个列t_id,表示学生的ID。现在我们需要将两张表连接起来,查询每个学生的成绩及备注,如果该学生没有成绩,备注字段显示为 '未提交'。

SELECT student.name AS '学生姓名', score.score_num AS '成绩', IFNULL(score.remarks, '未提交') AS '备注'

FROM student

LEFT JOIN score ON student.t_id = score.t_id;

这里使用了MySQL的IFNULL函数。IFNULL函数的作用是:如果第一个参数不为NULL,则返回第一个参数的值;如果第一个参数为NULL,则返回第二个参数的值。

3.3 RIGHT JOIN(右连接)实例

假设我们有两个表,一个是成绩表,另一个是课程表,两个表都包含一个列c_id,表示课程的ID。现在我们需要将两张表连接起来,查询每个课程的平均分,如果该课程没有学生成绩,平均分字段显示为 0。

SELECT course.name AS '课程名称', AVG(IFNULL(score.score_num, 0)) AS '平均分'

FROM course

RIGHT JOIN score ON course.c_id = score.c_id

GROUP BY course.name;

这里使用了MySQL的AVG函数。AVG函数用于计算一个数值表达式的平均值,如果有NULL值,则不计算在内。因此,在这里需要使用IFNULL函数将NULL值替换为0。

3.4 FULL OUTER JOIN(全外连接)实例

假设我们有两个表,一个是学生表,另一个是成绩表,两个表都包含一个列t_id,表示学生的ID。现在我们需要将两张表连接起来,查询每个学生的成绩以及姓名和性别,如果该学生没有成绩,则成绩字段显示为 0。

SELECT student.name AS '学生姓名', student.gender AS '学生性别', 

IFNULL(score.score_num, 0) AS '学生成绩'

FROM student

FULL OUTER JOIN score ON student.t_id = score.t_id;

由于MySQL不支持FULL OUTER JOIN(全外连接),因此在实现全外连接时,我们需要将 LEFT JOIN 和 UNION 结合在一起。

SELECT student.name AS '学生姓名', student.gender AS '学生性别',

IFNULL(score.score_num, 0) AS '学生成绩'

FROM student

LEFT JOIN score ON student.t_id = score.t_id

UNION

SELECT student.name AS '学生姓名', student.gender AS '学生性别',

IFNULL(score.score_num, 0) AS '学生成绩'

FROM score

RIGHT JOIN student ON student.t_id = score.t_id

WHERE student.t_id IS NULL;

4. 总结

SQL JOIN连接是将两个或多个表中的行与相关联的数据组合在一起的一种方式。JOIN连接的方式包括:INNER JOIN(内连接)、LEFT JOIN(左连接)、RIGHT JOIN(右连接)和FULL OUTER JOIN(全外连接)等多种类型。在使用JOIN连接时,需要在SELECT语句中指定连接的表以及连接方式,然后使用ON语句来定义连接条件。JOIN连接通常用于查询表之间的关联数据。

数据库标签