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

使用的表:[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. [改善Java代码]构造函数尽量简化

    建议34: 构造函数尽量简化 我们知道在通过new关键字生成对象时必然会调用构造函数,构造函数的简繁情况会直接影响实例对象的创建是否繁琐.在项目开发中,我们一般都会制订构造函数尽量简单,尽可能不抛异常 ...

  2. sqlserver和oracle中对全半角的转换

    oracle中对全半角的转换 to_single_byte(c)转换成半角 to_multi_byte(c)转换成全角 SELECT To_single_byte('881898?71') FROM ...

  3. Ubuntu下用SecureCRT连接串口/dev/ttyUSB0权限修复

    在普通用户的模式下,用SecureCRT链接串口交换机,开始会提示/dev/ttyUSB0权限不足,无法打开,临时的解决办法是 chmod 0+rw /dev/ttyUSB0 但是这个重启后便没了作用 ...

  4. Android开发需要注意的坑

    Android开发需要注意的坑一览​对于一些Android开发过程中坑爹.细小,但又重要的错误的总结​Android开发在路上:少去踩坑,多走捷径其他参考: ​google官方版本发布图 ​umeng ...

  5. Sqlite事物与锁

    1事务 事务定义了一组SQL命令的边界,这组命令或者作为一个整体被全部执行,或者都不执行.事务的典型实例是转帐. 2事务的范围 事务由3个命令控制:BEGIN.COMMIT和ROLLBACK.BEGI ...

  6. 如何检查mysql中建立的索引是否生效的检测方法及相关参数说明

    所使用的mysql函数explain语法:explain < table_name >例如: explain select * from t3 where id=3952602;expla ...

  7. Linux msgsnd : invalid argument

    msgsnd(message id, buffer, sizeof buffer, ...); Important: buffer[0]不能为0!!!

  8. 20141016--for 兔子

    Console.Write("请输入月数:"); int m =int.Parse(Console.ReadLine()); ;//成兔对数ct ;//小兔对数xt ;//幼兔对数 ...

  9. OC1_类方法的内存管理

    // // Dog.h // OC1_类方法的内存管理 // // Created by zhangxueming on 15/6/19. // Copyright (c) 2015年 zhangxu ...

  10. Call C# code from C++

    Reference: https://support.microsoft.com/en-us/kb/828736 Calling C# .NET methods from unmanaged C/C+ ...