mysql join之:on条件 和 where条件对比

#table a
drop table if exists tablea;
CREATE TABLE tablea (
`name` varchar(11) COMMENT '姓名',
`score` int(11) COMMENT '分数',
`salary` int(11) COMMENT '分数',
`create_time` datetime COMMENT '读书时间',
`class` int(4) COMMENT '班级',
`role` varchar(20) COMMENT '英雄类型',
`id` int(10) primary key not null auto_increment COMMENT '流水自增'
);
INSERT INTO  tablea VALUES ("周芷若",12,2000,'2018-1-2',1,'法师',null);
INSERT INTO  tablea VALUES ("赵敏",14,4000,'2018-2-2',1,'射手',null);
INSERT INTO  tablea VALUES ("李莫愁",19,3000,'2018-1-3',1,'坦克',null);
INSERT INTO  tablea VALUES ("梅超风",10,4000,'2018-1-4',1,'战士',null);
INSERT INTO  tablea VALUES ("殷素素",3,3000,'2018-1-6',1,'法师',null);
INSERT INTO  tablea VALUES ("黄杉女",6,1000,'2018-1-6',1,'法师',null);
INSERT INTO  tablea VALUES ("林诗音",3,1000,'2018-1-6',1,'法师',null);
INSERT INTO  tablea VALUES ("天山童姥",3,1000,'2018-2-6',1,'战士',null);
select * from tablea

#table  b
drop table if exists tableb;
CREATE TABLE tableb (
`name` varchar(11) COMMENT '姓名',
`score` int(11) COMMENT '分数',
`salary` int(11) COMMENT '分数',
`create_time` datetime COMMENT '读书时间',
`class` int(4) COMMENT '班级',
`boy_friend` varchar(20) COMMENT '英雄类型',
`id` int(10) primary key not null auto_increment COMMENT '流水自增'
);
INSERT INTO  tableb VALUES ("周芷若",12,2000,'2018-1-2',1,'张无忌',null);
INSERT INTO  tableb VALUES ("赵敏",14,4000,'2018-2-2',1,'宋青书',null);
INSERT INTO  tableb VALUES ("李莫愁",19,3000,'2018-1-3',1,'成昆',null);
INSERT INTO  tableb VALUES ("梅超风",10,4000,'2018-1-4',1,'金毛狮王',null);
INSERT INTO  tableb VALUES ("殷素素",3,3000,'2018-1-6',1,'青翼蝠王',null);
INSERT INTO  tableb VALUES ("黄杉女",6,1000,'2018-1-6',1,'阳顶天',null);
INSERT INTO  tableb VALUES ("黄杉女",12,1000,'2018-1-6',1,'逍遥子',null);
select * from tableb

#测试证明:a left join b where是对结果join后的行数进行筛选
select a.*,b.boy_friend
from tablea a
left join  tableb b on a.name=b.name
where b.boy_friend is not null and


#测试证明:a left join b   on后面b的条件是先筛选b然后跟a join不符合条件的数据不join
select a.*,b.boy_friend
from tablea a
left join  tableb b on a.name=b.name and b.score>10


#测试证明:a left join b  on后面a的条件是先筛选a然后跟b join重点:不符合条件的之依然保留行
#说白了 on后面的条件只负责匹配 不 匹配,对主表的行数不影响,where 才是最后的筛选
select a.*,b.boy_friend
from tablea a
left join  tableb b on a.name=b.name and a.score>10
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值