现有两个表,商品表(products)和sales_detail(销售记录表)。如下图:

products:
      pid pname pcode
    1   商品1   AC90
    2   商品2 DE78
     3   商品3    XXXX

sales_detail:
    aid pcode saletime
    1   AC90 2008-09-22
    2   DE78 2008-09-22
    3   AC90 2008-09-23
    4   AC90 2008-09-24

按商品在某个时间段内的销售量来排行,比如我想统计23-24号这两天的销售数量并排行。(注:DE78这个商品在这两天没有销售,但是也要显示出来,只是数量为0)。

-- 表的结构 `products`
--
CREATE TABLE `products` (
   `pid` int(3) NOT NULL auto_increment,
   `pname` varchar(20) NOT NULL,
   `pcode` varchar(20) NOT NULL,
   PRIMARY KEY   (`pid`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
--
-- 导出表中的数据 `products`
--
INSERT INTO `products` (`pid`, `pname`, `pcode`) VALUES (1, '商品1', 'AC90'),
(2, '商品2', 'DE78'),
(3, '商品3'. 'XXXX');
-- --------------------------------------------------------
--
-- 表的结构 `sales_detail`
--
CREATE TABLE `sales_detail` (
   `aid` int(3) NOT NULL auto_increment,
   `pcode` varchar(20) NOT NULL,
   `saletime` date NOT NULL,
   PRIMARY KEY   (`aid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
--
-- 导出表中的数据 `sales_detail`
--
INSERT INTO `sales_detail` (`aid`, `pcode`, `saletime`) VALUES (1, 'AC90', '2008-09-22'),
(2, 'DE78', '2008-09-22'),
(3, 'AC90', '2008-09-23'),
(4, 'AC90', '2008-09-24');

区别两条sql语句:

select p.pname,p.pcode,s.saletime,count(s.aid) as total from products as p
left join sales_detail as s on (s.pcode=p.pcode)
where s.saletime in ('2008-09-23','2008-09-24')
group by p.pcode order by total desc,p.pid asc

+---------+-------+------------+-------+
| pname   | pcode | saletime   | total |
+---------+-------+------------+-------+
| 商品1   | AC90 | 2008-09-23 |     2 |
+---------+-------+------------+-------+

select p.pname,p.pcode,s.saletime,count(s.aid) as total from products as p
left join sales_detail as s on ((s.pcode=p.pcode) and s.saletime in ('2008-09-23','2008-09-24'))
group by p.pcode order by total desc,p.pid asc

+---------+-------+------------+---------+
| pname   | pcode | saletime   | total |
+---------+-------+------------+-------+
| 商品1   | AC90 | 2008-09-23 |     2 |
| 商品2   | DE78 | NULL       |     0 |
| 商品3   | XXXX   | NULL       |     0 |
+---------+-------+------------+---------+

心得:on中的条件关联,一表数据不满足条件时会显示空值。where则输出两表完全满足条件数据。

转载于:https://www.cnblogs.com/flyfesh/archive/2009/07/03/1516507.html

sql server 关联left join条件on和where条件的区别相关推荐

  1. sql server 关联_SQL Server中的关联规则挖掘

    sql server 关联 Association Rule Mining in SQL Server is the next article in our data mining article s ...

  2. 游标sql server_了解游标并将其替换为SQL Server中的JOIN

    游标sql server Relational database management systems including SQL Server are very good at processing ...

  3. SQL Server 中 SELECT INTO 和 INSERT INTO SELECT语句的区别

    SQL Server 中 SELECT INTO 和 INSERT INTO SELECT语句的区别 我们在写存储过程的时候经常会遇到需要将查询到的数据存到一张表里面的情况,如将一个table1的数据 ...

  4. MS SQL SERVER 中merge join合并连接介绍(转)

    1概述 Merge join 合并连接.两个集合进行merge join,需要有一个等值的条件,然后需要两个已排序好的集合. 2 one-to-many与many-to-many 2.1 One-to ...

  5. 在SQL Server中使用JOIN更新表?

    我想更新在其他表上进行联接的表中的列,例如: UPDATE table1 a INNER JOIN table2 b ON a.commonfield = b.[common field] SET a ...

  6. SQL Server安全性和基于策略的管理–高级条件

    The policy core consists of conditions and targets. Moreover, complex targets are defined by additio ...

  7. SQL语句中 left join 后用 on 还是 where,区别大了!

    点击关注公众号,Java干货及时送达 来源:blog.csdn.net/wqc19920906/article/details/79785424 前天写SQL时本想通过 A left B join o ...

  8. SQL 语句中 left join 后用 on 还是 where,区别大了!

    来源:blog.csdn.net/wqc19920906/article/details/79785424 前天写SQL时本想通过 A left B join on and 后面的条件来使查出的两条记 ...

  9. SQL Server 中深入理解GRANT、REVOKE 和 DENY 的区别

    在SQL Server数据库登陆账户.数据库用户权限管理中,经常会授予权限.回收权限,有时还会拒绝权限.GRANT.REVOKE是我们常用的,但有时会遇到使用DENY的情形.从英文单词的字面意思来看, ...

最新文章

  1. z变换公式表_如何使用标准正态分布表?
  2. Maven构建依赖项
  3. .Net Discovery系列之三 深入理解.Net垃圾收集机制(上)
  4. 博达路由器常见功能教学0
  5. 关于office2010的mso问题和卸载重装问题
  6. 利用数据质量规则库推动数据质量管理
  7. 单纤光模块与双纤光模块的区别是什么?
  8. 梁漱溟:人生的三种态度 | 合道的生活
  9. linux下载finger程序,Linux的finger命令
  10. pmon下nandflash相关操作
  11. Android应用程序开发——创建应用程序
  12. C#使用GetPixel函数获取指定坐标点的rgb值
  13. stack_push、pop
  14. Flutter 利用 Hero 动效实现列表详情页的无缝切换
  15. 如何查看windows版本
  16. python炫酷动画源代码_(数据科学学习手札85)Python+Kepler.gl轻松制作酷炫路径动画...
  17. 系统分析设计期末大项目——闲得一币TimeForCoin小程序前端
  18. 合肥工业大学宣城校区Java技术实验二 基于GUI的网络通信程序设计
  19. 只需一键录音转文字,会议记录让你不在烦恼
  20. 小麦数据集-聚类应用

热门文章

  1. linux dns语法检测工具,DNS解析检查工具之nslookup
  2. 一元流量参数为null_为什么牛逼的程序员都不用 “ ! = null quot; 做判空?
  3. python调用系统api_Python调用系统底层API播放wav文件的方法
  4. docker 容器安装conposer_docker学习笔记(二)docker-composer
  5. 网站https加载不出css样式_Python Web全栈之旅04--Web前端●走入CSS的世界
  6. 2008年最受欢迎的资源TOP100
  7. conda(pip) bad interpreter的解决办法
  8. 2020-07-02 CVPR2020 VL论文讨论(3) 笔记
  9. 2019年, image captioning论文汇总
  10. hdu3549(又是最大流模板题)