分析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…

AppsFlyer 接入更新

SDK文档 最新的 SDK 已经支持了 UPM 的接入方式,直接输入链接就可以安装好, 只需要 resolve 通过然后就可以使用了。

盒子模型和圆角边框的属性

一、标准盒子模型 content padding border margin 定义 width 和 height 时,参数值不包括 border 和 padding 二、怪异盒子模型 能不能实现怪异盒子模型全看属性 box-sizing,box-sizing 属性的取值可以为 content-box 或 border-box。 content-b…

CentOS 7 中时间快了 8 小时

1.查看系统时间 1.1 timeZone显示时区 [adminlocalhost ~]$ timedatectlLocal time: Mon 2024-04-15 18:09:19 PDTUniversal time: Tue 2024-04-16 01:09:19 UTCRTC time: Tue 2024-04-16 01:09:19Time zone: America/Los_Angeles (PDT, -0700)NTP enabled: yes NTP synchro…

DRF分页接口

DRF分页接口 目录 DRF分页接口PageNumberPagination(基本分页类)LimitOffsetPagination(偏移分类)CursorPagination(游标分页) 实战 PageNumberPagination(基本分页类) 特点 基于页码的分页方式…

CS信息系统建设和服务能力评估申报知识点

代科技快速发展,云计算、大数据、物联网、移动互联网等新一代信息技术发展迅速,信息化服务模式正经历着重大的变化。而CS信息系统建设和服务能力评估是反映信息系统建设和服务提供者的能力水平的一个证书,现在许多企业都在办理这个资质。那么…

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

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

对象生命周期:Transient(瞬态)、Scoped(范围)、Singleton(单例)

在对象生命周期和依赖注入(DI)的上下文中,特别是在使用如Microsoft.Extensions.DependencyInjection(.NET Core的DI容器)等框架时,对象的生命周期通常被划分为几个不同的类型:Transient&#xf…

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服务 …

MySQL运维实战之ProxySQL(9.3)使用ProxySQL实现读写分离

作者:俊达 proxysql读写分离主要通过mysql_query_rules表中的规则来实现。 下面是具体的配置步骤: 1 hostgroup配置 insert into mysql_servers (hostgroup_id, hostname, port, max_replication_lag) values ( 100, 172.16.121.236, 3380, 3);inser…

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

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

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确定即可。

代码随想录算法训练营第44天| 518.零钱兑换II*、 377. 组合总和 Ⅳ*

518.零钱兑换II* 力扣题目链接 代码 #### 示例代码 class Solution { public:int change(int amount, vector<int>& coins) {vector<int> dp(amount 1, 0);dp[0] 1;for (int i 0; i < coins.size(); i) { // 遍历物品for (int j coins[i]; j < a…

Git最佳实践指南:从配置到高效开发的全面教程20240418

引言 在现代软件开发中&#xff0c;版本控制系统是不可或缺的工具&#xff0c;而Git是其中最受欢迎的一种。无论是个人项目还是团队合作&#xff0c;合理的Git使用策略可以显著提高开发效率和代码质量。本文详细介绍了Git的实践流程&#xff0c;包括项目设置、日常开发操作和高…

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

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

电能质量分析仪是什么

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

供应LF1608-LR83KDAT 芯片

长期供应各品牌芯片&#xff1a; LF1608-LR83KDAT IMX290LQR-G STM32F103C8T6TR STM32F103C8T6TR STM32F103CBT7TR TPS3823-33DBVR IMX326 NM1482KSLAXCL-3B EM6AB160TSE-5G W25Q128JVSIQ FMN1ET1TCJ-25IG PN614G6D2TE-B8BE0 GD25Q128ESIG FM6BD1G1GMB-2.5BLCGE…

正则表达式=》判断中文字

判断中文字 //Name Classification string input = "Eng中"; string patternZh = @"^\(*([\u4E00-\u9FFF_\s\.\,\-]{1,98})?\)*$"; Match match = Regex.Match(input, patternZh); Console

AI系列:大语言模型的function calling(下)- 使用LangChain

目录 前言LangChain Tool/Function calling1. Tool/function加强功能LangChain的tool装饰器其他方式: Pydantic 2. 绑定tools/functions3. 调用大模型(LLM)4. function calling处理流程 LangChain版代码与原生LLM调用的比较参考 前言 在AI系列&#xff1a;大语言模型的functio…