当前位置: 首页 > news >正文

筛选条件在on和where中的区别(基于hivesql)

理解筛选条件在on和where中的区别,最好先理解sql的执行顺序,尽管实际执行时不同的物理执行引擎可能会有特定的优化,但是逻辑执行顺序必须遵循:

1)from:确定数据源是什么,from后可以是单表,可以是多表的join操作。
2)where:对from的数据源进行筛选。
3)group by:对where筛选后的结果分组。
4)having:对group by分组后的结果进行过滤(注意此时过滤的数据粒度不是单条记录,而是整个分组)。
5)select:选择结果字段(窗口函数的执行时机也在此时)。
6)order by:对select的结果执行排序。
7)limit:限制最终的结果数量。

所以从执行顺序可以看出筛选条件放在where和on中,最本质的区别是过滤的时机不同,on中的过滤发生在join的过程中,影响的参与join的记录,而where中的过滤是对join之后的结果集进行过滤。

筛选条件放在on中:

drop view if exists employees;
create temporary view employees as
select 1 as emp_id, '张三' as name, 10 as dept_id
union all
select 2, '李四', 20
union all
select 3, '王五', null;drop view if exists departments;
create temporary view departments as
select 10 as dept_id, '技术部' as dept_name, 'active' as status
union all
select 20, '市场部', 'inactive'
union all
select 30, '财务部', 'active';select *
from employees e
left join departments d on e.dept_id=d.dept_id and d.status='active';

在这里插入图片描述
保留了左表的全部记录,逻辑上和先从右表筛选,拿筛选后的结果和左表关联的效果一样。

放在where中:

drop view if exists employees;
create temporary view employees as
select 1 as emp_id, '张三' as name, 10 as dept_id
union all
select 2, '李四', 20
union all
select 3, '王五', null;drop view if exists departments;
create temporary view departments as
select 10 as dept_id, '技术部' as dept_name, 'active' as status
union all
select 20, '市场部', 'inactive'
union all
select 30, '财务部', 'active';select *
from employees e
left join departments d on e.dept_id=d.dept_id where d.status='active';

在这里插入图片描述

相关文章:

  • 数据结构·树
  • Upwork全球化战略:用“文化套利”收割国际客户
  • Spark-SQL核心编程
  • 无人机气动-结构耦合技术要点与难点
  • API:科技赋能,引领智能文字识别、身份认证与发票查验真伪变革
  • centos yum install environment-modules
  • 初识Redis · list和hash类型
  • 速卖通商品详情API接口:功能、应用与开发指南
  • 一文了解:北斗短报文终端是什么,有哪些应用场景?
  • UE 使用事件分发器设计程序
  • 深入 Java 正则表达式源码:透视 Matcher.group(int) 的分组提取机制
  • 服务器ssh安装
  • 考研408参考用书:计算机组成原理(唐朔飞)介绍,附pdf
  • 观察者模式(行为模式)
  • JavaScript `new Date()` 方法移动端 `兼容 ios`,ios环境new Date()返回NaN
  • mysql no space left on device
  • Ubuntu20.04 设置开机自启
  • YOLO11改进——融合BAM注意力机制增强图像分类与目标检测能力
  • 黑马头条day01
  • Deepseek本地部署 + 个性化 Rag 知识库
  • 新闻1+1丨婚姻登记服务,如何跑出幸福加速度?
  • 人民网评:守护健康证的“健康”,才有舌尖上的安全
  • 《广州大典研究》集刊发展座谈会:“广州学”的传承与创新
  • 湛江霞山通报渔船火灾:起火船舶共8艘,无人员伤亡或被困
  • 瑞士联邦主席凯勒-祖特尔、联邦副主席帕姆兰会见何立峰
  • 中俄就应对美加征所谓“对等关税”等问题进行深入交流