zoukankan      html  css  js  c++  java
  • sqlserver 中 where 条件和 join 条件的作用比较

    1、where 条件 和 inner join 条件 起的作用是一样的。

    2、如果where 条件 + Left join 条件 进行组合,其实际跟 inner join 效果一样,

         如:使用sqlserver 教学用的 Northwind 数据库,我想统计一下 某段时间内 各客户的运费情况,比较以下sql查询语句的结果:

    语句1).
    select Customers.CustomerID, sum(Orders.Freight)
     from Customers
      left join Orders  on Customers.CustomerID = Orders.CustomerID
      where Orders.OrderDate between '2010-01-01' and  '2010-02-01'
     group by Customers.CustomerID

     order by Customers.CustomerID

    语句2).

    select Customers.CustomerID, sum(Orders.Freight)
     from Customers
      left join Orders  on Customers.CustomerID = Orders.CustomerID and Orders.OrderDate between  '2010-01-01' and  '2010-02-01'
     group by Customers.CustomerID
     order by Customers.CustomerID

    我使用了 Orders  表中不会存在记录的时间段 2010-1-1 到 2010-2-1,主要是为了突出结果的对比

    使用语句1) ,返回0条记录,并不是我想要的统计结果,

    使用语句2) ,返回91条记录,这就是我想要的统计结果。

    我在语句1)中也用了左连接啊,那么为什么语句1)和语句2)得到结果完全不一样呢?我想很多人是使用语句1)的方式来构造 sql查询语句的,和我一样有相同的疑问。

    使用sql查询分析器里的显示执行计划功能,我们很容易可以看到语句1)跟语句3) 执行的处理过程是一摸一样的

    语句3)

    select Customers.CustomerID, sum(Orders.Freight)
     from Customers
      inner join Orders  on Customers.CustomerID = Orders.CustomerID  and Orders.OrderDate between '2010-01-01' and  '2010-02-01'
     group by Customers.CustomerID

     order by Customers.CustomerID

    答案就是:where 条件 + Left join 条件 进行组合的话,其实际跟 inner join 效果一样

    所以当使用left join进行查询时,应该使用 语句2)的方式进行语句构造。

  • 相关阅读:
    使用eclipse从github导入maven项目
    J2SE 8的Lambda --- Comparator
    J2SE 8的Lambda --- functions
    J2SE 8的Lambda --- 语法
    J2SE 8的流库 --- 收集处理结果
    J2SE 8的流库 --- 转换流, 得到的还是流
    J2SE 8的流库 --- 基本类型流的使用
    J2SE 8的流库 --- 生成流
    Hadoop 3.0 安装
    程序员到底要不要读研,过来人给你几点建议!
  • 原文地址:https://www.cnblogs.com/finema/p/1639665.html
Copyright © 2011-2022 走看看