Hive中left join 中的where 和 on的区别
目录
一、知识点
二、测试验证
三、引申
一、知识点
left join中关于where和on条件的知识点:
- 多表left join 是会生成一张临时表。
- on后面: 一般是对left join 的右表进行条件过滤,会返回左表中的所有行,而右表中没有匹配上的数据直接补为null。
- on后面:如果存在对左表的筛选条件,无论条件真假,仍返回左表中的所有行,只是会影响右表的匹配值。即:on中针对左表的限制条件只会影响右表的匹配内容,并不影响返回的左表行数。
- where后面:是对两表连接后的数据进行筛选,一般是针对左表的筛选条件。
例如下面的sql:关联表(右表)的筛选条件如果放置在on后面,则下面sql的执行顺序是:B先按照条件进行过滤,再与A表关联;
#主表:A; 关联表:B 关联条件:A.id = B.id 筛选条件:B.id >1
A left join B on A.id = B.id and B.id >1;
筛选条件如果放置在where后面,则下面sql的执行顺序是:A和B先关联,基于生成的临时表再进行where条件过滤。
#主表:A; 关联表:B 关联条件:A.id = B.id 过滤条件
A left join B on A.id = B.id where A.id <> 1
二、测试验证
创建t1 ,t2 两张表
create table if not exists test1( id int comment '用户id',name string comment '用户姓名');insert overwrite table test1
values (1,'a1'),(2,'a2'),(3,'a3'),(4,'a4');create table if not exists test2( id int comment '用户id',province string comment '用户所在省份');insert overwrite table test1
values (1,'hainan'),(2,'beijing'),(5,'sichuan'),(6,'chongqing');
测试1:返回左表所有行,右表符合on条件可匹配上,不满足条件的直接补null
selecttest1.id,test1.name,test2.id,test2.province
from test1
left join test2on test1.id = test2.id;
测试2:on后面增加对右表的限制条件;结论:左表记录全部返回,右表筛选条件生效
selecttest1.id,test1.name,test2.id,test2.province
from test1
left join test2on test1.id = test2.id and test2.province = 'beijing';
测试3:where后面增加对右表的限制条件:where test2.province = 'beijing'; 结论:where后面是对最后的临时表进行记录筛选,行数可能会减少
selecttest1.id,test1.name,test2.id,test2.province
from test1
left join test2on test1.id = test2.id where test2.province = 'beijing';
测试4:on中增加对左表的限制条件,不影响返回的行数,只影响右表的匹配内容。
selecttest1.id,test1.name,test2.id,test2.province
from test1
left join test2on test1.id = test2.id and test1.name = 'a1';
测试5:where后面增加对左表的限制条件:where test1.name ='a4' 结论:where条件是在最后临时表的基础上进行筛选,返回满足条件的行
selecttest1.id,test1.name,test2.id,test2.province
from test1
left join test2on test1.id = test2.idwhere test1.name = 'a4';
三、引申
由上述的where和on之间的区别,引申出来的面试题: t1表和t2表的字段如图,计算以下两个sql的值。
--1.输出结果
select t1.id,t2.id
from t1
left join t2 on t1.id = t2.id and t2.id <>2;--2.输出结果
select t1.id,t2.id
from t1
left join t2 on t1.id = t2.id
where t2.id <>2;
解析:
(1)on后面:跟着的是对右表的限制条件 t2.id <>2;
结论:左表记录全部返回,右表筛选条件生效
with t1 as (select 1 as id union allselect 2 as id union allselect 3 as id
),t2 as (select 1 as id union allselect 2 as id union allselect 2 as id)select t1.id,t2.id
from t1
left join t2 on t1.id = t2.id and t2.id <>2;
输出结果为:
(2)where后面:跟着的是对右表的限制条件 where t2.id <>2;
结论:最后临时表的基础上进行筛选,最终返回符合where过滤条件的行;
ps: sql中比较的结果一般有:true, false, null; 而where条件只会过滤出true的结果。
with t1 as (select 1 as id union allselect 2 as id union allselect 3 as id
),t2 as (select 1 as id union allselect 2 as id union allselect 2 as id)select t1.id,t2.id
from t1
left join t2 on t1.id = t2.id
where t2.id <>2;
输出结果为:
补充:
select (1>2) --> FALSE
select (1<2) --> true
select (1<null) --> null--所以,sql比较的结果会有三种:false, true, null
相关文章:

Hive中left join 中的where 和 on的区别
目录 一、知识点 二、测试验证 三、引申 一、知识点 left join中关于where和on条件的知识点: 多表left join 是会生成一张临时表。on后面: 一般是对left join 的右表进行条件过滤,会返回左表中的所有行,而右表中没有匹配上的数…...

