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

网站木马 代码网站建设新手

网站木马 代码,网站建设新手,建设外贸商城网站,广告设计培训班有用吗目录 文章目标 🧩 背景回顾:SQL 的执行顺序 示例对比 ✅ ON 应该只管:这两行能不能配对 ✅ 正确做法:把过滤放在 WHERE 🔬 实验演示:ON vs. WHERE 的影响 总结: 🏁 最终推荐…

目录

文章目标

🧩 背景回顾:SQL 的执行顺序

示例对比

✅ ON 应该只管:这两行能不能配对

✅ 正确做法:把过滤放在 WHERE 

🔬 实验演示:ON vs. WHERE 的影响

总结:

 🏁 最终推荐 SQL 写法


文章目标

我们要解决的问题是:

在 JOIN 查询中,哪些条件写在 ON 后面,哪些写在 WHERE 后面?为什么?

这个问题,初看像语法细节,实则深藏两个重要概念:

  • SQL 执行顺序(JOIN → WHERE)

  • 条件的语义(配对 vs. 过滤)

🧩 背景回顾:SQL 的执行顺序

在一条 SQL 中,执行步骤大致如下:

  1. FROMJOIN:把多个表合并,按 ON 的规则配对行

  2. WHERE:对配对成功的行进行行级过滤

  3. GROUP BY:对通过筛选的行进行分组

  4. SELECT:选出你需要的字段

  5. ORDER BY / LIMIT

所以:

ON 作用在连接阶段,是“决定哪些行要配成一对”

WHERE 是后续过滤,是“已经 JOIN 上了,选谁要留下” 

示例对比

我们仍以Leecode上的一道题来分析。这道题的思路讲解可以看我之前的文章:

思路解析:第一性原理解 SQL-CSDN博客

表: Activity

+----------------+---------+
| Column Name    | Type    |
+----------------+---------+
| machine_id     | int     |
| process_id     | int     |
| activity_type  | enum    |
| timestamp      | float   |
+----------------+---------+

 

该表展示了一家工厂网站的用户活动。
(machine_id, process_id, activity_type) 是当前表的主键(具有唯一值的列的组合)。
machine_id 是一台机器的ID号。
process_id 是运行在各机器上的进程ID号。
activity_type 是枚举类型 ('start', 'end')。
timestamp 是浮点类型,代表当前时间(以秒为单位)。
'start' 代表该进程在这台机器上的开始运行时间戳 , 'end' 代表该进程在这台机器上的终止运行时间戳。
同一台机器,同一个进程都有一对开始时间戳和结束时间戳,而且开始时间戳永远在结束时间戳前面。

现在有一个工厂网站由几台机器运行,每台机器上运行着 相同数量的进程 。编写解决方案,计算每台机器各自完成一个进程任务的平均耗时。

完成一个进程任务的时间指进程的'end' 时间戳 减去 'start' 时间戳。平均耗时通过计算每台机器上所有进程任务的总耗费时间除以机器上的总进程数量获得。

结果表必须包含machine_id(机器ID) 和对应的 average time(平均耗时) 别名 processing_time,且四舍五入保留3位小数。

以 任意顺序 返回表。(来源:Leecode)

SELECT machine_id, ROUND(AVG(t2.timestamp - t1.timestamp), 3) AS processing_time
FROM Activity t1
JOIN Activity t2ON t1.machine_id = t2.machine_idAND t1.process_id = t2.process_idAND t1.activity_type = 'start'AND t2.activity_type = 'end'
GROUP BY machine_id;

这段代码可以运行,但不严谨。原因如下:

ON 应该只管:这两行能不能配对

这些条件是合理的 ON 条件:

ON t1.machine_id = t2.machine_id
AND t1.process_id = t2.process_id

解释:我们只配同一机器、同一进程的事件,没错。

❌ 不推荐在 ON 中写:

AND t1.activity_type = 'start'
AND t2.activity_type = 'end'

为什么?

  • 你想过滤的是:t1 是 start,t2 是 end

  • 这是你的业务逻辑,不是连接逻辑

  • 放在 ON 会影响 JOIN 结果集(可能 JOIN 失败),而非只是筛选

✅ 正确做法:把过滤放在 WHERE 

FROM Activity t1
JOIN Activity t2ON t1.machine_id = t2.machine_idAND t1.process_id = t2.process_id
WHERE t1.activity_type = 'start'AND t2.activity_type = 'end'

这样写的意义是:

  • 先配对所有同机同进程的记录

  • 然后从中筛出我们感兴趣的组合(startend

🔬 实验演示:ON vs. WHERE 的影响

假设 Activity 表中有:

machine_idprocess_idactivity_typetimestamp
1101start10.0
1101end20.0
1101error15.0

如果你把 'start' / 'end' 写在 ON 中:

  • JOIN 阶段只会配出 (start, end)

  • 那些 error 就永远不会参与配对

如果你写在 WHERE 中:

  • JOIN 先配出所有 (start, end)、(start, error)、(end, error) 等

  • 然后你可以灵活过滤你关心的组合

这让 SQL 更清晰、也更灵活

总结:

  • ✳️ ON“谁和谁能配成一对?”(连接规则)

  • ✳️ WHERE“配好之后,我要不要这行?”(业务逻辑)

 🏁 最终推荐 SQL 写法

SELECT machine_id, ROUND(AVG(t2.timestamp - t1.timestamp), 3) AS processing_time
FROM Activity t1
JOIN Activity t2ON t1.machine_id = t2.machine_idAND t1.process_id = t2.process_id
WHERE t1.activity_type = 'start'AND t2.activity_type = 'end'
GROUP BY machine_id;
http://www.dtcms.com/a/606672.html

相关文章:

  • 汕头市国外网站建设公司百度关键词优化查询
  • 业务流低代码平台:从理念到实战
  • DebugView 学习笔记(8.9):什么是调试输出?为什么它是现场排障的“读心术”
  • RSS 语法:全面解析与优化指南
  • php能做手机网站吗口碑营销成功的案例
  • 【每日一面】BOM 是什么
  • 稀土抑烟剂在透明膜上的应用:安全与环保的双重保障
  • 郑州网站建设中心wordpress2016
  • 最新企业网站制作短链接网站
  • 建设部标准规范网站网页设计与制作教程考试试卷
  • 基于Python+OpenCV实现双目立体视觉的图像匹配与测距
  • duckdb使用详解
  • 【愚公系列】《MCP协议与AI Agent开发》010-MCP协议标准与规范体系(协议消息结构设计)
  • 3、日常脚本:文件去重(删除重复文件)
  • 物流公司网站方案wordpress搭建系统
  • 个人做负面网站犯法不ui设计行业的现状和发展前景
  • 亚马逊部分退款计划:卖家降本增效新策略
  • 外包公司企业网站学习做网站难吗
  • 分布式环境下的一致性与幂等性
  • 【OpenCV + VS】 使用 OpenCV 实现实时人脸检测
  • 聊城手机网站建设电话达内网站开发视频教程
  • MySQL JOIN 机制与多表查询优化:驱动表选择、连接算法与执行计划解析
  • AI代码开发宝库系列:特征工程
  • WordPress全站广告巩义市建设局网站
  • 信誉好的顺德网站建设如何用百度平台营销
  • Apache Cloudberry 孵化报告(202508-202510)
  • 【2025 JAVA面试题】 常见几个具体问题
  • dedecms大气金融企业网站模板八年级信息所用软件做网站
  • C语言编译器手机| 如何选择适合的C语言编译器应用
  • Java 并发踩坑:高并发库存扣减丢失更新,从悲观锁到分布式锁的终极方案