SQL中on和where的使用及其差异
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了SQL中on和where的使用及其差异,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3733字,纯文字阅读大概需要6分钟。
内容图文
![SQL中on和where的使用及其差异](/upload/InfoBanner/zyjiaocheng/1250/5fb32087abc14e55b33a1054195b07ae.jpg)
在编写SQL脚本中,多表连接查询操作需要使用到on和where条件,但是经常会混淆两者的用法,从而造成取数错误。为此,使用测试数据进行总结如下:
![技术分享](/upload/getfiles/default/2022/11/15/20221115014015972.jpg)
![技术分享](/upload/getfiles/default/2022/11/15/20221115014016102.jpg)
![技术分享](/upload/getfiles/default/2022/11/15/20221115014016224.jpg)
![技术分享](/upload/getfiles/default/2022/11/15/20221115014016471.jpg)
1 SELECT A1.User_Id 2,A1.Month_Id 3,A1.Brand_Id 4,A1.Rate 5 ,A2.User_Id 6,A2.Month_Id 7,A2.Type_Id 8FROM table_a A1 9LEFTJOIN table_b A2 10ON A1.User_Id=A2.User_Id11AND A1.Month_Id=A2.Month_Id 12 ;
最终的记录数等于主表的记录数。
1 SELECT A1.User_Id 2,A1.Month_Id 3,A1.Brand_Id 4,A1.Rate 5 ,A2.User_Id 6,A2.Month_Id 7,A2.Type_Id 8FROM table_a A1 9LEFTJOIN table_b A2 10ON A1.User_Id=A2.User_Id11AND A1.Month_Id=A2.Month_Id 12WHERE A1.Brand_Id=‘501B03‘13 ;
![技术分享](/upload/getfiles/default/2022/11/15/20221115014017002.jpg)
1 SELECT A1.User_Id 2,A1.Month_Id 3,A1.Brand_Id 4,A1.Rate 5 ,A2.User_Id 6,A2.Month_Id 7,A2.Type_Id 8FROM table_a A1 9LEFTJOIN table_b A2 10ON A1.User_Id=A2.User_Id11AND A1.Month_Id=A2.Month_Id 12WHERE A1.Brand_Id=‘501B03‘13AND A2.Type_Id=1014 ;
进一步说明,where条件是对连接产生的查询结果集的二次筛选。
1 SELECT A1.User_Id 2,A1.Month_Id 3,A1.Brand_Id 4,A1.Rate 5 ,A2.User_Id 6,A2.Month_Id 7,A2.Type_Id 8FROM table_a A1 9LEFTJOIN table_b A2 10ON A1.User_Id=A2.User_Id11AND A1.Month_Id=A2.Month_Id 12AND A1.Brand_Id=‘501B03‘13 ;
![技术分享](/upload/getfiles/default/2022/11/15/20221115014017494.jpg)
![技术分享](/upload/getfiles/default/2022/11/15/20221115014017618.jpg)
1 SELECT A1.User_Id 2,A1.Month_Id 3,A1.Brand_Id 4,A1.Rate 5 ,A2.User_Id 6,A2.Month_Id 7,A2.Type_Id 8FROM table_a A1 9LEFTJOIN table_b A2 10ON A1.User_Id=A2.User_Id11AND A1.Month_Id=A2.Month_Id 12AND A2.Type_Id=1013 ;
![技术分享](file:///C:/Users/Administrator/AppData/Local/YNote/data/ganfengzhou1989@163.com/fd56b497f2da4985b0e81aa2689d5080/clipboard.png)
总结如下:这里添加了对被连接表的On条件,这个条件也不会影响主表在最后结果集中的记录,它的作用主要是对被连接表首先进行一次筛选,它会让符合这个条件的被连接表中的记录去参与与主表的连接操作,其他不符合on条件的记录根本就没有机会参与与主表的连接。
1 SELECT A1.User_Id 2,A1.Month_Id 3,A1.Brand_Id 4,A1.Rate 5 ,A2.User_Id 6,A2.Month_Id 7,A2.Type_Id 8FROM table_a A1 9LEFTJOIN table_b A2 10ON A1.User_Id=A2.User_Id11AND A1.Month_Id=A2.Month_Id 12AND A1.Brand_Id=‘501B03‘13AND A2.Type_Id=1014 ;
![技术分享](file:///C:/Users/Administrator/AppData/Local/YNote/data/ganfengzhou1989@163.com/6099e18aab4e429598eef54fa8ce7f86/clipboard.png)
![技术分享](http://image.bubuko.com/info/201505/20180110160624622765.png)
![技术分享](http://image.bubuko.com/info/201505/20180110160624624718.png)
![技术分享](file:///C:/Users/Administrator/AppData/Local/YNote/data/ganfengzhou1989@163.com/b0dd5e09e5f74c5f8ce6d695260d1228/clipboard.png)
1 SELECT A1.User_Id 2,A1.Month_Id 3,A1.Brand_Id 4,A1.Rate 5 ,A2.User_Id 6,A2.Month_Id 7,A2.Type_Id 8FROM table_a A1 9LEFTJOIN table_b A2 10ON A1.User_Id=A2.User_Id11 ;
这样可以看到,最后查询结果集的记录数不再是14条记录,而是15条,这说明了一点,最后的结果集中的记录数并不是和主表中记录数一致的,而是由主表和被连接表根据连接条件共同确定的,还可以说明的一点是,不论on条件是什么样,多简单多复杂,只要没有where条件,最后的查询结果集中的记录数不会少于主表记录数。对于这个例子,主表中的14条记录都会进入结果表,由于主表中的连接条件只有User_Id相等,因此,对于A2表中的User_Id=989832由于存在两条记录,因此都会与A1表User_Id=989832的那一条记录相连,因此产生了两条连接结果记录,所以使得最后的结果集增至15条记录。
1 SELECT A1.User_Id 2,A1.Month_Id 3,A1.Brand_Id 4,A1.Rate 5 ,A2.User_Id 6,A2.Month_Id 7,A2.Type_Id 8FROM table_a A1 9LEFTJOIN table_b A2 10ON A1.User_Id=A2.User_Id11AND A1.Month_Id=A2.Month_Id 12 ;
上面给A1和A2表的连接条件增加了一个Month_Id相等的条件,这样只有满足这一条件的A2表记录才会参与连接,这样就对A2表中的User_Id=989832剔除了一条记录,所以最后连接只产生了14条记录。
![技术分享](http://image.bubuko.com/info/201505/20180110160624627647.png)
原文:http://www.cnblogs.com/hbsygfz/p/4527003.html
内容总结
以上是互联网集市为您收集整理的SQL中on和where的使用及其差异全部内容,希望文章能够帮你解决SQL中on和where的使用及其差异所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。