SQL语句中LEFT JOIN ON WHERE和LEFT JOIN ON AND的区别
先上代码:
declare @tb table (name varchar(10),sex int)
declare @tb2 table (name varchar(10),age int)
insert into @tb values('zhangsan',12)
insert into @tb values('lisi',18)
insert into @tb values('wangwu',14)
insert into @tb2 values('zhangsan',12)
insert into @tb2 values('zhangsan',20)
insert into @tb2 values('lisi',18)
insert into @tb2 values('wangwu',14)
--select * from @tb
--select * from @tb2
select A.name,A.sex,B.age from @tb A left join @tb2 B on A.name=B.name -- A.name='zhangsan'
select A.name,A.sex,B.age from @tb A left join @tb2 B on A.name=B.name AND A.name='zhangsan'
select A.name,A.sex,B.age from @tb A left join @tb2 B on A.name=B.name WHERE A.name='zhangsan'

在left join 和right join 或者 full join 操作时,会生成临时表, on 是生成临时表时起作用,临时表生成后就没作用了,where 是生成临时表后对临时表中的数据进行过滤操作
inner join 会返回左右两表到交集 (相当于 逗号连接的表连接 select * from TableA,TableB where TableA.id=TableB.id)
left join 会返回左表到全部数据,右表没有数据时用null填补
right join 会返回右表到全部数据,左表没有数据时用null填补
full join 会返回两表到并集 没有数据到一方用null 填补
结论:
1. left join, right join, full join 操作时,会生成一个临时表
2. on 是生成临时表的条件, 一个表中如果没有对应数据用null填补
3. where 是生成临时表后,对临时表中的数据进行过滤 返回过滤后到数据
相关链接:
https://www.cnblogs.com/reaptomorrow-flydream/p/8145610.html
https://www.cnblogs.com/GH0522/p/8579423.html
SQL语句中LEFT JOIN ON WHERE和LEFT JOIN ON AND的区别的更多相关文章
- SQL点滴2—重温sql语句中的join操作
原文:SQL点滴2-重温sql语句中的join操作 1.join语句 Sql join语句用来合并两个或多个表中的记录.ANSI标准SQL语句中有四种JOIN:INNER,OUTER,LEFTER,R ...
- SQL语句中 INNER JOIN的用法!
一.SQL语句中 INNER JOIN的用法? 1.INNER JOIN的作用? 可以在两个或者更多的表中获取结果,得出一张新表. [隐式内连接] 表一 car 购物车 表二 user 用户 发现 ...
- sql语句中left join、right join 以及inner join之间的使用与区别
sql语句中left join.right join 以及innerjoin之间的使用与区别 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join( ...
- 解析sql语句中left_join、inner_join中的on与where的区别
以下是对在sql语句中left_join.inner_join中的on与where的区别进行了详细的分析介绍,需要的朋友可以参考下 table a(id, type):id type ---- ...
- [转]sql语句中出现笛卡尔乘积 SQL查询入门篇
本篇文章中,主要说明SQL中的各种连接以及使用范围,以及更进一步的解释关系代数法和关系演算法对在同一条查询的不同思路. 多表连接简介 在关系数据库中,一个查询往往会涉及多个表,因为很少有数据库只有一个 ...
- sql语句中出现笛卡尔乘积
没有join条件导致笛卡尔乘积 学过线性代数的人都知道,笛卡尔乘积通俗的说,就是两个集合中的每一个成员,都与对方集合中的任意一个成员有关联.可以想象,在SQL查询中,如果对两张表join查询而没有jo ...
- (转)select 1 from ... sql语句中的1代表什么意思? .
select 1 from ..., sql语句中的1代表什么意思?查出来是个什么结果? select 1 from table;与select anycol(目的表集合中的任意一行 ...
- sql语句中出现笛卡尔乘积 SQL查询入门篇
2014-12-29 凡尘工作室 阅 34985 转 95 本篇文章中,主要说明SQL中的各种连接以及使用范围,以及更进一步的解释关系代数法和关系演算法对在同一条查询的不同思路. 多表连接简介 ...
- Oracle数据库中,在SQL语句中连接字符串的方法是哪个?(选择1项)
Oracle数据库中,在SQL语句中连接字符串的方法是哪个?(选择1项) A.cat B.concat C.join D.+ 解答:B
- sql语句中处理金额,把分换算成元
问题,sql语句中直接将金额/100返回的结果会有多个小数位. as value from account as acc left join conCategory as cate on acc.ca ...
随机推荐
- 从零开始:微信小程序新手入门宝典《一》
为了方便大家了解并入门微信小程序,我将一些可能会需要的知识,列在这里,让大家方便的从零开始学习: 一:微信小程序的特点 张小龙:张小龙全面阐述小程序,推荐通读此文: 小程序是一种不需要下载.安装即可使 ...
- Muse UI遇到的坑
写在前面:我只是一个前端小白,文章中的提到可能会有不足之处,仅提供一个参考.若有不完善的地方,欢迎各位大佬指出,希望对你有帮助! 故事背景是这样的,最近做一个Vue项目,使用到 Muse UI 组件库 ...
- 前端面试题整理——手写bind函数
var arr = [1,2,3,4,5] console.log(arr.slice(1,4)) console.log(arr) Function.prototype.bind1 = functi ...
- 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
问题描述:在使用python爬取斗鱼直播的数据时,使用str(读取到的字节,编码格式)进行解码时报错:'utf-8' codec can't decode byte 0x8b in position ...
- BlockingCollection实现生产者消费者
很简单的代码,看注释 class Program { private static ManualResetEvent _manualResetEvent = new ManualResetEvent( ...
- 「进阶篇」Vue Router 核心原理解析
前言 此篇为进阶篇,希望读者有 Vue.js,Vue Router 的使用经验,并对 Vue.js 核心原理有简单了解: 不会大篇幅手撕源码,会贴最核心的源码,对应的官方仓库源码地址会放到超上,可以配 ...
- int bool str
一. python的基本数据类型 1. int 整数 2. bool 布尔. 判断. if while 3. str 字符串 ,一般存放小量的数据 4. list 列表. 可以存放大量的数据 ...
- Linux---必备命令(2)
进程相关命令 # 查看系统所有的进程 ps -ef ps -ef | grep vim # 过滤出vim有关的进程 ps -ef | grep vim # 过滤出22端口的信息 ps -tunlp | ...
- linux权限与系统信息
权限 1.权限分为3个部分 可读(r) 可写(w) 可执行(x) 没有对应权限(-) 2.权限位 权限位主要分为三个部分,分别是属主.属组以及其他人 rwx : 属主 r-x : 属组 r-x : 其 ...
- 结合手工注入编写一个SQL盲注脚本——以SQLi-Labs less16为例
一.分析测试注入点 1.抓包,查看响应数据包 2.先随便输入一个账号密码,再测试万能密码 1") or 1=1 -- # 3.发现响应数据包的Content-Length字段值不同.错误状态 ...