LaTeX教程(001)-LaTeX文档结构(01)
LaTeX教程(001)- LaTeX \LaTeX LATEX文档结构(01) 说在前面 这是我本人学习《The LaTeX Companion》第三版的笔记,但并不是翻译。 书籍的第一章对 LaTeX \LaTeX LATEX及其历史进行了相当长的介绍,这是几乎每一本关于 LaTeX \LaTeX LATEX的书都会…...

SV-7041T 多媒体教学广播IP网络有源音箱
SV-7041T是深圳锐科达电子有限公司的一款2.0声道壁挂式网络有源音箱,具有10/100M以太网接口,可将网络音源通过自带的功放和喇叭输出播放,可达到功率30W。同时它可以外接一个30W的无源副音箱,用在面积较大的场所。5寸进口全频低音喇…...

Linux文本三剑客awk经典案例
前言: AWK是一种专门用于文本处理的编程语言,它被广泛用于数据提取和报告生成,也是企业笔试面试常考的内容,以下34题是awk的用法案例,希望可以帮到你! 1.查看TCP连接状态 [rootnode1 ~]# netstat -nat | a…...

如何使用 Mermaid、GitHub 和 VSCode 用代码创建关系图三
Mermaid 系列 如何使用 Mermaid、GitHub 和 VSCode 用代码创建关系图一如何使用 Mermaid、GitHub 和 VSCode 用代码创建关系图二 1.如何创建甘特图 Gantt 甘特图以条形图的形式用作可视化表示。它有效地展示了项目的时间表,揭示了各个项目组件完成所需的持续时间…...

考研经验总结——政治篇
文章目录 一、前言二、学习情况三、最后 一、前言 不要提前,不要提前,不要提前, 我曾在暑假的时候上了7天左右的政治课,讲真话是很有趣的,并且对于自身的世界观、人生观和价值观的改善也是相当不错的,把我…...

春招秋招,在线测评到底难不难?
现在很多企业在春招的时候,都会有一个在线测评的环节,目的当然就是希望更加了解清楚毕业生的综合能力以及其他方面的素质,好让HR可以根据岗位筛选出能力达标的人才。所以,现在不少即将面对春招的大学毕业生,比较关心的…...

数学建模比赛中,使用大语言模型如chatgpt、文心一言该如何写Prompt(提示)?
在大型语言模型中,"prompt"(中文常译为“提示”或“引导”)是指提供给模型的输入文本,用于指示或引导模型产生特定的输出。它的作用主要是告诉模型用户想要得到什么样的信息或完成什么样的任务。 例如,在使…...

tcpdump 抓包无法落盘
文章目录 问题背景解决办法 问题背景 在嵌入式设备中(Linux系统),为了分析两个网络节点的通讯问题,往往需要用到tcpdump,抓一个.pcap的包在PC端进行分析。博主在实际操作中发现,抓包无法实时落盘。 解决办法 # 下面的命令是写在…...

【网站项目】066农家乐信息平台
🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板ÿ…...

idea/webstorm 创建Vue实例 Unresolved type Vue 处理方法
1.电脑本地安装node.js 官网下载 2. 其他: 未排除变量,前期试错(以下步骤配置了,但不确定对解决问题是否有帮助)...

C++ 11新特性之语法甜点2
概述 C 11中引入了许多简化编程工作的语法上的新特性,我们暂且美其名曰:“语法甜点”。书接上篇,我们继续介绍C 11中的这些“语法甜点”,也是第二篇关于“语法甜点”的文章。 语法甜点6:模板右边双括号 在C 03中&#…...

