本章主要介绍数据库中Join的的用法,也是我们在使用数据库时非常基础的一个知识点。本次会介绍数据库中的inner joinleft joinright join 的用法以及它们之间的区别。 文章如有错误还请大家及时指出~

以下都是采用mysql数据库

Join

相信大家在学习数据库的使用时,都有使用过Join,对数据库中的两张或两张以上表进行连接操作。
Join 分为:

内连接(inner join)

外连接(outer join)

其中外连接分为:

  • 左外连接(left outer join)
  • 右外连接(right outer join)
  • 全外连接(full outer join)

说明:

1.其中外连接的“OUTER”关键字可以省略不写。
2.内连接用于返回满足连接条件的记录;而外连接则是内连接的扩展,它不仅会满足连接条件的记录,而且还会返回不满足连接条件的记录。

笛卡尔积

在我们进行多表联合查询的时候会出现的一种情况——笛卡尔积现象

我们以下面两张表举例:

学生表(Student)

ID

StudentName

StudentClassID

1

小明

1

2

小红

2

3

小兰

3

4

小吕

2

5

小梓

1

班级表(Class)

ClassID

ClassName

1

软件一班

2

软件二班

3

软件三班

当我们进行查询操作的时候:

select * from Student,Class;


mysql left join 以后怎么还有null值出现 数据库中left join_数据库

就会出现上面的情况,也就是笛卡尔现象,表Student中有5条记录,表Class中有3条记录,那么对于表Student而言有5种选择,对于表Class来说有3种选择。所以一共有 5 * 3 = 15种选择了,也就是笛卡尔积


内连接——inner join

内连接查询返回满足条件所有记录,默认情况下没有指定任何连接则为内连接。
例如:查询xx学生在xx班级 沿用上面的数据表

select stu.StudentName,cl.ClassName from Student stu inner join Class cl on stu.StudentClassID=cl.ClassID;


查询结果

mysql left join 以后怎么还有null值出现 数据库中left join_数据库_02

左外连接——left join

左外连接查询不仅返回满足条件的所有记录,而且还会返回不满足连接条件的连接操作符左边表其他行

我们在原Student 表中新增学生:小美

mysql left join 以后怎么还有null值出现 数据库中left join_外连接_03


例如: 查询xx学生在xx班级 沿用上面的数据表

select stu.StudentName,cl.ClassName from Student stu left join Class cl on stu.StudentClassID=cl.ClassID;


查询结果

mysql left join 以后怎么还有null值出现 数据库中left join_内连接_04

右外连接——right join

右外连接查询不仅返回满足条件的所有记录,而且还会返回不满足连接条件的连接操作符右边表其他行
我们在原Class表中新增班级:软件四班

mysql left join 以后怎么还有null值出现 数据库中left join_数据库_05

例如: 查询xx学生在xx班级 沿用上面的数据表

select stu.StudentName,cl.ClassName from Student stu right join Class cl on stu.StudentClassID=cl.ClassID;

查询结果

mysql left join 以后怎么还有null值出现 数据库中left join_外连接_06

全连接——full join

全连接查询不仅返回满足条件的所有记录,而且还会返回不满足连接条件的其他行。

注:mysql默认不支持full join。

上面代码在mysql执行是报错的,因为mysql不支持全连接,只能用以下代码实现效果,含义是左连接+右连接+去重=全连接