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

java join 源码_join on 和where 一起使用的细节相关推荐

  1. java join 源码_java并发:join源码分析

    join join join是Thread方法,它的作用是A线程中子线程B在运行之后调用了B.join(),A线程会阻塞直至B线程执行结束 join源码(只有继承Thread类才能使用) 基于open ...

  2. java join()源码_Java Thread的join() 之刨根问底

    0.Join() 线程的合并的含义就是 将几个并行线程的线程合并为一个单线程执行,应用场景是 当一个线程必须等待另一个线程执行完毕才能执行时,Thread类提供了join方法来完成这个功能,注意,它不 ...

  3. java并发:join源码分析

    join join join是Thread方法,它的作用是A线程中子线程B在运行之后调用了B.join(),A线程会阻塞直至B线程执行结束 join源码(只有继承Thread类才能使用) 基于open ...

  4. aqs java 简书,Java AQS源码解读

    1.先聊点别的 说实话,关于AQS的设计理念.实现.使用,我有打算写过一篇技术文章,但是在写完初稿后,发现掌握的还是模模糊糊的,模棱两可. 痛定思痛,脚踏实地重新再来一遍.这次以 Java 8源码为基 ...

  5. 侯捷译Practical Java(含源码)

    侯捷译Practical Java(含源码) [url=http://www.123xz.net/soft/49/297/308/2007/20070517105923.html][B]侯捷译Prac ...

  6. 确定有限状态机和非确定有限状态机详解 包含Java实现源码(Nondeterministic finite automata)

    本文将讲解确定有限自动状态机和非确定有限自动状态机的特点和区别.将结合图片例子重点讲解什么是非确定有限自动状态机.最后讲解如何将非确定状态机转换为确定的状态机.多图预警!! 有限自动状态机可以分为确定 ...

  7. java B2B2C 源码 多级分销springmvc mybatis多租户电子商城系统--配置中心服务化和高可用...

    在前两篇的介绍中,客户端都是直接调用配置中心的server端来获取配置文件信息.电子商务平台源码请加企鹅求求:一零三八七七四六二六. 这样就存在了一个问题,客户端和服务端的耦合性太高,如果server ...

  8. java B2B2C源码电子商务平台-基于Consul的分布式锁实现

    分布式锁实现 需要JAVA Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码:壹零叁八柒柒肆六二六 基于Consul的分布式锁主要利用Key/Value存储API中的ac ...

  9. java B2B2C 源码多租户电子商城系统-Spring Cloud组件详解

    我们从整体上来看一下Spring Cloud各个组件如何来配套使用: 需要JAVA Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码 一零三八七七四六二六 从上图可以看出 ...

最新文章

  1. SQL Server2005的XML数据类型之基础篇 (2)
  2. [TCP/IP] TCP第三次握手失败怎么办
  3. java读取安卓本地文件_Java Android 二进制文件读写
  4. 第二阶段冲刺-个人总结04
  5. 微机原理8086汇编语言上机——Masm环境搭建与常用汇编调试指令
  6. 7.3.Zeng_Cache(4) --- 后端
  7. Atitit dubbo使用总结 attilax总结 艾龙 总结 1. 概念 1 1.1. Dubbo提供的注册中心有如下几种类型可供选择: 2 1.1.1. Multicast注册中心 2 1.1
  8. paip. erlang语法C++语法对比attilax总结
  9. 下载 / 安装 Visual Studio - C语言零基础入门教程
  10. java性能调优寻找瓶颈常用的命令_Java性能调优:利用VisualVM进行性能分析
  11. PhpStorm设置格式化代码快捷键
  12. LFS详细搭建指南——适合初学者使用
  13. 解答腾讯会议的常见新手问题
  14. win7系统怎样搭建电影服务器,win7系统免费看电影的操作方法
  15. Quill富文本编辑器-图片上传-可编辑图片大小、排版
  16. 练习绕口令快速提高语言表达能力(收藏)
  17. 生产环境RedisCPU飙高怎么办
  18. 支持全球游戏加速 飞鱼星发烧级玩家路由G7上市
  19. 必学PHP类库/常用PHP类库大全
  20. 理解英飞凌MOSFET器件的数据手册

热门文章

  1. 【数据库学习笔记】——创建数据库连接对象connection
  2. 现代制造工程——第七章(轧制和锻造)
  3. swap关于指针的使用
  4. ole2高级编程技术 pdf_21天快速掌握Python语言,《21天学通Python》PDF版送给你去学...
  5. java wait源码_Java精通并发-透过openjdk源码分析wait与notify方法的本地实现
  6. c++ 数组的输入遇到特定字符停止输入_滑动窗口思维--挑战“无重复字符的最长子串”
  7. Lambda表达式——注重过程的编程思想
  8. java之hibernate之基于外键的一对一单向关联映射
  9. 2、基于wsgiref模块DIY一个web框架
  10. css3-6 表格如何设置样式和定位样式是什么