`
moqiang02
  • 浏览: 529406 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
文章分类
社区版块
存档分类
最新评论

MySQL关联left join 条件on与where不同

阅读更多

以下的文章主要讲述的是MySQL关联left join 条件on与where 条件的不同之处,我们现在有两个表,即商品表(products)与sales_detail(销售记录表)。我们主要是通过这两个表来对MySQL关联left join 条件on与where 条件的不同之处进行讲述。

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)。

MySQL关联left join条件on和where条件的区别表的结构 `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'); 

MySQL关联left join条件on和where条件的区别区别两条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   |
+-------+-------+------------+
| 商品1 | AC90  | 2008-09-23 |
+-------+-------+------------+

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则输出两表完全满足条件数据。

分享到:
评论

相关推荐

    MySQL left join操作中on和where放置条件的区别介绍

    两者放置相同条件,之所以可能会导致结果集不同,就是因为优先级。on的优先级是高于where的。 首先明确两个概念: LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有...

    深入理解mysql之left join 使用详解

    ON 子句与 WHERE 子句的不同 一种更好地理解带有 WHERE … IS NULL 子句的复杂匹配条件的简单方法 Matching-Conditions 与 Where-conditions 的不同 关于 “A LEFT JOIN B ON 条件表达式” 的一点提醒 ON 条件(...

    mysql中left join设置条件在on与where时的用法区别分析

    主要介绍了mysql中left join设置条件在on与where时的用法区别,结合实例形式分析了mysql中left join设置条件在on与where时的相关用法区别与操作注意事项,需要的朋友可以参考下

    sql中的left join及on、where条件关键字的区别详解

    LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。 LEFT JOIN 关键字语法 SELECT column_name(s) FROM table_name1 LEFT JOIN table_name2 ON table_name1....

    解析mysql left( right ) join使用on与where筛选的差异

    本篇文章是对mysql left( right )join使用on与where筛选的差异进行了详细的分析介绍,需要的朋友参考下

    mysql not in、left join、IS NULL、NOT EXISTS 效率问题记录

    NOT IN、JOIN、IS NULL、NOT EXISTS效率对比 语句一:select count(*) from A where A.a not in (select a from B) 语句二:select count(*) from A left join B on A.a = B.a where B.a is null 语句三:select ...

    MySQL查询条件中放置on和where的区别分析

    解决办法呢,就是将条件放到 LEFT JOIN 中。 MySQL 语句执行顺序 首先先说明一个概念,MySQL 语句执行的顺序,并不是按照 SQL 语句的顺序。下面是示例 SQL SELECT DISTINCT < select_list > FROM < left> ...

    mysql查询优化的若干

    mysql_查询语句优化.MySQL怎样优化LEFT JOIN ...3、所有LEFT JOIN条件被移到WHERE子句中。 4、进行所有标准的联结优化,除了一个表总是在所有它依赖的表之后被读取。如果有一个循环依赖,MySQL将发出一个错误。

    MySQL IF、 Bewteen、 AS、 Date_Format、Left join on等关键字实例

    我们在写SQL时候,往往会需要格式化或多表联合查询,现在来一个实例看看这个问题 SELECT t.id, t.topic_...LEFT JOIN student_commit_history sch on t.id = sch.topic_id where sch.student_id =41 AND sch.create_t

    MySQL中join语句的基本使用教程及其字段对性能的影响

    JOIN 通常与 ON 关键字搭配使用,基本语法如下: … FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona table1 通常称为左表,table2 称为右表。ON 关键字用于设定匹配条件,用于限定在结果集合中想要哪些行...

    MySQL查询把多列返回结果集拼装成一个字段

    mysql中有种可以通过join相关操作进行表与表之间的方式查询不同结果集,但是在一对多的情况下,关键查询的结果是多条的.例如:班级和学习的关系,我想很直观的看到班级和学生的情况,列表显示出班级的信息和班级的男生...

    mysql查询必练50题

    LEFT JOIN SC b ON b.cid=01 AND a.sid=b.sid LEFT JOIN SC c ON c.cid=02 AND a.sid=c.sid WHERE b.score>c.score; -- 2、查询平均成绩大于60分的同学的学号和平均成绩; SELECT sid 学号, AVG(score) 平均成绩...

    详解Mysql多表联合查询效率分析及优化

     由于其返回的结果为被连接的两个数据表的乘积,因此当有WHERE, ON或USING条件的时候一般不建议使用,因为当数据表项目太多的时候,会非常慢。一般使用LEFT [OUTER] JOIN或者RIGHT [OUTER] JOIN  2. 

    MySql 5.1 参考手册.chm

    7.2.9. MySQL如何优化LEFT JOIN和RIGHT JOIN 7.2.10. MySQL如何优化嵌套Join 7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. MySQL如何优化LIMIT 7.2.15. ...

    MYSQL

    10.5.2 SELECT 查询的速度 10.5.3 MySQL 怎样优化WHERE子句 10.5.4 MySQL 怎样优化LEFT JOIN 10.5.5 MySQL 怎样优化LIMIT 10.5.6 INSERT查询的速度 10.5.7 UPDATE查询的速度 10.5.8 ...

    MySQL中基本的多表连接查询教程

     由于其返回的结果为被连接的两个数据表的乘积,因此当有WHERE, ON或USING条件的时候一般不建议使用,因为当数据表项目太多的时候,会非常慢。一般使用LEFT [OUTER] JOIN或者RIGHT [OUTER] JOIN  2. 内连接INNER ...

    MySQL数据库:USING子句.pptx

    表名1 LEFT| RIGHT JOIN 表名2 USING (列名) [WHERE 条件表达式] ; 【例】 查找Members表中所有订购过图书的会员的姓名。 SELECT Distinct 姓名 FROM Members JOIN Sell USING (用户号); 与下列语句等价: SELECT ...

    MySQL 5.1参考手册

    7.2.9. MySQL如何优化LEFT JOIN和RIGHT JOIN 7.2.10. MySQL如何优化嵌套Join 7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. MySQL如何优化LIMIT ...

Global site tag (gtag.js) - Google Analytics