mysql多表外连接查询、复合连接查询

外连接查询(OUTER JOIN)

内连接的查询结果仅包含符合连接条件的行。如果需要查询结果不仅包含符合连接条件的行,而且还包括左表、右表或两个连接表中的所有数据行,则应该使用外连接。
MySQL支持的外连接有两种类型:
1.左外连接(左连接 LEFT [OUTER]JOIN)
2.右外连接(右连接 RIGHT [OUTER] JOIN)
MySOL不能直接支持FULL JOIN,要实现FULLJOIN,应该使用LEFT JOIN UNION RIGHT JOIN 的方式。

左连接(LEFT OUTER JOIN)
左连接的查询结果为左表的所有记录以及右表中连接字段相等的记录。如果左表的某行在右表中没有匹配行,则在相关联的结果行中,右表的所有选择列均为空值(NULL)。

右连接(RIGHT OUTER JOIN)
右连接是左连接的反向连接,查询结果为右表中的所有记录以及左表中连接字段相等的记录。如果右表的某行在左表中没有匹配行,左表的选择列将返回空值(NULL)。

完全连接
完全连接返回左表和右表中的所有记录,包括连接字段相等的记录和不相等的记录。如果左表的某行在右表中没有匹配行,将返回空值(NULL),反之亦然。

本文可以和这篇 mysql连接查询 一起查看
以查询哪个学院还没有教师为例
查询语句如下

SELECT department.department_id,
department.department_name,
teacher.teacher_id,
teacher.teacher_name
FROM department LEFT JOIN teacher on department.department_id=teacher.department_id;

应用左连接,条件是学院的id和教师的id
此代码也可以应用右连接实现
代码如下

SELECT department.department_id,
department.department_name,
teacher.teacher_id,
teacher.teacher_name
FROM teacher RIGHT JOIN department on department.department_id=teacher.department_id;

需要修改的只是form后面的部分,通过列表的查看就能知道那个学院还没有老师。
mysql多表外连接查询、复合连接查询_第1张图片

再看一个例子,来了解复合连接
我们要找到在第二学期成绩大于90的学生
代码如下

SELECT student.student_id,
student.student_name,
course.course_name,
choose.score
FROM student inner join choose on student.student_id=choose.student_id
inner JOIN course on choose.course_id= course.course_id
WHERE choose.score>=90 AND course.term=‘第2学期’;

通过where语句来限制条件,输出在第二学期课程成绩大于90的学生信息。
mysql多表外连接查询、复合连接查询_第2张图片
我们也可以用复合连接查询再来查询一下那个学院还没有教师
代码如下

SELECT department.department_id,
department.department_name,
teacher.teacher_id,
teacher.teacher_name
FROM department LEFT JOIN teacher on department.department_id = teacher.department_id
WHERE teacher_id is null;

通过语句 where teacher_id is null 来实现对那个学院没有老师进行查询。

你可能感兴趣的:(MySQL,MySQL基础,mysql)