T-SQL——关于Join on的的连接条件和where的筛选条件的区分

news/2025/1/15 21:58:16/文章来源:https://www.cnblogs.com/shanzhiming/p/18409519

目录
  • 1.测试数据
  • 2. left join 之后ON中筛选条件
  • 3. left join之后使用where连接筛选条件

1.测试数据

WITH
temp1 AS(SELECT '张三' AS Name, 1 AS ClassNoUNION ALLSELECT '李四' AS Name, 2 AS ClassNoUNION ALLSELECT '王五' AS Name, 3 AS ClassNoUNION ALLSELECT '赵六' AS Name, NULL AS ClassNoUNION ALLSELECT '钱七' AS Name, 4 AS ClassNo),
temp2 AS(SELECT '1' AS ClassNo, '一年级' AS ClassNameUNION ALLSELECT '2' AS ClassNo, '二年级' AS ClassNameUNION ALLSELECT '3' AS ClassNo, '三年级' AS ClassName)

2. left join 之后ON中筛选条件

SELECT * FROM temp1 AS a LEFT JOIN temp2 AS b ON a.ClassNo=b.ClassNo AND a.ClassNo IS NOT NULL;结果:
Name ClassNo     ClassNo ClassName
---- ----------- ------- ---------
张三   1           1       一年级
李四   2           2       二年级
王五   3           3       三年级
赵六   NULL        NULL    NULL
钱七   4           NULL    NULL
  • on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录
  • 说明:ON是作为join语句的连接条件,这里是left join 在说明不论ON中的条件是否符合,左表中的所有记录都会显示,所以这里的a.ClassNo IS NOT NULL对最终显示的结果是没有作用的

3. left join之后使用where连接筛选条件

SELECT * FROM temp1 AS a LEFT JOIN temp2 AS b ON a.ClassNo=b.ClassNo WHERE a.ClassNo IS NOT NULL;结果:
Name ClassNo     ClassNo ClassName
---- ----------- ------- ---------
张三   1           1       一年级
李四   2           2       二年级
王五   3           3       三年级
  • where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

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

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

相关文章

读构建可扩展分布式系统:方法与实践02分布式系统架构简介

分布式系统架构简介1. 系统架构基础 1.1. 几乎所有大规模系统都是从小规模开始,在成功路上逐渐发展壮大 1.2. 通信使用标准的应用层网络协议,通常是HTTP 1.3. Java EE和Java的Spring框架 1.4. Python的Flask 1.5. 随着应用程序的特性变得更加丰富,单体应用程序的复杂性往往会…

ch07_oop_fundamentals

第7章 面向对象编程(基础部分)类与对象类和对象的区别和联系 对象在内存中存在形式! 属性/成员变量/字段 如何创建对象 如何访问属性成员方法方法的调用机制原理! 成员方法的好处 成员方法的定义成员方法传参机制引用数据类型的传参机制 成员方法返回类型是引用类型应用实例方法…

机器学习作业4

机器学习作业4 学号:102102156 姓名:高涛 1. 图像聚类 1.1 代码1.2 绘制结果2.图像特征脸(eigenfaces) 2.1 代码2.2 绘制结果![image-20240913014823493] 3.1 图像降维 3.1 代码3.2 绘制结果

软工个人项目-论文查重

软工个人项目-论文查重这个作业属于哪个课程 广工计院计科34班软工这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13229这个作业的目标 个人独立完成论文查重代码,进一步了解项目开发的流程,学会运用工具分析消除警告,运用性能分析工具进行…

和PLC对配置的繁琐工序

上位机开发最烦和PLC对轴的位置,点的位置,一大堆的手写工序,数据不是放在Excel表,就是放在txt或者ini 图1.图2这次的需求 我需要手动将图1的数据写到图2 太麻烦 所以我准备写一个工具实现它 首先,我打算生成图2,需要使用到XML反序列化,读取图1,我使用MiniExcel 所以我先…

Redis入门 - C#|.NET Core封装Nuget包

分享封装Redis C#库并打包成Nuget包的方法,旨在增强代码可测试性、解耦及扩展Redis功能。通过封装Redis客户端库,提供统一接口,便于测试、替换和扩展功能,同时支持依赖注入,简化配置和使用。经过前面章节的学习,可以说大家已经算Redis开发入门了。已经可以去到项目上磨砺…

vue3项目部署到Github

此教程适应于以webpack,vue-cli,vite等脚手架构建的vue项目。当然,vue2和vue3都是可以滴。1. 前提:你的代码库已经提交到Github上 如果没有的话,请到GitHub上新建仓库,并把你本地的项目提交到GitHub上新建的仓库里。 具体方法,可以参考我的博客 Git使用记录 - 持续更新 …

[极客大挑战 2019]LoveSQL 1

启动靶机作者不建议使用sqlmap我们这里就进行手工注入 用万能口令登录 admin or 1 =1# ,详情见上文(https://www.cnblogs.com/m1saka1/p/18411197) 登录成功获得用户名和密码,发现密码并没有卵用,只能换思路利用账号密码的回显页面进行sql注入爆破数据库 由于网站自动转义,…

Go日志管理库zap

一、zap介绍 在许多Go语言项目中,我们需要一个好的日志记录器能够提供下面这些功能: 1.能够将事件记录到文件中,而不是应用程序控制台。 2.日志切割-能够根据文件大小、时间或间隔等来切割日志文件。 3.支持不同的日志级别。例如INFO,DEBUG,ERROR等。 4.能够打印基本信息,…

深度神经网络DNN、RNN、RCNN及多种机器学习金融交易策略研究|附数据代码

全文链接:https://tecdat.cn/?p=37668 原文出处:拓端数据部落公众号 分析师:Aijun Zhang 在当今的金融领域,量化交易正凭借其科学性和高效性逐渐成为主流投资方式之一。随着大数据技术的蓬勃发展,量化交易借助先进的数学模型和计算机分析能力,摒弃了人的主观判断,通过…

第一次个人作业

这个作业属于哪个课程 班级的链接这个作业要求在哪里 作业要求的链接这个作业的目标 实现论文查重算法,并对代码进行性能分析、单元测试,使用PSP表GitHub链接 一、PSP表PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)Planning 计划 15 20Estimate 估…