SQL小技巧:where条件后为什么要写1=1?

【微信公众号:跟强哥学SQL】

相信第一次看到下面这个SQL的同学心里都不免会产生疑问。

SELECT * FROM employeesWHERE 1=1

为什么要在where条件中使用1=1这样的写法?这不是废话吗?

其实还真不是。

为什么使用1=1这样的条件?

在SQL语句中,当需要拼接多个条件时,我们可能会使用AND或OR来连接这些条件。而有时,为了拼接条件更加方便,会在where条件后直接写上1=1,这其实是为了简化拼接条件的逻辑表达式。

SELECT *FROM employeesWHERE 1=1  AND age > 25  AND gender = 'male';

比如,上面这个例子中,当我们写上1=1之后,在下面拼接其他条件时,不再需要额外判断是否是第一个条件,也不需要额外添加AND或者OR的逻辑判断。它就相当于一个空白的条件,可以让我们轻松地在后面添加新的条件,而不用纠结于第一个条件是否需要添加AND。

这种写法在动态拼接SQL语句时非常方便,也让代码看起来更加清晰明了。既提高了代码的可读性,又让我们的SQL语句更加优雅。

并且在我们想要注释掉某一个条件时,直接在该条件前使用单行注释符“--”就可以了,非常的方便。

“1=1”的其他高级场景:多表关联

看起来,“1=1”的逻辑判断条件永远为TRUE,似乎在SQL语句中并没有起到什么效果。

但在下面这个场景中,少了它,好像还真不行。

select    a.city_id,    b.product_id,    coalesce(c.in_come,0)from t_city ainner join t_product bon 1=1left join t_in_come con a.city_id = c.city_idand b.product_id = c.product_id;

这个SQL有些复杂,使用了两张维表(t_city、t_product)和一张统计结果表(t_in_come)。

假如t_in_come表中保存了每个城市、每个产品的收入汇总数据,但对于那些某些产品并没有产生收入的城市,在表中并没有记录。

此时,如果想返回每个城市、每个产品的收入汇总,包括那些未产生收入的产品、城市组合。

怎么办呢?

在上面的例子中,先将两张维表关联起来,生成城市和产品的所有排列组合,再左关联出对应的收入数据。

在这里,内关联+“1=1”的条件组合,作用其实相当于笛卡尔积。

这种用法,在数据可视化的报表展示场景非常常见。

“1<>1”用于拷贝表定义

除了“1=1”,“1<>1”也有它的用武之地。

假如有一张表a,此时想创建一张与a的表结构完全相同的表b。

一般来说,首先会拷贝a表的create table语句,将a替换成b,然后进行表的创建。

但这样操作,可能会存在2个问题。

一方面,这样操作很麻烦,需要先获取a表的create table语句;

另一方面,如果在运行程序的过程中,a表的表结构并不是完全固定的,无法事先获知a表的create table语句,那也就无法创建出同样结构的b表。

事实上,这时候可以活用SQL中的“create table ** as **”语法。

比如下面的SQL:

create table basselect * from a where 1<>1;

这时,b表完全拷贝a表的定义,而因为使用了“1<>1”的条件,导致select子句查不到任何数据,从而实现了只拷贝结构而不拷贝数据的效果。

“2=2”与“'a'='a'”又是什么鬼?

既然有“1=1”这样的写法,那写“2=2”、“'a'='a'”行不行呢?

事实上,完全可行!

它们的本质都是使用一个相同的常量形成一个相等的判断条件,返回一个永远为true的结果。

类似的,如果要返回一个永远为false的结果,除了使用“1<>1”外,还可以使用“2<>2”与“'a'<>'a'”。

甚至于,还可以使用“1=0”与“'a'<>'b'”。

【微信公众号:跟强哥学SQL】 

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

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

相关文章

Linux网卡命名规则

Linux网卡命名规则 网卡命名 一、为什么需要这个 服务器通常有多块网卡&#xff0c;有板载集成的&#xff0c;同时也有插在PCIe插槽的。Linux系统的命名原来是eth0,eth1这样的形式&#xff0c;但是这个编号往往不一定准确对应网卡接口的物理顺序。 为解决这类问题&…

基于FPGA的图像RGB转CIE-Lab实现,包含testbench和MATLAB辅助验证程序

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1RGB颜色空间 4.2CIE-Lab颜色空间 4.3RGB转CIE-Lab算法原理 5.算法完整程序工程 1.算法运行效果图预览 将FPGA的结果导入到matlab&#xff0c;并和matlab的仿真结果进行对比&#xff1a…

使用TouchSocket适配一个c++的自定义协议

这里写目录标题 说明一、新建项目二、创建适配器三、创建服务器和客户端3.1 服务器3.2 客户端3.3 客户端发送3.4 客户端接收3.5 服务器接收与发送 四、关于同步Send 说明 今天有小伙伴咨询我&#xff0c;他和同事&#xff08;c端&#xff09;协商了一个协议&#xff0c;如果使…

【Hadoop_01】Hadoop介绍与安装

1、Hadoop、HDFS、YARN介绍&#xff08;1&#xff09;Hadoop简介与优势&#xff08;2&#xff09;Hadoop组成&#xff08;3&#xff09;HDFS概述&#xff08;4&#xff09;YARN概述&#xff08;5&#xff09;MapReduce概述 2、安装&#xff08;1&#xff09;Centos7.5软硬件安装…

基于jsp+servlet+mybatis的简易在线选课系统

