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 ...
随机推荐
- Bubble Babble Binary Data Encoding的简介以及bubblepy的安装使用方法
Bubble Babble Binary Data Encoding是由Antti Huima创建的一种编码方法,可以把二进制信息表示为由交替的元音和辅音组成的伪词(pseudo-words),主要用 ...
- python 枚举Enum
常量是任何一门语言中都会使用的一种变量类型 如 要表示星期常量,我们可能会直接定义一组变量 JAN = 1 TWO = 2 ... 然后在返回给前端的时候,我们返回的就会是1,2,...这种魔法数字, ...
- Java 向MySql 插入日期和时间正确的姿势
Mysql和Java之间时间对应关系表: date java.sql.Date Datetime java.sql.Timestamp Timestamp ...
- linux安装tomcat部署web项目
我用的是如下图的两个软件,连接linux服务器. 其中WinSCp是传输文件用的,SecureCRT是用来输入命令的. 1.复制tomcat到指定目录(可复制到你想要的目录下),命令如下: cp /路 ...
- centos7只rsync+inotify
环境: 操作系统:centos7.4 192.168.1.238 客户端 192.168.1.239 服务端 环境准备: 1.安装以下安装包lrzsz是xshell上传下载的安装包,可以忽略. yum ...
- redis--主从同步,故障切换,集群搭建
一 . redis主从同步 准备三个配置文件,实现一主两从的redis数据库结构(这三个配置文件仅仅端口不一样) # redis-6379.conf 文件, 写入下面数据: port 6379 dae ...
- 内存管理中提到的hot cold page
所谓冷热是针对处理器cache来说的,冷就是页不大可能在cache中,热就是有很大几率在cache中. cold page和hot page的概念可以参考LWN的一片文章http://lwn.net/ ...
- JS-JAVASCRIPT的eval()方法
Lodop的传统模版是JS语句,如果储存的这种JS模版,可用javascript的eval()方法获取,该方法属于JS的范畴,并不是lodop语句,由于这个方法很多程序员可能不常用,对于这个JS方法不 ...
- Linux 学习 (三) 文件搜索命令
Linux达人养成计划 I 学习笔记 locate 文件名 搜索速度比较快 只能根据文件名搜索 搜索的是保存在 /var/lib/mlocate 的数据库(每天更新一次) 新建文件需要执行 updat ...
- Spring MVC 使用介绍(六)—— 注解式控制器(二):请求映射与参数绑定
一.概述 注解式控制器支持: 请求的映射和限定 参数的自动绑定 参数的注解绑定 二.请求的映射和限定 http请求信息包含六部分信息: ①请求方法: ②URL: ③协议及版本: ④请求头信息(包括Co ...