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

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

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

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

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

查询结果:

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

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

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

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

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

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

sql之表连接 筛选条件放在 连接外和放在连接里的区别的更多相关文章

  1. sql相同表不同查询条件合并显示

    关键字:FULL JOIN 只要其中某个表存在匹配,FULL JOIN 关键字就会返回行. select a.createtime, ISNULL(lp, 0) lp , ISNULL(hp, 0) ...

  2. qt检测网络连接状态【只能检测和路由器的连接,不能测试到外网的连接】

    #include <QCoreApplication>#include <QDebug>#include <QTextStream>#include <QDi ...

  3. MySQL 中 on与where筛选条件的区别

    在两张表连接的时候才会有on的筛选条件,那么on和where的区别是什么呢? 在inner join中是没有区别的,但是在左连接和右连接中,区别就体现出来了,下面以左连接为例: 1.用on的时候,只对 ...

  4. 转:SQL:外连接on条件与where条件的区别

    原文地址:http://hi.baidu.com/benben1006/blog/item/187deb77bc0e5319b151b974.html 数据库在通过连接两张或多张表来返回记录时,都会生 ...

  5. SQL join 连接时 条件加在 on后面和 where 的区别

    task 是用户任务表,manageuser是用户表,以left join 为参考: 此时主表是task,三条sql语句:注意区别.第一句无筛选条件,第二句筛选条件在on后面,第三句sql的筛选语句放 ...

  6. MySql 筛选条件、聚合分组、连接查询

    筛选条件 比较运算符 等于: = ( 注意!不是 == ) 不等于: != 或 <> 大于: > 大于等于: >= 小于: < 小于等于: <= IS NULL I ...

  7. SQL多表连接查询(详细实例)

    转载博客:joeleo博客(http://www.xker.com/page/e2012/0708/117368.html) 本文主要列举两张和三张表来讲述多表连接查询. 新建两张表: 表1:stud ...

  8. SQL多表连接查询

    SQL多表连接查询 本文主要列举两张和三张表来讲述多表连接查询. 新建两张表: 表1:student  截图如下: 表2:course  截图如下: (此时这样建表只是为了演示连接SQL语句,当然实际 ...

  9. 关系数据库SQL之高级数据查询:去重复、组合查询、连接查询、虚拟表

    前言 接上一篇关系数据库SQL之基本数据查询:子查询.分组查询.模糊查询,主要是关系型数据库基本数据查询.包括子查询.分组查询.聚合函数查询.模糊查询,本文是介绍一下关系型数据库几种高级数据查询SQL ...

随机推荐

  1. 【转】Nginx模块开发入门

    转自: http://kb.cnblogs.com/page/98352/ 结论:对Nginx模块开发入门做了一个helloworld的示例,简单易懂.也有一定的深度.值得一看. Nginx模块开发入 ...

  2. 跟我一起学习VIM - The Life Changing Editor

    前两天同事让我在小组内部分享一下VIM,于是我花了一点时间写了个简短的教程.虽然准备有限,但分享过程中大家大多带着一种惊叹的表情,原来编辑器可以这样强大,这算是对我多年来使用VIM的最大鼓舞吧.所以分 ...

  3. chrome浏览器取消置顶的方法

    这两天在使用google chrome浏览器的时候,发现chrome被默认置顶,取消chrome默认的方法为在浏览器上按 “ALT + Space + C”,然后再重开chorme就可以了.

  4. 自定义表单样式之checkbox和radio

    1,起因 最近在工作中要实现自定义式的radio样式,而我们通常使用的时默认的样式,因为自己实在想不到解决的方法,于是开始搜索,最终看到了不错的解决办法,可以完美解决我们遇到的问题. 2,原理 大家都 ...

  5. Redis - HyperLogLogs

    A HyperLogLog is a probabilistic data structure used in order to count unique things (technically th ...

  6. django 学习-5 模板使用流程

    首先在模板下建一个index.html <!DOCTYPE html><html><head><meta charset="utf-8" ...

  7. SQL server经典电子书、工具和视频教程汇总

    SQL server经典电子书.工具和视频教程汇总 SQL server经典电子书.工具和视频教程汇总 SQL Server是高校计算机专业的一门必修课程,同时众多企业采用SQL Server作为数据 ...

  8. BLK-MD-BC04-B蓝牙模块的资料

    BLK-MD-BC04-B蓝牙模块的资料   蓝牙模块说明 蓝牙模块 波特率 波特率从1200到1382400,具体可以参考波特率列表.     电平接口 答:模块的接口是SPP电平,电压为3.3V. ...

  9. android apk 逆向中常用工具一览

    关于apk 逆向中的一些工具的使用,看了不少文章,也使用过有很长一段时间了,今天对此做一总结: 几种文件之间的转换命令: 1. odex -> smali java -jar  baksmali ...

  10. java SimpleDateFormat非线程安全测试

    public class MyThread extends Thread { private SimpleDateFormat sdf; private String dateString; publ ...