目录 一.数据库 1.数据库和表的创建 2.数据插入 二.代码实现 1.pojo类 &#xff08;1&#xff09;Course &#xff08;2&#xff09;User &#xff08;3&#xff09;Elective 2.mapper接口 &#xff08;1&#xff09;UserMapper &#xff08;2&#xff09;ElectiveMap…

前端开发实用技巧与经验分享

导语&#xff1a;在前端开发领域&#xff0c;掌握一些实用的技巧和经验可以帮助你更高效地完成任务。本文将分享一些前端开发的实用技巧和经验&#xff0c;帮助你在工作中更好地应对各种挑战。 一、使用开发者工具进行调试和优化 熟练掌握浏览器开发者工具的使用&#xff0c;…

vs 安装 qt qt扩展 改迅雷下载qt

Qt5.14.2安装教程和VS2019中的qt环境配置-CSDN博客 1 安装qt 社区版 免费 Download Qt OSS: Get Qt Online Installer 2 vs安装 qt vs tools 3 vs添加 qt添加 bin/cmake.exe 路径 3.1 扩展 -> qt versions 3.2 4 新版要源码安装 需要自己安装 安装独立安装的旧版 官网…

D. Jumping Through Segments

显然是一个二分答案&#xff0c;关键是怎么搞判断函数&#xff1f; 我们维护合法的降落区间就好了~ // Problem: D. Jumping Through Segments // Contest: Codeforces - Codeforces Round 913 (Div. 3) // URL: https://codeforces.com/contest/1907/problem/D // Memory Li…

car relative position

如何判断你驾驶的车在路上是否居中 车辆相对位置判断&#xff0c;参考 右侧和路边线交点 看右后视镜&#xff0c;看下大概和边线相差多少

SQL手工注入漏洞测试(Sql Server数据库)-墨者

———靶场专栏——— 声明&#xff1a;文章由作者weoptions学习或练习过程中的步骤及思路&#xff0c;非正式答案&#xff0c;仅供学习和参考。 靶场背景&#xff1a; 来源&#xff1a; 墨者学院 简介&#xff1a; 安全工程师"墨者"最近在练习SQL手工注入漏洞&#…

详解nginx优势以及应用场景,实操编译安装和nginx版本平滑升级

目录 一、nginx的特点 那么nginx有哪些特点&#xff1f; 先讲nginx的优点&#xff1a; 缺点&#xff1a; 二、nginx与Apache的区别 三、nginx的应用场景 四、nginx为什么能支持高并发 五、为什么nginx不使用多线程 六、nginx的两种进程分别有什么作用 七、编译安装ngi…

二叉搜索树——模拟

对于一个无穷的满二叉排序树&#xff08;如图&#xff09;&#xff0c;节点的编号是1,2,3&#xff0c;…。对于一棵树根为X的子树&#xff0c;沿着左节点一直往下到最后一层&#xff0c;可以获得该子树编号最小的节点&#xff1b;沿着右节点一直往下到最后一层&#xff0c;可以…

【办公软件】Win10/Win11复制粘贴必须刷新才能显示

更换了新的一台电脑&#xff0c;但是发现新建文件夹或是复制粘贴文件时&#xff0c;不管是在桌面还是在其他磁盘中都需要右击刷新一下才显示。让人很郁闷&#xff0c;比如新建一个文件夹不显示以为没有新建成功&#xff0c;导致重复建了好几个。 如何解决&#xff1f; 使用Wi…

深拷贝和浅拷贝 深克隆和浅克隆

深拷贝和浅拷贝是用来描述对象或者对象数组这种引用数据类型的复制场景的。 浅拷贝&#xff0c;就是只复制某个对象的指针&#xff0c;而不复制对象本身。 这种复制方式意味着两个引用指针指向被复制对象的同一块内存地址。 深拷贝&#xff0c;会完全创建一个一模一样的新对象&…

一步解决 java.io.FileNotFoundException: 找不到文件异常

1.问题描述 java.io.FileNotFoundException: C:\Users\Administrator\AppData\Local\Temp\localhost\uploads\image\20231206\2843cb16-9654-4e52-a757-76e3ca1f80ff.png (系统找不到指定的路径。) 2.原因分析 文件路径中的文件目录不存在 3.解决方案 方案一&#xff1a;如果…

ArrayList扩容机制

1.初始容量 在源码中&#xff0c;ArrayList根据传递参数的不同有三种不同的构造方式 传递一个整数 新创建集合大小等于传递的整数大小空参构造 新创建集合大小为空传递集合 新创建集合大小等于传递的参数集合大小 源码如下&#xff1a; //1.传递一个整数 public ArrayList…

行业研究:2023年中国游戏陪玩行业市场现状分析

近年来随着我国游戏行业的不断发展&#xff0c;我国游戏用户规模也是随着稳步上升&#xff0c;给游戏陪玩行业带来了稳定的用户基础。在用户规模增长的同时&#xff0c;随着经济、文化的快速发展&#xff0c;我国娱乐技能社交也随之逐渐兴起。而作为我国娱乐技能社交比重较大的…

java中乐观锁与悲观锁的区别是什么?

乐观锁和悲观锁是两种处理并发访问的不同策略。 悲观锁&#xff1a; 特点&#xff1a; 假设会发生并发冲突&#xff0c;因此在整个操作过程中都持有锁&#xff0c;防止其他线程访问。实现方式&#xff1a; 使用传统的加锁机制&#xff0c;如 synchronized 关键字或 Lock 接口…

Apache POI操作excel

使用Apache POI 引入坐标 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.16</version> </dependency> <dependency><groupId>org.apache.poi</groupId><artifa…