zoukankan      html  css  js  c++  java
  • sql之表连接 筛选条件放在 连接外和放在连接里的区别

    使用一个简单的例子,说明他们之间的区别

    使用的表:[Sales.Orders]订单表和[Sales.Customers]客户表,和上一篇博客的表相同

    业务要求:查询出 : 所有的用户 在 2012-10-10 16:44:51.000订单数量

    通常筛选条件都会添加到连接外面 where 里面,例如:

    1 select
    2 c.custid,count(o.orderid)
    3 from [Sales.Customers] c left join [Sales.Orders] o
    4 on c.custid=o.custid
    5 where o.orderdate='2012-10-10 16:44:51.000'
    6 group by c.custid

    查询结果:

    通过结果,可以明显看出:这是不对的,因为将没有订单的用户没有搜索出来,

    这是为什么呢:因为where 条件是在  表连接之后进行筛选的,所以会将那些 不在条件里面的数据 进行 清除掉。

    如果我们将 筛选条件放在 连接的里面就不一样了

    1 select 
    2 c.custid,COUNT(orderid) --含有group by 的语句 查询内容只能含有 group by 后面的 字段和 组函数
    3 from [Sales.Customers] c left outer join [Sales.Orders] o
    4 on c.custid=o.custid and o.orderdate='2012-10-10 16:44:51.000'--条件在连接里面
    5 group by c.custid

    这个时候查询出来的结果就是:

    原因:因为将条件放在连接里面,所以在 两张表连接到一起的之后就会执行筛选条件,然后将 外连接 多余的数据添加进去,所以结果是正确的

  • 相关阅读:
    深入浅出之正则表达式(二)
    ==和equlas的区别
    温故知新 javascript 正则表达式
    SQL Server高级内容之子查询和表链接
    C语言访问webservice小例子
    jquery菜单伸缩效果
    电影资源下载网站推荐
    百度云使用迅雷下载资源
    字符编码
    7_2 利用 const 引用避免复制
  • 原文地址:https://www.cnblogs.com/xiaoxiaogogo/p/3433659.html
Copyright © 2011-2022 走看看