on 和where条件的放置详解

on 和where条件的放置详解

总结:

  1. 对于left join,不管on后面跟什么条件,左表的数据全部查出来,因此要想过滤需把条件放到where后面

  2. 对于inner join,满足on后面的条件表的数据才能查出,可以起到过滤作用。也可以把条件放到where后面。

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

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

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

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

假设有两张表:

id size
1 10
2 20
3 30
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’)


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

总结:

在多表联接查询时,on比where更早起作用。系统首先根据各个表之间的联接条件,把多个表合成一个临时表后,再由where进行过滤,然后再计算,计算完后再由having进行过滤。由此可见,要想过滤条件起到正确的作用,首先要明白这个条件应该在什么时候起作用,然后再决定放在那里

on 和where条件的放置详解相关推荐

  1. C++条件变量使用详解

    1. condition_variable介绍 在C++11中,我们可以使用条件变量(condition_variable)实现多个线程间的同步操作:当条件不满足时,相关线程被一直阻塞,直到某种条件出 ...

  2. python 数列筛选_对numpy中的数组条件筛选功能详解

    在程序设计中,时常会遇到数据的唯一化.相同.相异信息的提取等工作,在格式化的向量存储矩阵中南,numpy能够提供比较不错的快速处理功能. 1,唯一化的实现: In [63]: data = np.ar ...

  3. 如何使用计算机Excel公式if,Excel条件函数If详解及应用示例-excel技巧-电脑技巧收藏家...

    Excel条件函数If详解及应用示例 此招用来对某一条件执行的真假值进行判断,根据逻辑计算的真假值,返回不同结果.如果结果为真,则返回一个真,如果为假,则返回另一值,可谓左右逢源. 使用语法 IF(l ...

  4. SVM中拉格朗日乘子法、KKT条件、对偶问题详解

    SVM中拉格朗日乘子法.KKT条件.对偶问题详解 创作目的 1.SVM回顾 2.拉格朗日乘子法 3.KKT条件 4.对偶问题 强对偶性证明 总结 创作目的 我是机器学习初学者,目前正在上机器学习课,老 ...

  5. NLP --- 条件随机场CRF详解 重点 特征函数 转移矩阵

    20210517 http://www.tensorinfinity.com/paper_170.html 上一节我们介绍了CRF的背景,本节开始进入CRF的正式的定义,简单来说条件随机场就是定义在隐 ...

  6. C 条件变量使用详解

    condition_variable介绍 在C 11中,我们可以使用条件变量(condition_variable)实现多个线程间的同步操作:当条件不满足时,相关线程被一直阻塞,直到某种条件出现,这些 ...

  7. NLP --- 条件随机场CRF详解

    上一节我们介绍了CRF的背景,本节开始进入CRF的正式的定义,简单来说条件随机场就是定义在隐马尔科夫过程的无向图模型,外加可观测符号X,这个X是整个可观测向量.而我们前面学习的HMM算法,默认可观测符 ...

  8. 如何用计算机解kkt条件,【直观详解】拉格朗日乘法和KKT条件

    [阅读时间]8min - 10mun [内容简介]直观的解读了什么是拉格朗日乘子法,以及如何求解拉格朗日方程,并且给出几个直观的例子,针对不等式约束解读了KKT条件的必要条件和充分条件 What &a ...

  9. C++11条件变量使用详解

    condition_variable介绍 在C++11中,我们可以使用条件变量(condition_variable)实现多个线程间的同步操作:当条件不满足时,相关线程被一直阻塞,直到某种条件出现,这 ...

最新文章

  1. 【 MATLAB 】信号处理工具箱的信号产生函数之 square 函数简记
  2. boost::spirit::karma::detail::format_manip相关的测试程序
  3. HDU5874 - Friends and Enemies
  4. linux脚本课程设计通讯录,shell整理(35)====模拟用户登录的打印菜单脚本
  5. pthread_key_t和pthread_key_create()详解
  6. 分享40套非常精美的免费 PSD 网页图标素材
  7. steam怎么设公用计算机,steam如何设置家庭共享?steam设置家庭共享的方法
  8. 浅谈 光学字符识别(OCR识别)技术的前世今生...
  9. 适用于ARM开发板的Armbian Linux22.08发布
  10. 石榴——转自田维《花田半亩》
  11. Shell脚本语法小记
  12. -bash: /usr/local/miniconda2/bin/conda: /home/hadoop/miniconda2/bin/python: bad interpreter: No such
  13. 文件切割器 合并器
  14. 使用javascript和jquery获取类方法
  15. [NOIP模拟测试31]题解
  16. 科学-猜想与反驳(卡尔.波普尔)
  17. 红杉资本中国基金:创业者背后的创业者
  18. 通过Netty实现与硬件设备(充电桩)通讯的功能
  19. 中国电信北京电信机房对比篇
  20. Tomcat配置、创建Web项目

热门文章

  1. java简单通讯录的实现02person类_Java中Math类的简单介绍
  2. aspen和python一起使用_python-将$cond语句与$project一起使用并在PyMon...
  3. python输入123输出321_C语言编程:输出一个3位整数的逆序数,如输入123,输出321....
  4. java语言修饰符$_Java语言中的修饰符
  5. linux 内存 shared,Linux Shared Memory的查看与设置
  6. 图灵机原理三体中人计算机,有关计算机中人列计算机的问题
  7. php 图像 处理,PHP 处理图像步骤解析
  8. svn提交怎么全选_做外贸怎么精准开发国外客户?终于有答案了
  9. tableau实战系列(二十八)-以可视化的方式打开关联分析算法购物篮分析(Market Basket Analysis)
  10. Leetcode每日必刷题库第6题,如何实现字形变换?