博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL Server ON条件和WHERE条件
阅读量:5295 次
发布时间:2019-06-14

本文共 1515 字,大约阅读时间需要 5 分钟。

SQL Server中ON条件和WHER条件的区别:

一、ON条件是在生成临时表时使用的条件,它不管ON中的条件是否为真,都会返回左边表中的记录

以 LEFT JOIN 为例,新建表Item和UOM,并插入测试数据:

1 CREATE TABLE [dbo].[Item] 2 ( 3     [ID]        [INT] NULL, 4     [Item]      [INT] NULL, 5     [GroupNo]   [INT] NULL, 6     [UOM]       [INT] NULL, 7     [ParentUOM] [INT] NULL 8 ) 9 10 INSERT INTO Item11 SELECT 1,1,10,1,012 UNION13 SELECT 2,1,10,2,114 UNION15 SELECT 3,1,10,4,216 UNION17 SELECT 4,2,10,1,018 UNION19 SELECT 5,2,10,2,120 UNION21 SELECT 6,2,10,4,222 UNION23 SELECT 7,1,20,1,024 UNION25 SELECT 8,1,20,2,126 UNION27 SELECT 9,1,20,4,228 UNION29 SELECT 10,1,30,1,030 UNION31 SELECT 11,1,30,2,132 UNION33 SELECT 12,1,30,4,234 35 CREATE TABLE [UOM]36 (37     [ID]        [INT] NULL,38     [ParentUOM] [INT] NULL39 )40 41 INSERT INTO UOM42 SELECT 1,043 UNION44 SELECT 2,145 UNION46 SELECT 3,147 UNION48 SELECT 4,249 UNION50 SELECT 5,251 UNION52 SELECT 6,3

1、当 Item LEFT JOIN UOM ON xxx 时,结果返回所有Item记录,ON xxx是表关联时的条件,根据条件Item表记录与UOM表记录关联,最终只有满足关联条件的UOM表记录会保留

1 SELECT A.*,B.*2 FROM  Item A3 LEFT JOIN UOM B ON A.ParentUOM = B.ID

 

查询结果:

 

2、ON条件不能过滤Item表记录,即使ON条件中是Item.xxx。Item.xxx只是限定了Item表中哪些记录参与到关联过程,以便过滤UOM表记录

1 SELECT A.*,B.*2 FROM  Item A3 LEFT JOIN UOM B ON A.ParentUOM = B.ID AND A.GroupNo = 10

与1中产寻脚本不同是ON条件中增加 A.GroupNo = 10

查询结果:

比较两次查询结果:2中的查询结果,结果7-12因为GroupNo != 10,所以结果中UOM记录全部为NULL

 

3、总结

LEFT JOIN 如果是想要在最终结果集过滤左表中的记录,不能通过ON条件,需要使用WHERE条件

 

二、WHERE条件是在临时表生成后,在对临时表进行过滤时使用的条件

三、如果左表很大,而且查询的结果相同时,使用ON条件可以减小中间临时表的大小,使用ON条件效率比WHERE条件高

转载于:https://www.cnblogs.com/jie0602/p/11215875.html

你可能感兴趣的文章
sdut_1189
查看>>
机器视觉:SSD Single Shot MultiBox Detector
查看>>
国内外免费电子书(数学、算法、图像、深度学习、机器学习)
查看>>
狄利克雷过程(Dirichlet Process)
查看>>
五子棋项目的实现(二)博弈树算法的描述
查看>>
Hibernate : Disabling contextual LOB creation as createClob() method threw error
查看>>
【bzoj4872】[Shoi2017]分手是祝愿 期望dp
查看>>
字符串元转分
查看>>
thinkphp 防sql注入
查看>>
201521123044 《Java程序设计》第1周学习总结
查看>>
MIT Scheme 的基本使用
查看>>
程序员的“机械同感”
查看>>
在16aspx.com上下了一个简单商品房销售系统源码,怎么修改它的默认登录名和密码...
查看>>
c++回调函数
查看>>
linux下Rtree的安装
查看>>
【Java】 剑指offer(53-2) 0到n-1中缺失的数字
查看>>
Delphi中ListView类的用法
查看>>
博客第一弹—聊聊HTML的那些事
查看>>
Python Web框架Django (零)
查看>>
多米诺骨牌
查看>>