分析SQL中的ON后面AND条件与WHERE后AND的区别及其应用场景

  • 引言
  • ON条件 - 连接条件
    • 示例1 - ON条件用于连接表
    • 示例2 - ON中多个连接条件
  • WHERE条件 - 数据过滤
    • 示例3 - WHERE条件应用于连接结果
  • 区别与结合使用
  • 总结

引言

        在SQL查询中,JOIN子句的ON条件和WHERE子句的AND条件都用于筛选数据,但它们的应用上下文和作用方式有所不同。尤其是在涉及多表连接查询时,准确理解和使用这两个关键字至关重要。这里将通过实例解析两者之间的区别,并探讨它们在不同场景下的应用。

ON条件 - 连接条件

ON关键字在SQL连接查询中扮演着核心角色,用于指定两个或更多表之间的连接条件。当我们在执行INNER JOINLEFT JOINRIGHT JOINFULL JOIN时,ON后面跟随的条件用于决定哪些行应该相互匹配形成结果集的一部分。

示例1 - ON条件用于连接表

SELECT a.*, b.*
FROM table_a AS a
LEFT JOIN table_b AS b
ON a.id = b.a_id;

在此例中,ON a.id = b.a_id指定了表a与表b之间的连接依据,即table_aid列与table_ba_id列相等的记录会被连接在一起。

ON中使用AND条件

当我们需要多个连接条件时,可以在ON后面使用AND关键字。

示例2 - ON中多个连接条件

SELECT a.*, b.*
FROM table_a AS a
LEFT JOIN table_b AS b
ON a.id = b.a_id AND a.status = b.status;

此处,ON后面的AND条件意味着不仅要求id相等,还要求status字段也相等才能进行连接。

WHERE条件 - 数据过滤

相比之下,WHERE子句是对整个查询结果进行过滤,而不是用于定义表间连接规则。在连接操作完成后,WHERE条件会对临时结果集进行筛选。

示例3 - WHERE条件应用于连接结果

SELECT a.*, b.*
FROM table_a AS a
LEFT JOIN table_b AS b
ON a.id = b.a_id
WHERE a.status = 'ACTIVE';

        在上面的例子中,即使table_b中没有与table_astatus为’ACTIVE’的记录相匹配的行,table_a中所有status为’ACTIVE’的行仍然会出现在结果集中,而table_b对应的部分则为NULL。

区别与结合使用

  • 区别ON用于连接操作时的匹配条件,决定的是哪两行或多行记录应该合并;而WHERE是在连接操作之后,用于筛选出满足一定条件的最终结果行。

  • 结合使用:尽管两者有区别,但在实际查询中经常一起出现,先通过ON确定连接关系,再用WHERE对连接结果进行细化过滤。

总结

  • 当涉及多表连接时,ON关键字后跟的条件是连接的关键,决定了表间数据如何匹配;
  • WHERE子句则是对整个查询结果进行全局过滤,不影响连接操作本身;
  • 在复杂的查询中,合理运用ONWHERE的组合可以帮助我们精确获取所需的数据集。

        实践中,ON是用来关联表的,而WHERE是用来筛选行的,这有助于正确构建和优化SQL查询。同时,在使用LEFT JOIN等外连接时,尤其要注意WHERE条件可能会改变连接的外延性质,影响结果集中左表(或右表)的完整性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/825189.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ项目实战(一)

文章目录 RabbitMQ项目实战选择客户端基础实战 前情提要:我们了解了消息队列,RabbitMQ的入门,交换机,以及核心特性等知识,现在终于来到了激动人心的项目实战环节!本小节主要介绍通过Spring Boot RabbitMQ S…

2021年全国大学生电子设计竞赛D题——基于互联网的摄像测量系统(三)

13 测试方案和测量结果 测量一个边长为1米的正方形,取三个顶点分别作为O、A、B点。 在O点上方,用细线悬挂激光笔,激光笔常亮向下指示,静止时激光笔的光点和O点重合。 将两个D8M摄像头子卡插到DE10-Nano开发板上,放…

MySQL Linux环境安装部署

目录 1、mysql安装包下载 2、安装mysql服务 3、启动mysql服务 4、登录mysql服务 1、mysql安装包下载 1、查看centos的版本 cat /etc/redhat-release 2、进入官网地址下载对应系统版本的安装包 地址:MySQL :: Download MySQL Yum Repository 2、安装mysql服务 …

恒峰智慧科技-森林消防便捷泵:轻松应对火灾危机!

在广袤无垠的森林中,绿色是生命的象征,是自然的馈赠。然而,当火魔无情地吞噬这片生命的绿洲时,我们需要一种快速、高效、可靠的消防工具来守护这片绿色。此时,森林消防便捷泵应运而生,成为了守护森林安全的…

Oracle数据库 :查询表结构脚本

查询脚本 : SELECT CASE WHEN a.column_id1 THEN a.TABLE_NAME ELSE END AS 表名, a.column_id AS 序号, a.column_name as 列名, REPLACE(comments, CHR(10), ) as 列说明, a.data_type || ( || a.data_length || ) as 数据类型, a.DATA_LENGTH AS 长度, a.DATA_…

idea中停止运行Vue

在里面敲入Ctrlc 输入y确定即可。

