left join on和where
left join on:
向左关联某个表记录,意思是以左边的表记录为基准,通过关联条件会从左表返回所有的行,即使在右表中没有匹配的行。
举个例子:
select * from A left join B on A.id=B.id
说明:从A表左外联接B表,基于A.id=B.id
和where的区别:
1.on条件是生成临时表的条件,不管on中的条件是否成真,都会返回左边表中的记录(为null显示)。
2.where条件是建立在临时表生成好基础上再对临时表过滤的条件,已经没有left join的含义(必须返回左边表的记录),条件不符合就全部过滤。
假设两张表,
表1-tab1: 表2-tab2:
id name name class
1 10 10 AA
2 20 20 BB
3 30 20 CC
SQL语句:
1.select * from tab1 left join tab2 on (tab1.name=tab2.name) where tab2.class='AA'
2.select * from tab1 left join tab2 on (tab1.name=tab2.name and tab2.class='AA')
SQL1结果:
1.on的条件为tab1.name=tab2.name,以tab1表为基准,返回所有的值
tab1.id tab1.name tab2.name tab2.class
1 10 10 AA
2 20 20 BB
2 20 20 CC
3 30 NULL NULL
2.WHERE后的条件tab2.class='AA',查询结果为
tab1.id tab1.name tab2.name tab2.class
1 10 10 AA
SQL2结果:
on的条件为tab1.name=tab2.name and tab2.class='AA',以tab1表为基准返回所有的值
tab1.id tab1.name tab2.name tab2.class
1 10 10 AA
2 20 NULL NULL
3 30 NULL NULL
比较以下sql区别:
查询有课程成绩小于60分的同学的学号、姓名,


--以student_id分组:
SELECT student_id,sname FROM test_score s,test_student t WHERE s.num<'60' AND s.student_id=t.sid GROUP BY student_id;
--按student_id去重:
SELECT DISTINCT student_id,sname FROM test_score s,test_student t WHERE s.num<'60' AND s.student_id=t.sid;
--以left join左连接
SELECT DISTINCT student_id,sname FROM test_student t LEFT JOIN test_score s ON s.student_id=t.sid WHERE s.num<'60';
left join on和where的更多相关文章
- SQL Server-聚焦IN VS EXISTS VS JOIN性能分析(十九)
前言 本节我们开始讲讲这一系列性能比较的终极篇IN VS EXISTS VS JOIN的性能分析,前面系列有人一直在说场景不够,这里我们结合查询索引列.非索引列.查询小表.查询大表来综合分析,简短的内 ...
- SQL Server-聚焦NOT IN VS NOT EXISTS VS LEFT JOIN...IS NULL性能分析(十八)
前言 本节我们来综合比较NOT IN VS NOT EXISTS VS LEFT JOIN...IS NULL的性能,简短的内容,深入的理解,Always to review the basics. ...
- Nested Loops join时显示no join predicate原因分析以及解决办法
本文出处:http://www.cnblogs.com/wy123/p/6238844.html 最近遇到一个存储过程在某些特殊的情况下,效率极其低效, 至于底下到什么程度我现在都没有一个确切的数据, ...
- c# Enumerable中Aggregate和Join的使用
参考页面: http://www.yuanjiaocheng.net/ASPNET-CORE/asp.net-core-environment.html http://www.yuanjiaochen ...
- 超详细mysql left join,right join,inner join用法分析
下面是例子分析表A记录如下: aID aNum 1 a20050111 2 a20050112 3 a20050113 4 ...
- join Linq
List<Publisher> Publishers = new List<Publisher>(); Publisher publish1 = new Publisher() ...
- mysql join 和left join 对于索引的问题
今天遇到一个left join优化的问题,搞了一下午,中间查了不少资料,对MySQL的查询计划还有查询优化有了更进一步的了解,做一个简单的记录: select c.* from hotel_info_ ...
- BCL中String.Join的实现
在开发中,有时候会遇到需要把一个List对象中的某个字段用一个分隔符拼成一个字符串的情况.比如在SQL语句的in条件中,我们通常需要把List<int>这样的对象转换为“1,2,3”这样的 ...
- [数据库基础]——图解JOIN
阅读导航 一.概要 二.JOIN分类 三.JOIN分类详解 一.概要 JOIN对于接触过数据库的人,这个词都不陌生,而且很多人很清楚各种JOIN,还有很多人对这个理解也不是很透彻,这次就说说JOIN操 ...
- Spark join 源码跟读记录
PairRDDFunctions类提供了以下两个join接口,只提供一个参数,不指定分区函数时默认使用HashPartitioner;提供numPartitions参数时,其内部的分区函数是HashP ...
随机推荐
- js字符串转时间
function StrToDateTime(value) { if (value) { return (new Date(Date.parse(value.replace(/-/g, "/ ...
- Java实现动态修改Jar包内文件内容
import java.io.*; import java.util.Enumeration; import java.util.LinkedList; import java.util.List; ...
- 家庭记账本小程序之增(java web基础版三)
实现新增消费账单 1.main_left.jsp中该部分,调用add.jsp 2. add.jsp,提交到Servlet的add方法 <%@ page language="java&q ...
- 动态生成table 列
table.render({ elem: '#test-table-comelist' ,url: layui.setter.base + 'list/comelist' ,cols: [[]] ,d ...
- ORM之自关联、add、set方法、聚合函数、F、Q查询和事务
一.外键自关联(一对多) 1.建表 # 评论表 class Comment(models.Model): id = models.AutoField(primary_key=True) content ...
- vue 拖拽移动(类似于iPhone虚拟home )
vue 移动端 PC 兼容 元素 拖拽移动 效果演示 事件知识点 移动端 PC端 注释 touchstart mousedown 鼠标/手指按下事件 touchmove mousemove 鼠标/手 ...
- linux下find命令的使用和总结
背景:find命令十分的好用,特别是在查找文件的时候,这个时候需要和文件通配符一起使用. 1 前言 我们为什么要学会使用find命令? 每一种操作系统都有成千上万的文件组成,对于linux这样“一切皆 ...
- 洛谷 P2257 【YY的GCD】
这道题还是和上一道[ZAP]有那么一点点的相似哈 题目大意 给定N, M,求1<=x<=N, 1<=y<=M且\(gcd(x, y)\)为质数的(x, y)有多少对 如果对莫比 ...
- 20175221 2018-2019-2 《Java程序设计》第一周学习总结
20175221 2018-2019-2 <Java程序设计>第一周学习总结 教材学习内容总结 本周通过观看书本配套视频,学到了如解释器,编译器等一些简单概念. 还懂得了java的一些简单 ...
- usb输入子系统写程序(三)
目录 usb输入子系统写程序 小结 内核修改 怎么写代码 类型匹配 probe disconnect 程序设计 1th匹配probe 2th 获取usb数据 3th 输入子系统上报按键 title: ...