• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > SQL语句中on和where的用法区别讲解

SQL语句中on和where的用法区别讲解

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了where,区别等相关知识,希望本文的分享对您有所帮助
这篇博客参考了网上的,具体哪一篇是原稿,不知道,特此声明。

数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。

下面以使用left jion时,on和where条件的区别如下:

1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

假设有两张表:

表1:tab2

id

size

1

10

2

20

3

30

表2:tab2

size

name

10

AAA

20

BBB

20

CCC


两条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’)

第一条SQL的过程:

1、中间表on条件: tab1.size = tab2.sizetab1.idtab1.sizetab2.sizetab2.name11010AAA22020BBB22020CCC330(null)(null)||2、再对中间表过滤where 条件(此时不为真的行会被过滤掉):tab2.name=’AAA’tab1.idtab1.sizetab2.sizetab2.name11010AAA

第二条SQL的过程:

1、中间表on条件: tab1.size = tab2.size and tab2.name=’AAA’(条件不为真也会返回左表中的记录)tab1.idtab1.sizetab2.sizetab2.name11010AAA220(null)(null)330(null)(null)

其实以上结果的关键原因就是left join,right join,full join的特殊性,不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。 而inner jion没这个特殊性,则条件放在on中和where中,返回的结果集是相同的

总结:

总的来说,就是where语句会过滤掉含NULL的行数(条件为假的行数)。所以在FULL JOIN语句中where语句和on语句的结果差别最大;在JOIN/INNER JOIN 语句中没有差别;在LEFT JOIN 和 RIGHT JOIN中差别大小取决于表达式和表中的数据。

以上就是SQL语句中on和where的用法区别讲解的详细内容,更多请关注微课江湖其它相关文章!

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 深入理解where 1=1的用处
  • MySql中having字句对组记录进行筛选使用说明
  • MySQL 联合索引与Where子句的优化 提高数据库运行效率
  • UCenter info: MySQL Query Error SQL:SELECT value FROM [Table]vars WHERE noteexists
  • MYSQL where 1=1判定中的作用说明
  • MYSQL WHERE语句优化
  • 关于mysql max 与 where 间的执行问题小结
  • SQL语句中on和where的用法区别讲解
  • SQL 语句中In 和 Where 的不同点
  • MySQL中如何用WHERE子句联结多个表

相关文章

  • 2018-12-05mysql odbc字符集设置(中文显示乱码)
  • 2018-12-05Mysql-索引总结
  • 2018-12-05Spark SQL实现日志离线批处理
  • 2018-12-05mysql 从一个表中查数据并插入另一个表实现方法
  • 2017-05-11开源MySQL高效数据仓库解决方案:Infobright详细介绍
  • 2017-05-11如何选择合适的MySQL存储引擎
  • 2018-12-05SQL 时间类型的模糊查询
  • 2017-05-11Mysql中的Datetime和Timestamp比较
  • 2018-12-05PostgreSQL源码分析: 动态Hash
  • 2018-12-05关于MySQL安装包如何使用的详细介绍

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • 如何修改数据库root密码?修改数据库root密码的步骤
    • CAP理论十二年回顾:规则变了
    • Redis学习笔记-List数据类型
    • mysql和oracle的group by的rollup和cube
    • 写mongodb日志
    • sql2005 远程连接问题解决方法
    • mongodb空间查询之查询单位
    • MySQL 性能优化,让数据库跑的更快
    • 简单实用SQL脚本Part SQLServer 2005 链接服务器
    • sql 批量修改数据库表

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有