【微服务-Ribbon】什么是负载均衡?微服务中负载均衡有哪些策略呢?

前面几篇文章,我们了解了一下Nacos的单机部署、集群部署以及微服务接入Nacos的步骤。从本篇开始,我们来看一下微服务第二个通用组件-负载均衡(Ribbon)。 1、Ribbon负载均衡器 负载均衡顾名思义,是指通过软件或者硬件…

电能质量分析仪是什么

TH-6500电能质量分析仪是一种用于记录和分析现场电能质量参数的设备。它能够检测并记录电力系统的电压波动、频率偏差、谐波、三相不平衡等参数,帮助用户了解电力系统的运行状态,及时发现并解决潜在的电能质量问题。 该设备具备多种测量功能&#xff0c…

嵌入式工程师有哪些必备技能,和电子爱好者有很大区别!

要掌握的技能实际上是非常多的。在这里,我来结合自己亲身经历,从技术、思维、项目管理等方面来谈一下我认为嵌入式开发需要掌握的技能。 技术方面 C语言和汇编语言能力 C语言是嵌入式开发最核心的编程语言。在我的初学阶段,我花费了很多时间…

生成人工智能体:人类行为的交互式模拟论文与源码架构解析(4)——架构分析 - 核心操作提示词构造

4.4.4.核心操作与提示词构造 (1)感知 0.根据vision_r参数,获取NPC周边(2*vision_r 1) **2个tile 1.将这些空间信息存储在NPC的空间记忆字典树 2.基于0的范围,获取当前NPC所在arena的所有事件,计算事件源距离NPC的…

我用AI帮我画刘亦菲写真,绘画写真某一天是否可以取代照相馆?

我用AI帮我画刘亦菲写真,绘画写真某一天是否可以取代照相馆? 最近我试了用FaceChain人物写真生成来测试帮我绘图,为了不翻车,我在网上随便找了刘亦菲的日常照片10多张左右作为训练原图。 真随便找的 生成效果有多种选择 下面…

【问题处理】银河麒麟操作系统实例分享,服务器操作系统VNC远程问题分析

1.服务器环境以及配置 【内核版本】 4.19.90-23.8.v2101.ky10.aarch64 【OS镜像版本】 0518-server 2.问题现象描述 服务器通过vncserver:1.service服务启动的vnc服务后,普通用户用vnc连接时,锁屏后,然后输入登陆密码会报密码错误&…

备考2024年小学生古诗文大会:吃透历年真题和知识点(持续讲题)

对上海小学生的小升初和各种评优争章来说,语文、数学、英语的含金量较高的证书还是很有价值和帮助的。对于语文类的竞赛,小学生古诗文大会和汉字小达人通常是必不可少的,因为这两个针对性强,而且具有很强的上海本地特色。 根据往…

【nnUNetv2进阶】六、nnUNetv2 魔改网络-小试牛刀-加入注意力机制CBAM

nnUNet是一个自适应的深度学习框架,专为医学图像分割任务设计。以下是关于nnUNet的详细解释和特点: 自适应框架:nnUNet能够根据具体的医学图像分割任务自动调整模型结构、训练参数等,从而避免了繁琐的手工调参过程。 自动化流程&a…

Shopee虾皮批量上传全球产品指南

当shopee虾皮需要大量上架新产品时,批量工具可以更好的提升效率。通过本指南,你将了解如何批量上传全球商品,本指南适用于所有站点。 一、什么是批量上传? 您可以通过【中国卖家中心>>全球商品>>批量上传】功能&…

一文教您理解Playwright是如何实现动态等待的

使用过Playwright的同学都会有这样的感受,Playwright对UI页面中元素的识别非常稳定,这离不开其强大的动态等待机制!简单的解释就是,Playwright在对UI页面中的任何元素操作之前,都需要做出一些列的校验工作来确保能够稳…

GaussDB数据库SQL系列-聚合函数

背景 在这篇文章中,我们将深入探讨GaussDB数据库中聚合函数的使用和优化。聚合函数是数据库查询中非常重要的工具,它们可以对一组值执行计算并返回单个值。例如,聚合函数可以用来计算平均值、总和、最大值和最小值。 这些功能在数据分析和报…

【Linux】网络与守护进程

欢迎来到Cefler的博客😁 🕌博客主页:折纸花满衣 🏠个人专栏:题目解析 🌎推荐文章:进程状态、类型、优先级、命令行参数概念、环境变量(重要)、程序地址空间 目录 👉🏻守护…

面试八股——集合——List

主要问题 数组 如果数组索引从0开始时,数组的寻址方式为: 如果数组索引从1开始时,数组的寻址方式为: 此时对于CPU来说增加了一个减法指令,降低寻址效率。 ArrayList⭐ ArrayList构造函数 尤其说一下第三个构造函数流…

【复习笔记】FreeRTOS(五)时间片调度

本文是FreeRTOS复习笔记的第五节,时间片调度。 上一篇文章: 【复习笔记】reeRTOS(四) 列表项的插入和删除 文章目录 1.时间片调度简介1.1. 运行过程 二、实验设计三、测试例程四、实验效果 1.时间片调度简介 FreeRTOS支持多个任务同时拥有一个优先级&am…