当前位置: 首页 > 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';

在这里插入图片描述

http://www.dtcms.com/a/133392.html

相关文章:

  • 数据结构·树
  • 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 知识库
  • 【过程控制系统】PID算式实现,控制系统分类,工程应用中控制系统应该注意的问题
  • 大模型文生图
  • 考研数据结构之二叉树(一)(包含真题及解析)
  • sql工具怎么选最适合自己的?
  • 【路由交换方向IE认证】BGP选路原则之Weight属性
  • 空间信息可视化——WebGIS前端实例(二)
  • Spark-SQL(一)
  • docker方式项目部署(安装容器组件+配置文件导入Nacos+dockerCompose文件创建管理多个容器+私有镜像仓库Harbor)
  • 循环神经网络 - 门控循环单元网络
  • LanDiff:赋能视频创作,语言与扩散模型的融合力量