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 ...
随机推荐
- Nginx(三)------nginx 反向代理
Nginx 服务器的反向代理服务是其最常用的重要功能,由反向代理服务也可以衍生出很多与此相关的 Nginx 服务器重要功能,比如后面会介绍的负载均衡.本篇博客我们会先介绍 Nginx 的反向代理,当然 ...
- Scrapy安装报错
python3 pip 安装Scrapy在win10 安装报错error: Microsoft Visual C++ 14.0 is required. Get it with "Micro ...
- Epemme
Goss wa lap tirre kamme da, Waess u'malarre zuzze nasa. Mat abbe price junirre nay, Ywe zay prolodde ...
- (PAT)L2-006 树的遍历 (二叉树构建)
题目链接:https://www.patest.cn/contests/gplt/L2-006 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格 ...
- Mac之日常操作
1.创建root用户使用最高权限 sudo passwd root 一般情况下,使用临时获取最高权限 sudo vim /etc/shells 2. apache操作 #启动Apache sudo a ...
- Hadoop(五)搭建Hadoop客户端与Java访问HDFS集群
阅读目录(Content) 一.Hadoop客户端配置 二.Java访问HDFS集群 2.1.HDFS的Java访问接口 2.2.Java访问HDFS主要编程步骤 2.3.使用FileSystem A ...
- 【ubuntu】Ubuntu 修改 Apache2 运行用户/用户组及修改方法
我们在安装apache后,有时在上传文件的时候,提示没有权限或者是不可写,我们都会去查文件夹的权限.通过ls -l /var/www/html/website可以很直观的看出我们文件和文件夹的权限,d ...
- windows环境下memcache相关配置及PHP加载相应模块(php7版本)
原文:https://blog.csdn.net/zhangatle/article/details/77504094 亲测安装成功 php 7.0 nts 86 第一步,首先下载windows版本的 ...
- Vuex、axios、跨域请求处理和import/export的注意问题
一.Vuex 1.介绍 vuex是一个专门为Vue.js设计的集中式状态管理架构. 对于状态,我们把它理解为在data中需要共享给其他组件使用的部分数据. Vuex和单纯的全局对象有以下不同: 1. ...
- Codeforces484 A. Bits
题目类型:位运算 传送门:>Here< 题意:求区间\([L,R]\)内二进制中1的个数最多的那个数,如果有多解输出最小解 解题思路 想了15min就一遍A了 我们可以贪心地在\(L\)的 ...