京东面试官:SQL 语句中 left join 后用 on 还是 where,区别大了!
来源:blog.csdn.net/wqc19920906/article/details/79785424
前天写SQL时本想通过 A left B join on and 后面的条件来使查出的两条记录变成一条,奈何发现还是有两条。
后来发现 join on and 不会过滤结果记录条数,只会根据and后的条件是否显示 B表的记录,A表的记录一定会显示。
不管and 后面的是A.id=1还是B.id=1,都显示出A表中所有的记录,并关联显示B中对应A表中id为1的记录或者B表中id为1的记录。
运行sql :
select * from student s left join class c on s.classId=c.id order by s.id
运行sql :
select * from student s left join class c on s.classId=c.id and s.name="张三" order by s.id
运行sql :
select * from student s left join class c on s.classId=c.id and c.name="三年级三班" order by s.id
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。
在使用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 |
30 | 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’)
其实以上结果的关键原因就是left join,right join,full join的特殊性,不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。而inner jion没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。
京东面试官:SQL 语句中 left join 后用 on 还是 where,区别大了!相关推荐
- SQL语句中 left join 后用 on 还是 where,区别大了!
点击关注公众号,Java干货及时送达 来源:blog.csdn.net/wqc19920906/article/details/79785424 前天写SQL时本想通过 A left B join o ...
- SQL 语句中 left join 后用 on 还是 where,区别大了!
来源:blog.csdn.net/wqc19920906/article/details/79785424 前天写SQL时本想通过 A left B join on and 后面的条件来使查出的两条记 ...
- sql语句中left join和inner join中的on与where的区别分析
原文:sql语句中left join和inner join中的on与where的区别分析 关于SQL SERVER的表联接查询INNER JOIN .LEFT JOIN和RIGHT JOIN,经常会用 ...
- SQL语句中LEFT JOIN、JOIN、INNER JOIN、RIGHT JOIN的区别?
w3school的一套sql教程: http://www.w3school.com.cn/sql/index.asp left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录. ...
- SQL 语句中 where 条件后 写上1=1 是什么意思
这段代码应该是由程序(例如Java)中生成的,where条件中 1=1 之后的条件是通过 if 块动态变化的.例如: String sql="select * from table_name ...
- SQL语句中order_by_、group_by_、having的用法区别
order by 从英文里理解就是行的排序方式,默认的为升序. order by 后面必须列出排序的字段名,可以是多个字段名. group by 从英文里理解就是分组.必须有"聚合函数&qu ...
- SQL 语句中 where 条件后 写上1=1 是什么意思
前言 where 1=1是sql语句条件逻辑判断表达式,由于1=1成立,恒为真,该表达式1=1将始终返回"真".这种写法实际目的是为了获取逻辑值"True",其 ...
- ::在sql语句中是什么写法_不懂就问:SQL 语句中 where 条件后 写上1=1 是什么意思...
程序员在编程过程中,经常会在代码中使用到"where 1=1",这是为什么呢? SQL注入 初次看到这种写法的同学肯定很纳闷,加不加where 1=1,查询不都一样吗?例如: se ...
- SQL 语句中 where 条件后 写上 1=1 是什么意思!
这段代码应该是由程序(例如Java)中生成的,where条件中 1=1 之后的条件是通过 if 块动态变化的.例如: String sql="select * from table_name ...
- SQL语句中的join用法
SQL中join的各种用法 1.自然连接(natural join) 自然连接将表中具有相同名称的列自动进行匹配,自然连接不必指定任何同等连接条件也不能认为指定哪些列需要被匹配,自然连接得到的结果表中 ...
最新文章
- python 内置方法赋值_Python内置函数
- (Java)注解和反射
- wxWidgets:wxWindowCreateEvent类用法
- 4.2 SE38数据对象
- linux使用nc命令模拟客户端与服务器,测试连通性
- 使用webuploader组件实现大文件分片上传,断点续传
- window server2012服务器上如何安装nginx并启动
- Objective-C基础笔记(7)Foundation中的常用结构体
- 微信小程序测试二维码跳转链接
- 服务器维护以后多久刷潮汐护符,魔兽世界怀旧服潮汐护符怎么获得
- Java成神之路——技术栈
- linux移植1.3寸oled屏幕,芯片SH1106
- Flutter 自定义组件实战之Cupertino(iOS)风格的复选框
- php laravel 入门教程,Laravel 5 系列入门教程(一)【最适合中国人的 Laravel 教程】...
- 整车控制器软件功能检测工装
- 【游戏推荐】疯狂豹子王--OGEngine精品游戏推荐系列【三】
- 用于二维范德华异质结构表征的低温探针台
- 手机人才——未来互联网发展的核心
- 2020年的奋斗目标
- 小程序实现播放器功能 小程序播放器怎么实现
热门文章
- 如何用EasyRecovery找回删除的文档(附注册机下载地址)
- vscode调试typescript
- 自定义控件详解(七):drawText()
- 构建Python软件大厦系列
- VS2010 打包生成exe文件后 执行安装文件出现 TODO:lt;文件说明gt;已停止工作并已关闭...
- [转]Hspice和Spice Explorer许可文件设置时环境变量FLEXLM_BATCH = 1的一些现象
- C和指针---第十一章:动态内存分配
- could not find a getter for ... in class ... 异常的解决
- HDOJ 2037 今年暑假不AC
- 「leetcode」435. 无重叠区间【贪心算法】详细图解