MYSQL 表左连接 ON AND 和ON WHERE 的区别
首先是针对左右连接,这里与inner join区分
在使用left join时,on and 和on where会有区别
1. on的条件是在连接生成临时表时使用的条件,以左表为基准 ,不管on中的条件真否,都会返回左表中的记录
2.where条件是在临时表生成好后,再对临时表过滤。此时 和left join有区别(返回左表全部记录),条件不为真就全部过滤掉,on后的条件来生成左右表关联的临时表,
where后的条件是生成临时表后对临时表过滤
on and是进行韦恩运算时 连接时就做的动作,where是全部连接完后,再根据条件过滤
CREATE TABLE `a` (`id` int(11) NOT NULL AUTO_INCREMENT,`sid` int(11) NOT NULL,`type` char(10) NOT NULL,PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `a` (`id`, `sid`, `type`) VALUES (1, 1, 'a'); INSERT INTO `a` (`id`, `sid`, `type`) VALUES (2, 1, 'b'); INSERT INTO `a` (`id`, `sid`, `type`) VALUES (3, 2, 'c'); INSERT INTO `a` (`id`, `sid`, `type`) VALUES (4, 3, 'd');CREATE TABLE `b` (`sid` int(11) NOT NULL,`remark` char(10) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `b` (`sid`, `remark`) VALUES (1, 'A'); INSERT INTO `b` (`sid`, `remark`) VALUES (2, 'B'); INSERT INTO `b` (`sid`, `remark`) VALUES (3, 'C'); INSERT INTO `b` (`sid`, `remark`) VALUES (4, 'D');
mysql> select * from a; +----+-----+------+ | id | sid | type | +----+-----+------+ | 1 | 1 | a | | 2 | 1 | b | | 3 | 2 | c | | 4 | 3 | d | +----+-----+------+ 4 rows in setmysql> select * from b; +-----+--------+ | sid | remark | +-----+--------+ | 1 | A | | 2 | B | | 3 | C | | 4 | D | +-----+--------+ 4 rows in set mysql> select * from a left join b on a.sid=b.sid; +----+-----+------+-----+--------+ | id | sid | type | sid | remark | +----+-----+------+-----+--------+ | 1 | 1 | a | 1 | A | | 2 | 1 | b | 1 | A | | 3 | 2 | c | 2 | B | | 4 | 3 | d | 3 | C | +----+-----+------+-----+--------+ mysql> select * from a left join b on a.sid=b.sid and a.sid=1; +----+-----+------+------+--------+ | id | sid | type | sid | remark | +----+-----+------+------+--------+ | 1 | 1 | a | 1 | A | | 2 | 1 | b | 1 | A | | 3 | 2 | c | NULL | NULL | | 4 | 3 | d | NULL | NULL | +----+-----+------+------+--------+ mysql> select * from a left join b on a.sid=b.sid where a.sid=1; +----+-----+------+-----+--------+ | id | sid | type | sid | remark | +----+-----+------+-----+--------+ | 1 | 1 | a | 1 | A | | 2 | 1 | b | 1 | A | +----+-----+------+-----+--------+
对于inner join
mysql> select * from a inner join b on a.sid=b.sid and a.sid=1; +----+-----+------+-----+--------+ | id | sid | type | sid | remark | +----+-----+------+-----+--------+ | 1 | 1 | a | 1 | A | | 2 | 1 | b | 1 | A | +----+-----+------+-----+--------+ mysql> select * from a inner join b on a.sid=b.sid where a.sid=1; +----+-----+------+-----+--------+ | id | sid | type | sid | remark | +----+-----+------+-----+--------+ | 1 | 1 | a | 1 | A | | 2 | 1 | b | 1 | A | +----+-----+------+-----+--------+
on and和on where结果一致
在使用inner join时,不管是对左表还是右表进行筛选,on and和on where都会对生成的临时表进行过滤
转载于:https://www.cnblogs.com/HKUI/p/8536969.html
MYSQL 表左连接 ON AND 和ON WHERE 的区别相关推荐
- lambda多表左连接
下面是mysql多表左连接,对应的lambda表达式写法,只为快速解决你的问题,详细的就不介绍了,只出结果,相信稍微有点基础的都能看懂.相关知识点,请自行百度 关键字:GroupJoin.Select ...
- 多个表左连接LEFT JOIN
多个表左连接(LEFT JOIN) ,在此记录一下. SELECT ts.shift_id, ts.line_id, ts.tour_guide_id, ts.hotel_id, shift_name ...
- mysql表全连接_关于mysql 实现表连接(左,右,内,全连接)
mysql 实现表连接(左,右,内,全连接) 查询中出现两个表的连接,下面通过实例来讲解一下各种连接查询的不同之处 表 a,和表b 如下图 a 表中 有 abcd b表中有 abcf 内连接:SELE ...
- mysql连续左连接(left join)和多层从属子表的查询
left join 在做报表查询的时候很常用. 学连接查询的时候,感觉很简单,并且印象不深刻. 实际使用过程中,才遇到了困难. 在网上查询的过程中,了解到 问题1:是否可以连续left join,可以 ...
- 【mysql】左连接 连表查询 去重
1.直接上代码 mysql: select DISTINCT a.* FROM user a LEFT JOIN user_login_log b ON a.id = b.userid where 1 ...
- mysql之左连接与右连接
左连接: select 列1,列2,列N from tableA left join tableB on tableA.列 = tableB.列(正常是一个外键列) [此处表连接成一张大表,完全当成一 ...
- mysql的左连接应用
如果两个表存在外键连接,可根据外键对两个表进行左连接,这时候外键相对应的其他列如果有NULL值,代表这两个表可能存在不同步的现象,可删除相应的值使2个表同步. 操作实例: mysql> desc ...
- MYSQL表的连接方式
mysql表连接方式可以分为 1.内连接 2.外连接 3.全连接 4.交叉连接 t1表 ...
- MySQL数据库左连接查询left join ... on
1. 左连接查询 以左表为主根据条件查询右表数据,如果根据条件查询右表数据不存在使用null值填充 左连接查询效果图: 左连接查询语法格式: select 字段 from 表1 left join 表 ...
- mysql自左连接最大值_mysql左连接自连接例子
连接就是将两个表按照某个公共字段来拼成一个大表. 左连接就是在做连接是以左边这个表为标准,来遍历右边的表. 1.引子 左连接,自连接 SELECT * FROM test_visit t1 LEFT ...
最新文章
- [原创]商城系统下单库存管控系列杂记(二)(并发安全和性能部分延伸)
- “数学不好,干啥都不行!”骨灰级程序员:其实你们都是瞎努力
- Codeforces Round #539 (Div. 1)
- check $m2_home environment variable and mvn script match
- docker快速入门01——docker安装与简单应用
- Oracle字符函数length substr concat实例
- 【论文】基于特定实体的文本情感分类总结(PART II)
- ArcGIS Pro 简明教程(3)数据编辑
- hdu 1159(DP+字符串最长公共序列)
- TensorFlow 学习(六) —— TensorFlow 与 numpy 的交互
- 【剑指 offer】(十三)—— 在 O(1) 时间删除链表结点
- MySQL导出表结构
- canvas 小球碰撞
- 阿里云企业邮箱标准版多域名绑定
- Android CameraX的基本使用
- ​最强全集,数据科学领域,那些你不能不知道的大咖们!
- 哈尔滨工业大学计算机科学与技术学院许博文,王轩-哈尔滨工业大学(深圳)计算机科学与技术学院...
- UNITY 2D入门基础教程 (一)
- 蓝牙开发工具市场现状-市场规模、市场份额、市场定位、产品类型以及发展规划
- C++实现二维快速傅里叶变换(FFT)