left join加上where条件的困惑,(left join 无用 / 无效 )
发布日期:2022-02-02 02:58:15 浏览次数:2 分类:技术文章

本文共 1095 字,大约阅读时间需要 3 分钟。

left join的困惑:一旦加上where条件,则显示的结果等于inner join

将where 换成 and  

用where 是先连接然后再筛选   
用and 是先筛选再连接

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

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

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

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

       假设有两张表:

表1 tab1:

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中,返回的结果集是相同的。

转载地址:https://blog.csdn.net/u010368749/article/details/59482870 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Spring源码解析
下一篇:swagger ui和spring boot集成生成api文档

发表评论

最新留言

不错!
[***.249.68.14]2022年05月26日 03时22分25秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

最新文章

php urldecode 加号,php|urldecode urlencode 的加号问题 2021-08-20
java异常汇总,java exception java异常汇总(3) 2019-06-17 01:25:26
java 2个string 类型转换date 并比较大小,java String 和date 转换 以及时间的比较 2019-06-17 01:25:26
php与json,PHP与json 2019-06-17 01:25:25
php xhtml格式,XHTML怎么打开?XHTML的规范的内容是什么? 2019-06-17 01:25:25
php lumen和laravel,Lumen - 基于 Laravel 构建的最快的 PHP 微框架(Micro-Framework)。 | Laravel 中文网... 2019-06-17 01:25:24
spring django php,Biny——腾讯开源的超轻量级 PHP 框架 2019-06-17 01:25:24
php环境安装包redhot,搭建php环境 2019-06-17 01:25:23
php继承 重写方法吗,PHP类和对象类的继承及重写(方法重写) 2019-06-17 01:25:22
php 图片处理慢,php常用图片处理类 2019-06-17 01:25:22
php 将中文字符转英文字母_php 提取字符串的中文首字母,如何考虑到英文和数字的情况... 2019-06-17 01:25:21
java 拼音首字母 高效_如何实现一个高效的拼音匹配库?解决多音字,首字母匹配等问题... 2019-06-17 01:25:21
java外部类调用匿名内部类_Java匿名内部类访问外部变量,为何需被标志为final?... 2019-06-17 01:25:20
java访问hfs服务_HFS的JAVA API_MapReduce服务 MRS_开发指南(适用于2.x及之前)_HBase应用开发_更多信息_华为云... 2019-06-17 01:25:20
java9 stream_Java9 Stream API改进 2019-06-17 01:25:19
C语言与JAVA内存管理_认识C和内存管理 2019-06-17 01:25:19
JAVA直接使用talib库_量化笔记:金融指数处理库talib介绍与安装 2019-06-17 01:25:18
java线程一定是thread_Java-Thread 线程 2019-06-17 01:25:17
1 n的和在main函数调用java_启动一个没有 main 函数的 java 程序 2019-06-17 01:25:17
cpp lexer java_ANTLR: 文法分析利器 (Ⅱ) 2019-06-17 01:25:16