Sql关联查询之inner join、left join、 right join、outer join

一、先来两个表

  • t_person表
number(pr_key) name class
001 张三 三班
002 李四 三班
003 王五 三班
004 刘六 三班
  • t_grade_list表
id (pr_key) num name grade
a 001 张三 99
b 002 李四 21
c 003 王五 88
g 101 马七 66

二、inner join(内连接)、left join(左连接) 、right join(右连接):

1、内连接(inner join):又叫等值连接,结果返回的是两个表中连接字段相等的行。
例如:

	select tp.* , tg.grade from t_person tp
	inner join t_grade tg on tp.number = tg.num
	where 1 = 1
	ORDER BY  tg.grade desc
	

description: 查询出有成绩学员的信息和成绩并降序排列,两个表中都存在的数据才会返回,结果如下:
在这里插入图片描述

2、左连接(left join) :又叫左外连接,返回的结果是返回左表中所有的记录以及右表中连接字段相等的记录,没有匹配结果使用NULL填补,即左表全部行+右表匹配的行。(a left join b 默认 a为左表)
例如:

	select tp.* , tg.grade from t_person tp
	left join t_grade tg on tp.number = tg.num
	where 1 = 1
	ORDER BY  tg.grade desc

description: 查询出人员表中所有学员的信息、有成绩的就加上、没成绩的就null填充。并以成绩降序排列,以左表为主表,结果如下:
在这里插入图片描述
3、右连接(right join): 返回右表中所有的记录以及左表中连接字段相等的记录,没有匹配结果使用NULL填补,即右边全部行+左边匹配的行。(a left join b 默认 b为右表、以右为主)
例如:

	select tp.* , tg.grade from t_person tp
	right join t_grade tg on tp.number = tg.num
	where 1 = 1
	ORDER BY  tg.grade desc

description: 查询出人员表中所有成绩单里学员的成绩和信息、有信息的就加上、没信息的null填充,并以成绩降序排列,以右表为主表,左右连接刚好相反。结果如下:
在这里插入图片描述


  • 补充:还有个外连接 (outer join):博主主要用的是mysql、据悉mysql没有外连接。外连接可以用左右union实现,如下:
select tp.* , tg.grade from t_person tp left join t_grade tg on tp.number = tg.num
union
select tp.* , tg.grade from t_person tp right join t_grade tg on tp.number = tg.num
where 1 = 1
ORDER BY  grade desc

description: 外连接就是左右结合的效果,结果如下:
在这里插入图片描述

  • 很久没写博客了、数据库查询之连接相对于是比较简单的东西,就当写个日记吧。如果对你有帮助、记得点个赞喔。如有错误还望指正哈。
posted @ 2020-05-27 16:19  private_static  阅读(539)  评论(0)    收藏  举报