join的用法是SQL查询中最为常见的语法之一,也是使用者必须非常理解并掌握的知识点,今天我将通过本文给大家好好讲讲,为了实验效果而提前准备的两张表:
Innerjoin:内连接,产生的结果是两边的交集(数学不好的小伙伴们,解释下交集就是A和B同时都有相同的值),比较简单就不贴代码了,我们直接看下效果:
2.Leftjoin:左连接,以左边的表为基准,不管是否满足条件都会把左边的数据全部展示,而右边的数据只显示能匹配上的,匹配不上时用null填充;
代码效果如下:
3.Rightjoin:右连接,理解方式同左连接,只是换成了以右边的表为基准,左边的数据去匹配,只显示能匹配上的,匹配不上用null填充;
4.FullOutjoin:外连接,产生的结果是表A和表B的并集,也就是会全部显示出来,看下结果:
5.Crossjoin:返回A和B表笛卡尔积的结果集,将左边和右边的每种可能组合都列出来,返回的行数是表A的行数x表B的行数,结果展示:
总结:
join用法关联条件使用的是on关键字,类似于where语句;Innerjoin用法就相当于普通的表用逗号关联,leftjoin用法类似于*=,但是*=在sql版本以后就不被支持了;leftjoin和rightjoin也是外连接,所以也可以写成leftouterjoin和rightouterjoin,一般都用简写;项目中常用的就是Innerjoin、leftjoin、rightjoin,FullOutjoin用的很少,Crossjoin尽量不要用,尤其是数据量大的表,关联的时候如果产生笛卡尔积,会严重影响性能,因此一定要注意。
再说个join之外的知识点,关于null的,前面的文章中也用到了这个概念。
首先我们要明白的是,null不是空,更不是空格,null是什么都没有。
举个可能不太恰当的例子,帮助理解下:
(1)某次期末考试,A同学没去参加,因此查不到他考试的记录,此时其成绩可表述为null,null表示没有值;
(2)某次期末考试,A同学参加考试了,但成绩还没出来,因此能查到他考试了,但是其成绩暂时表述为空,空也是值;
(3)某次期末考试,A同学参加考试了,但是成绩比较差,题目全错了,那么其此时的成绩可以表示为0,或者空格,这属于常量值了。
这个例子感觉还是说明的不够清楚,但是希望读者能大致明白这几个概念上的区别,后面我们再通过各种的例子和代码,去增加对这些概念的理解。
转载请注明:http://www.0431gb208.com/sjsbszl/3573.html