【芯片设计- RTL 数字逻辑设计入门 番外篇 8.1 -- memory repair 详细介绍】
文章目录 memory repair 详细介绍Memory Repair 方法Memory Repair 过程举例memory repair 详细介绍 SoC (System on Chip) 的 Memory Repair 是一种技术,用于检测和修复内存中的损坏单元。由于SoC内部集成了大量的逻辑和存储单元,包括RAM(随机访问存储器)、ROM(只读存储…...

2023强网杯复现
强网先锋 SpeedUp 要求2的27次方的阶乘的逐位之和 在A244060 - OEIS 然后我们将4495662081进行sha256加密 就得到了flag flag{bbdee5c548fddfc76617c562952a3a3b03d423985c095521a8661d248fad3797} MISC easyfuzz 通过尝试输入字符串判断该程序对输入字符的验证规则为9…...

IP代理协议有哪些?爬虫代理如何被合理使用?
随着互联网的普及和发展,IP代理作为一种网络代理方式,越来越受到人们的关注。IP代理协议是网络代理的一种规范,它规定了代理服务器与客户端之间进行通信的规则。了解IP代理协议对于使用代理的人来说非常重要,因为它可以帮助我们更…...

Vue学习笔记(二)快速入门
Vue学习笔记(二)快速入门 vue小试牛刀 hello-vue3.html <body><div id"app"><h1>{{msg}}</h1></div><script type"module">import {createApp} from https://unpkg.com/vue3/dist/vue.esm-b…...

在Vue中@click方法不起效
问题描述: 在跟项目的时候,我们可能会遇到我们click点击时,需要执行多个操作,如:调用方法,修改变量等。举个例子,像这样,我们在管理项目中想要编辑某一值,编辑好后&…...

服装行业ERP系统解决方案
我国的服装企业大多属于劳动密集型,主要有三种类型:自有品牌服装生产销售企业、接订单生产型企业及处于产业链下游的零售分销企业。在经营过程中,服装行业面临诸多挑战,如流行周期短、季节性强,市场变化快;…...

AI绘画探索人工智能的未来
🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-8fL64RHWVzwpzR6m {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…...

Java 的 Map 與 List
小心获得List<Map>的size List<Map>没有赋值前,JVM会初始化,所以List<Map>会有一个25的size()。 通過重新new 一個ArrayList 轉化 resTask.setList(new ArrayList<Group>(custMap.values())); 无序的M…...

C++从零开始的打怪升级之路(day24)
这是关于一个普通双非本科大一学生的C的学习记录贴 在此前,我学了一点点C语言还有简单的数据结构,如果有小伙伴想和我一起学习的,可以私信我交流分享学习资料 那么开启正题 今天分享的是关于vector的一些函数 1.构造函数 vector() …...

用 CanvasKit 实现超级丝滑的原神地图(已开源)!!!
首先给大家送上预览地址: 官网地址:https://webstatic.mihoyo.com/ys/app/interactive-map/index.html canvaskit地址:http://106.55.55.247/ky-genshin-map/ 为什么 canvaskit 有如此高的性能? 第一个问题,官方网页…...

MySQL原理(三)锁定机制(2)表锁行锁与页锁
前面提到,mysql锁按照操作颗粒分类,一般认为有表级锁、行级锁、页面锁三种。其实还有一种特殊的全局锁。 锁场景问题全局锁全库逻辑备份加了全局锁之后,整个数据库都是【只读状态】,如果数据库里有很多数据,备份就会花…...

设计模式⑩ :用类来实现
文章目录 一、前言二、Command 模式1. 介绍2.应用3. 总结 三、Interpreter 模式1. 介绍2. 应用3. 总结 参考文章 一、前言 有时候不想动脑子,就懒得看源码又不像浪费时间所以会看看书,但是又记不住,所以决定开始写"抄书"系列。本系…...

Flutter 解决ExpansionTile上下分割线问题,以及title撑满问题
文章目录 前言一、解决上下分割线问题二、使ExpansionTile的title撑满总结 前言 最近在做flutter项目,其中的一个功能用到了ExpansionTile的效果,奈何我们的设计师要求很高,展开的时候不能有上下一根线,而且我们是不需要展开的按…...

数据可视化 pycharts实现时间数据可视化
自用版 数据格式为: 运行效果为: from pyecharts import options as opts from pyecharts.charts import Polar, Page import csv filename "./hot-dog-places.csv" data_x [] data_y [] with open(filename) as f:reader csv.reade…...

深度强化学习(王树森)笔记11
深度强化学习(DRL) 本文是学习笔记,如有侵权,请联系删除。本文在ChatGPT辅助下完成。 参考链接 Deep Reinforcement Learning官方链接:https://github.com/wangshusen/DRL 源代码链接:https://github.c…...

python 实现 macOS状态栏 网速实时显示
安装依赖包: pip install pillow psutil rumpsnetSpeedApp.py from PIL import Image, ImageDraw, ImageFont import psutil import rumpsclass NetSpeedApp(rumps.App):def __init__(self):super(NetSpeedApp, self).__init__("NetSpeed")self.titlese…...

【C++】开源:Windows图形库EasyX配置与使用
😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Windows图形库EasyX配置与使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&#…...

微信小程序 全局变量键值对map对象
在微信小程序中,键值对的map对象通常用于存储和操作键值对的集合。以下是一些常见的操作: 创建map对象 在JavaScript中,可以通过对象字面量语法或者使用new Map()来创建map对象 // 使用对象字面量 var map {key1: value1,key2: value2 };…...