文章目录

  • 1. where 1 <> 1
  • 2. where 1 = 1
  • 3. 不用where 1=1 在多条件查询中的困扰
1. where 1 <> 1
where 1 = 1;--永远为真
where 1 <> 1,--永远为假

他俩的作用主要是一个条件永远为真,一个永远为假,所以这里只是说 1= 1的情况,但是不限于这样,其它永远为真/假的条件语句也同理
where 1 <> 1 用于只复制表结构,不取数据

create table t2 as select * from t1 where 1 <> 1;

分析:
(1)create table t2 as select * from t1,这个动作就会先将t1 的表结构,也就是有哪些字段啊复制到 t1,此时表框架有了,还没内容;

(2)没有 where 1 <> 1 条件的话,就是将t1表整个复制给t2,一模一样的字段和数据,这个问题不大;

(3)加了 where 1 <> 1,这个条件永远为假,所以用 t1表中的数据永远不会复制到 t2里去,此时的结果就是,t2 就是一个空架子;

明白了吧,这样读取表的结构,而不用考虑表中的数据,节省了内存,也可以不用保存结果集,用于快速建表。

2. where 1 = 1

where 1 = 1 用于动态SQL,规范语句
where 1=1; 这个条件始终为True,在不定数量查询条件情况下,1=1可以很方便的规范语句。主要用于以下这种形式的动态多条件查询语句

select name,... from table1
where 1 = 1 and condition1 and condition2 and ...
3. 不用where 1=1 在多条件查询中的困扰

举个例子,如果您做查询页面,并且,可查询的选项有多个,同时,还让用户自行选择并输入查询关键词,那么,按平时的查询语句的动态构造,代码大体如下:

tring MySqlStr=”select * from table where”;if(Age.Text.Lenght>0){MySqlStr=MySqlStr+“Age=“+“‘Age.Text’“;}if(Address.Text.Lenght>0){MySqlStr=MySqlStr+“and Address=“+“‘Address.Text’“;}

①种假设
如果上述的两个IF判断语句,均为True,即用户都输入了查询词,那么,最终的MySqlStr动态构造语句变为:

MySqlStr=”select * from table where Age=‘18’ and Address=‘云南省文山州广南县小波吗村’”

可以看得出来,这是一条完整的正确的SQL查询语句,能够正确的被执行,并根据数据库是否存在记录,返回数据。

②种假设
如果上述的两个IF判断语句不成立,那么,最终的MySqlStr动态构造语句变为:
MySqlStr=”select * from table where“
4. 使用 where 1=1 的好处
假如我们将上述的语句改为:

string MySqlStr=”select * from table where 1=1 ”;if(Age.Text.Lenght>0){MySqlStr=MySqlStr+“and Age=“+“‘Age.Text’“;}if(Address.Text.Lenght>0){MySqlStr=MySqlStr+“and Address=“+“‘Address.Text’“;}

现在,也存在两种假设
①种假设
如果两个IF都成立,那么,语句变为:

MySqlStr=”select * from table where 1=1 and Age=‘18’ and Address=‘云南省文山州广南县小波吗村’”,很明显,该语句是一条正确的语句,能够正确执行,如果数据库有记录,肯定会被查询到。

②种假设
如果两个IF都不成立,那么,语句变为:

MySqlStr=”select * from table where 1=1”,现在,我们来看这条语句,由于where 1=1 是为True的语句,因此,该条语句语法正确,能够被正确执行,它的作用相当于:MySqlStr=”select * from table”,即返回表中所有数据。

言下之意就是:如果用户在多条件查询页面中,不选择任何字段、不输入任何关键词,那么,必将返回表中所有数据;如果用户在页面中,选择了部分字段并且输入了部分查询关键词,那么,就按用户设置的条件进行查询。

说到这里,其实,where 1=1的应用,不是什么高级的应用,也不是所谓的智能化的构造,仅仅只是为了满足多条件查询页面中不确定的各种因素而采用的一种构造一条正确能运行的动态SQL语句的一种方法。

