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连接通常用于查询表之间的关联数据。