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 ...
最新文章
- 浏览器缓存网站静态文件
- matlab数据可视化总结,机器学习----Matlab数据可视化总结(plot篇)
- 扩展存储过程在哪里_青浦区智能仓储哪里有,一件代发1.9元全国_1.9元发全国-上海东臻仓储服务...
- 计算机书籍-机器学习预测分析
- 地铁进出站是一站怎么办_高铁坐过站?别担心,这样能免费送回
- javascript 编码规范 用更合理的方式写 javascript
- Qt connect信号连接的几种写法
- jdk12源代码文件_在JDK 11中启动单文件源代码程序
- jupyter notebook python怎么设置_jupyter notebook 的工作空间设置操作
- 网管学习日记-三层交换机
- 数据加密以及国密基础知识
- Axure8.1破解码 注册码 授权码
- Linux下使用FDDB 测试MTCNN人脸检测模型生成 ROC 曲线
- phpstudy php56 zend,phpstudy集成环境
- 1147 Heaps (30分)
- 【贪玩巴斯】数字图像处理基础课堂笔记(四)——「Matlab中的代码优化问题、meshgrid函数和交互式I/O」 2021-10-11
- 苹果怎么安装未签名的app_Windows端超简单安装未签名ipa应用
- c#关于GMap离线地图加载的问题
- Oracle默认内置账户介绍,SYS与SYSTEM两个账户的区别
- mac连接iphone闪断解决办法