sql(join on 和where的执行顺序)
left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录。
right join :右连接,返回右表中所有的记录以及左表中连接字段相等的记录。
inner join: 内连接,又叫等值连接,只返回两个表中连接字段相等的行。
full join:外连接,返回两个表中的行:left join + right join。
cross join:结果是笛卡尔积,就是第一个表的行数乘以第二个表的行数。
关键字: on
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。
在使用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的过程:
|
第二条SQL的过程:
|
其实以上结果的关键原因就是left join,right join,full join的特殊性,不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。 而inner jion没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。
sql(join on 和where的执行顺序)相关推荐
- sql(join on 和where的执行顺序
left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录. right join :右连接,返回右表中所有的记录以及左表中连接字段相等的记录. inner join: 内连接,又 ...
- SQL语句中各个部分的执行顺序(转)
原文链接:http://www.tuicool.com/articles/fERNv2 写在前面的话:有时不理解SQL语句各个部分执行顺序,导致理解上出现偏差,或者是书写SQL语句时随心所欲,所以有必 ...
- 执行sql语句_SQL查询语句的执行顺序解析
SQL语句执行顺序 结合上图,整理出如下伪SQL查询语句. 从这个顺序中我们可以发现,所有的查询语句都是从 FROM 开始执行的.在实际执行过程中,每个步骤都会为下一个步骤生成一个虚拟表,这个虚拟表将 ...
- mysql join 循环_关于mysql联表的内嵌循环操作nested loop join中on和where执行顺序问题...
mysql的理论依据没找到,个人理解是先执行where的过滤条件,先关联再过滤明显做的是无用功. oracle中倒是能在执行计划中看到,先执行的是过滤条件(下面代码中最后一行). explain pl ...
- mysql五补充部分:SQL逻辑查询语句执行顺序
mysql五补充部分:SQL逻辑查询语句执行顺序一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SE ...
- MySQL 基础 ———— SQL语句的执行顺序与 LIMIT 子句
引言 到目前为止,已经总结了常见的SQL子句,包括 SELECT .FROM.JOIN ... ON.WHERE.GROUP BY.HAVING.ORDER BY. 虽然SQL的书写顺序是固定的,但在 ...
- join语句的执行顺序
前言 通常我们写的一个完整的SQL语句都可以拆分成多个子句,子句的执行过程通常会产生虚拟表.什么是虚拟表呢?虚拟表,英文为virtual table,简称为vt.顾名思义,就是实际上并不存在,至少在物 ...
- select语句的语法顺序和执行顺序
目录 1.语法顺序 2.执行顺序 3.优化方法 1.join 方面 2.where 方面 1.语法顺序 select语句的语法格式如下. select 字段列表 from 数据源 [ where条件表 ...
- 关于线程的执行顺序,可能真的只是你以为的你以为
摘要:今天,我们就一起来看看线程到底是如何执行的,它的顺序又是怎样的? 本文分享自华为云社区<线程的执行顺序与你想的不一样!!>,作者:冰 河 . 一.线程的执行顺序是不确定的 调用Thr ...
最新文章
- Hadoop实战(6)_搭建Apache Hadoop的Eclipse开发环境
- Annovar注释的突变文件转MAF对象
- java session 作用范围_ssm项目session使用及其作用域问题
- 【工具推荐】Hadoop集群监控工具 HTools
- 火焰效果材质实现_利用噪音图制作一个纸张燃烧的效果
- Swift - 警告提示框(UIAlertController)的用法
- Flask Jinja2 模板中的变量和过滤器
- 编写一个可动态注入Spring 容器的工具类
- 启动报错 classnofoundexception org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
- spring,springmvc,mybatis整合ssm框架出现ORA-02289:序列不存在问题
- Python 数据处理与分析(五) 设计一个高回报的投资组合(投资回报和风险分析)任务 4:马科维茨的均值-方差组合模型
- Windows编程 DirectInput 鼠标和键盘的输入
- 模拟退火算法+大规模邻域算法求解大规模固定节点的路径规划问题matlab代码
- ThreeJs 学习之旅(七)
- HTML实现怀旧小游戏,超级玛丽、飞机大战…等十余款【完整源码分享】
- 电感、电容、电阻基本元器件参数选型
- linux mtd 用法,Linux mtd与ubi关系详解,ubi使用命令总结
- 安卓六大布局之 线性布局(LinearLayout)
- 在cordova中处理原生键盘相关问题的总结,mark供参考
- 2015链家网面试记录
热门文章
- vue element-ui级联选择器选中后下拉框自动收起
- 百度地图gif图标_华为手机误删照片怎么找回?手机怎么快速制作GIF动图
- 如何禁用计算机的服务,如何彻底禁用电脑中的迅雷服务XLservicePlatform
- centos8 挂载ntfs_CentOS 8 挂载NTFS系统磁盘方案
- RANSAC算法在图像拼接上的应用的实现
- Atitti 大话存储读后感 attilax总结
- Discuz! 防御CC攻击的设置办法
- 67-Flutter中高德地图插件的使用
- 6、Flutter Error waiting for a debug connection: ProcessException: adb did not report f(转)
- eclipse 安装 lombok插件