sql中的join(本文仅介绍left join、right join、join on,图片是网上找的,原作者如果不允许使用请联系我)如下:
测试数据:
左连接,left join
左连接使用示例:
select * from teacher t left join course c on t.tid = c.tid;
结果:
通过上面的结果可以看出,左连接会将其左边的表作为主表(记为A),右边的表作为从表(记为B),A中的记录必定会存在,B中没有对应记录时显示为空,B中有多条记录对应时则A中的记录会重复显示。
经过测试有(下面这个仅作记录):
-- 下面两种写法结果一样
select * from teacher t left join course c on t.tid = c.tid;
select * from teacher t left join course c on c.tid = t.tid;
右连接,right join
右连接与左连接则正好相反,使用如下sql语句:
select * from course c right join teacher t on t.tid = c.tid;
结果如下:
此时也得到了如下结论:
-- 下面两种写法结果一样、只是列的顺序正好反过来的
select * from course c right join teacher t on t.tid = c.tid;
select * from teacher t left join course c on c.tid = t.tid;
显然这个结果也印证了我上面说的右连接与左连接正好相反。
内连接,join on
内连接与上面两种不同,它会将两张表中不符合on后面条件的记录全部筛掉,可以理解为在左连接的基础上将从表中记录为null的记录去除掉(左连接中所说的B表),使用如下sql语句:
select * from course c join teacher t on t.tid = c.tid;
结果为:
多个联表查询
多个联表查询原理其实还是和上面的类似,只要懂了上面所说的内容,那么多个联表查询也就十分简单了,看下面的sql:
select * from teacher t join teachercard tc on t.tid = tc.tid
left join course c on tc.tid = c.tid;
查询出来的结果如下:
显然它的结果是根据teacher表和teachercard表联表查出来的结果再去进行左连接查询。