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

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

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

  • 相关阅读:
    2月2日学习记录
    Python爬虫学习(三)使用Scrapy库
    2月1日学习记录
    Python爬虫学习(二)使用re库
    Python爬虫学习(二)使用Beautiful Soup库
    Python爬虫学习(一)使用requests库和robots协议
    spark学习(五)RDD
    body内常用标签--form表单
    body内常用标签
    HTTP协议
  • 原文地址:https://www.cnblogs.com/xiaoxiaogogo/p/3433659.html
Copyright © 2011-2022 走看看