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的过程:

1、中间表
on条件:
tab1.size = tab2.size
tab1.id tab1.size tab2.size tab2.name
1 10 10 AAA
2 20 20 BBB
2 20 20 CCC
3 30 (null) (null)
   
2、再对中间表过滤
where 条件:
tab2.name=’AAA’
tab1.id tab1.size tab2.size tab2.name
1 10 10 AAA
   
第二条SQL的过程:

1、中间表
on条件:
tab1.size = tab2.size and tab2.name=’AAA’
(条件不为真也会返回左表中的记录)
tab1.id tab1.size tab2.size tab2.name
1 10 10 AAA
2 20 (null) (null)
3 30 (null) (null)

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

转载自:http://www.cnblogs.com/Jessy/p/3525419.html

join on 和where 一起使用的细节相关推荐

  1. mysql中的联结_MySQL的联结(Join)语法

    MySQL的联结(Join)语法 1.内联结.外联结.左联结.右联结的含义及区别: 在讲MySQL的Join语法前还是先回顾一下联结的语法,呵呵,其实连我自己都忘得差不多了,那就大家一起温习吧(如果内 ...

  2. python官网支持货到付款吗_官网购买的iPhone12pro还没发货?试着用Python快速入手...

    引言 ​iPhone12pro有望成为2020年末真香机,动辄3000元的溢价让不少消费者选择了等待官网调货.除了官方与电商线上平台,苹果还采用了线下预约制提货.但每天少的可怜的出货量,和不到一秒钟就 ...

  3. MySQL的left on 【zt】

    MySQL的left on [zt] (2008-11-03 17:27:30) 转载▼ 标签: it 分类: 学习笔记 MySQL多表连接查询Left Join,Right Join php开源嘛 ...

  4. java用不用stream_Java parallelStream不使用预期的线程数

    Java 8 parallelStream似乎使用的线程数多于系统属性java.util.concurrent.ForkJoinPool.common.parallelism指定的线程数.这些单元测试 ...

  5. python超市买苹果_官网购买的iPhone12pro还没发货?试着用Python快速入手

    引言 ​iPhone12pro有望成为2020年末真香机,动辄3000元的溢价让不少消费者选择了等待官网调货.除了官方与电商线上平台,苹果还采用了线下预约制提货.但每天少的可怜的出货量,和不到一秒钟就 ...

  6. JAVASCRIPT函数组合:有什么大不了的?

    一些人会说,函数组合是某种神圣的真理.一个你应该沉思时卑微地跪下并上香的神圣原则.但函数组合其实并不复杂.不过你是否意识到,你可能一直在使用它.那么为什么函数式编程程序员会对此烦恼呢?它有什么大不了的 ...

  7. 神奇的 SQL 之 联表细节 → MySQL JOIN 的执行过程

    问题背景 对于 MySQL 的 JOIN,不知道大家有没有去想过他的执行流程,亦或有没有怀疑过自己的理解(自信满满的自我认为!):如果大家不知道怎么检验,可以试着回答如下的问题 驱动表的选择 MySQ ...

  8. 神奇的 SQL 之 联表细节 → MySQL JOIN 的执行过程(二)

    开心一刻 一头母牛在吃草,突然一头公牛从远处狂奔而来说:"快跑啊!!楼主来了!" 母牛说:"楼主来了关我屁事啊?" 公牛急忙说:"楼主吹牛逼呀!&qu ...

  9. java join 源码_join on 和where 一起使用的细节

    left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录. right join :右连接,返回右表中所有的记录以及左表中连接字段相等的记录. inner join: 内连接,又 ...

最新文章

  1. 程序员笔记|如何编写优雅的Dockerfile
  2. Stackoverflow 高赞答案,为什么牛逼的程序员都不用 “ ! = null ' 做判空
  3. python if __name__ == '__main__'
  4. 【正一专栏】欧冠小组赛第四轮综述——有钱就能风清扬
  5. css3中clip属性
  6. Oracle执行计划中 并行和BUFFER SORT的问题
  7. html引用webpack插件,使用html-webpack-plugin,运行webpack,老是报错?
  8. java.lang.stackoverflowerror_java.lang.StackOverflowError——如何解决StackOverflowError错误
  9. (二十四)【2021 ACL】OntoED: Low-resource Event Detection with Ontology Embedding
  10. Python实例 61,62
  11. 2021年最新的Python大厂Python基础编程
  12. apirestful php自动测试,PHP实现自动识别Restful API的返回内容类型
  13. pyqt5 qstring在哪个库_PyQt模型/视图结构编程示例:QStringListModel的用法
  14. 【操作系统/OS笔记18】虚拟文件系统概念
  15. 个人用户可以向运营商申请短信接口吗?
  16. Ubuntu磁盘管理
  17. 【树莓派4B】如何烧录新的系统
  18. Flex Builder 3的破解
  19. 扫描普通二维码进入小程序
  20. 【华为诺亚方舟实验室】招聘:决策推理(强化学习)研究方向(实习、应届、社招、博后)均可以

热门文章

  1. PPTX新员工入场三级安全教育培训教材(附下载)
  2. indesign如何画弧线_Illustrator and Indesign中鲜为人知的超级技巧
  3. solrloud集群的配置,zoookeeper+IK分词器+solrcloud,以及集群连接,分片管理
  4. 发票查验系统中的发票台账具有哪些用处
  5. 在线播放器代码大全!
  6. Three.js 开发之加载外部GLTF模型和压缩(一)
  7. 树与图的深度优先遍历模版原理
  8. amd什么服务器芯片,AMD大杀器!AMD Naples服务器芯片如何占领市场
  9. 【数据库】sql实现两表关联更新
  10. Webpack详细打包步骤