sql中on与where的区别
2016-05-04 18:54
357 查看
数据库在通过连接两张或者多张表返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户
在使用inner join(内连接)没有区别,但是 在使用left jion时,on和where条件的区别如下:
1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。(返回左表全部记录)。此时可能会出现与右表不匹配的记录即为空的记录。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。
假设有两张表:表1:tab1
表2:tab2
两条SQL:
1、select * form tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name=’AAA’
2、select * form tab1 left join tab2 on (tab1.size = tab2.size and tab2.name=’AAA’)
3、select * from tab1 left join tab2 on (tab1.size = tab2.size and tab2.name='AAA') where tab2.id is not null;
2和3是等价的。只是2中包含了不匹配的结果所有与1不等价。
数据库在通过连接两张或者多张表返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户
在使用inner join(内连接)没有区别,但是 在使用left jion时,on和where条件的区别如下:
1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。(返回左表全部记录)。此时可能会出现与右表不匹配的记录即为空的记录。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。
假设有两张表:表1:tab1
[align=center]id[/align] | [align=center]size[/align] |
[align=center]1[/align] | [align=center]10[/align] |
[align=center]2[/align] | [align=center]20[/align] |
[align=center]3[/align] | [align=center]30[/align] |
[align=center]size[/align] | [align=center]name[/align] [align=center][/align] |
[align=center]10[/align] | [align=center]AAA[/align] |
[align=center]20[/align] | [align=center]BBB[/align] |
[align=center]20[/align] | [align=center]CCC[/align] |
1、select * form tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name=’AAA’
2、select * form tab1 left join tab2 on (tab1.size = tab2.size and tab2.name=’AAA’)
3、select * from tab1 left join tab2 on (tab1.size = tab2.size and tab2.name='AAA') where tab2.id is not null;
2和3是等价的。只是2中包含了不匹配的结果所有与1不等价。
第一条SQL的过程:
|
第二条SQL的过程:
|
相关文章推荐
- Oracle 故障处理总结
- 搭建ORACLE高可用 高性能 高扩展的 MMM_APE 架构
- Activiti-Explorer中设计的流程图保存到哪里去了?
- plsql常用方法-转
- 数据库事务隔离级别-- 脏读、幻读、不可重复读(清晰解释)
- 企业级-Mysql双主互备高可用负载均衡架构(基于GTID主从复制模式)
- Mysql之建立主从同步
- Mysql之源码安装
- mongodb 客户端推荐
- mysql慢查询的配置及mysql进程查看
- SQLite + FMDB 性能笔记
- Oracle Crystal ball 11.1.* 注册码
- mysql数据库的读写分离
- SharePoint 2013 数据库中手动更新用户信息
- SQLite的优化总结
- 易生活(三)-web---商品排行和分页综合处理、sql占位符异常处理
- 第一章 数据库语言基础
- sql语句的预处理mysqli pdo绑定参数
- 防止SQL注入和XSS攻击Filter
- lepus3.7 天兔监控安装手册 CentOS6.5+mysql5.6