SQL中where 1 = 1的用处相关推荐

  1. SQL Server中CLUSTERED INDEX的特殊用处

    SQL Server中CLUSTERED INDEX的特殊用处 背景 CLUSTERED INDEX的定义 简单实验 总结 背景 在查看SQL Server数据库项目的存储过程中,看到了如下2行紧邻的 ...

  2. 博图如何读取mysql数据_博途使用小结:从SQL中读取数据并给变量赋值

    1.建立内部变量TON_Report,VF01_Runtime,JC01_Runtime,VF05_Runtime,数据类型为Real,长度为2 2.建立查询按钮,点击查询按钮时读取SQL中的数据并赋 ...

  3. SQL中的笛卡尔你真的懂吗?

    原文链接:https://www.cnblogs.com/CareySon/archive/2010/04/13/1711095.html 什么是笛卡尔积? 笛卡尔积是指在数学中,两个集合X和Y的笛卡 ...

  4. sql中日期函数的用法

    sql中日期函数的用法   <script src="http://blog.csdn.net/count.aspx?ID=1920773&Type=Rank" ty ...

  5. sql中笛卡尔积现象以及运用

    select studentname, Subjectname   from Student ,subject 当查询这两张表的时候,结果可以是一张表中的数据条数乘以另一张表中的数据条数 笛卡尔积,又 ...

  6. Oracle在Pl/sql中的存储过程----zhoudianzhang

    Oracle 存储过程 目录 Oracle 存储过程... 1 Oracle存储过程基础知识... 1 Oracle存储过程的基本语法... 2 关于Oracle存储过程的若干问题备忘... 4 1. ...

  7. if函数写并列条件 sql,SQL中的if函数

    今天查bug的时候发现了sql里面有如下语句 其中SUM的意思浅显易懂,求和嘛.IF也十分清晰:判断嘛.而且if的第一个参数很明显就是条件,那另外两个参数是什么呢? 查了一下资料: 语法:IF(exp ...

  8. SQL 中循环、for循环、游标

    我们使用SQL语句处理数据时,可能会碰到一些需要循环遍历某个表并对其进行相应的操作(添加.修改.删除),这时我们就需要用到咱们在编程中常常用的for或foreach,但是在SQL中写循环往往显得那么吃 ...

  9. SQL中的case when then else end用法

    2019独角兽企业重金招聘Python工程师标准>>> Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sexWHEN '1' THEN ...

最新文章

  1. 以电商网站为例,谈大型分布式架构设计与优化
  2. 高中理科不好学计算机,高一理科很差但想学理咋办
  3. 小试牛刀之Kolla单节点部署
  4. 案例:多任务udp聊天器
  5. 【Ubuntu 休眠】设置合上笔记本盖子不休眠的方法
  6. oracle中imp命令详解,Oracle使用imp命令导入数据详解
  7. swiftui改变图片尺寸_SwiftUI中的等轴测视图
  8. 深入理解什么是端口(port)
  9. 开优步认识各色各样的人,人生需要这样的新鲜体验!
  10. 云服务平台重构点 @Arthur @Gyb
  11. ERROR | Corrupt JPEG data: 111 extraneous bytes before marker 0xd9...
  12. マーケティング用語の英訳一覧(Glossary of marketing terms)
  13. css_radius-corner语法分析
  14. 39.(前端)欢迎页面的设置
  15. ORACLE (5): buffer cache(CBC LATCH实验)
  16. mysql 授权 all_mysql使用grant ALL privileges命令给用户授权
  17. 读崔玉涛-直面小儿发热
  18. 【紧急】Log4j又发新版2.17.0,只有彻底搞懂漏洞原因,才能以不变应万变
  19. Windows常用快捷键,及控制台cmd的常用命令
  20. 使用Javascript制作声音按钮 1

热门文章

  1. 此人数学15分考入清华,28岁成清华教授,其家族出了20多位院士
  2. 从职场新人到企业高管,她是怎么做到的?
  3. 深度学习(2)--常见概率分布(2)
  4. go tcp连接_TCP漫谈之keepalive和time_wait
  5. 有向图的邻接表描述 c++
  6. HBase读链路分析
  7. 双11特刊|十年磨一剑,云原生多模数据库Lindorm 2021双11总结
  8. 下一代云原生应用制品管理平台,容器镜像服务企业版优惠进行时
  9. 开发者说:如何使用插件降低上传文件部署服务的复杂度
  10. 一键托管,阿里云全链路追踪服务正式商用:成本仅自建1/5或更少