无详细内容 无 create table `product` ( `pid` int(4) not null auto_increment, `pname` char(20) default null, `pcode` char(20) default null, primary key (`pid`)) engine=innodb default charset=utf8;create table `sales_detail` ( `aid` int(4) no
create table `product` ( `pid` int(4) not null auto_increment, `pname` char(20) default null, `pcode` char(20) default null, primary key (`pid`)) engine=innodb default charset=utf8;create table `sales_detail` ( `aid` int(4) not null auto_increment, `pcode` char(20) default null, `saletime` date default null, primary key (`aid`)) engine=innodb default charset=utf8;insert into `product` values ('1', 'a', 'ac');insert into `product` values ('2', 'b', 'de');insert into `product` values ('3', 'c', 'xxx');insert into `sales_detail` values ('1', 'ac', '2012-07-23');insert into `sales_detail` values ('2', 'de', '2012-07-16');insert into `sales_detail` values ('3', 'ac', '2012-07-05');insert into `sales_detail` values ('4', 'ac', '2012-07-05');left join里面带and的查询select p.pname,p.pcode,s.saletime from product as p left join sales_detail as s on (s.pcode=p.pcode) and s.saletime in ('2012-07-23','2012-07-05');查出来的结果:+-------+-------+------------+| pname | pcode | saletime |+-------+-------+------------+| a | ac | 2012-07-23 || a | ac | 2012-07-05 || a | ac | 2012-07-05 || b | de | null || c | xxx | null |+-------+-------+------------+直接where条件查询select p.pname,p.pcode,s.saletime from product as p left join sales_detail as s on (s.pcode=p.pcode) where s.saletime in ('2012-07-23','2012-07-05');查询出来的结果+-------+-------+------------+| pname | pcode | saletime |+-------+-------+------------+| a | ac | 2012-07-23 || a | ac | 2012-07-05 || a | ac | 2012-07-05 |+-------+-------+------------+结论:on中的条件关联,一表数据不满足条件时会显示空值。where则输出两表完全满足条件数据。我的理解:left join里面的条件:会以左表的基准数据,凡左表出现的数据均要出现,然后再进行join右表,只要关联上的就需要查出来,如果相应的字段没有值或不符合条件的话就置为null。select p.pname,p.pcode,s.saletime from product as p left join sales_detail as s on (s.pcode=p.pcode) ;光左连接的话显示的内容如下+-------+-------+------------+| pname | pcode | saletime |+-------+-------+------------+| a | ac | 2012-07-23 || a | ac | 2012-07-05 || a | ac | 2012-07-05 || b | de | 2012-07-16 | 这里面有值| c | xxx | null | 这里面没有值+-------+-------+------------+有值但是不符合条件的话就置为null。如果没有值肯定为null如果是where条件的话就肯定是要满足才行。应用场景:比如有个主表,那以主表为基准去显示数据可以考虑left join的方式处理