不知道你们在开发中有没有看到过这样的sql: .. where 1=1count(1)select 1 ..   

        你们知道他们分别有什么意义吗?

1、count(1) 和count(列名)、count(*) 类似,目的都是计数

从执行结果来说:

count(1)和count(*)之间没有区别,因为count(*) 和count(1)都不会去过滤空值,但count(列名)就有区别了,因为count(列名)会去过滤空值。

从执行效率来说:

(1)如果列为主键,count(列名)效率优于count(1) ;如果列不为主键,count(1)效率优于count(列名) ;

(2)如果表中存在主键,count(主键列名)效率最优;

(3)如果表中只有一列,则count(*)效率最优;如果表有多列,且不存在主键,则count(1)效率优于count(*);
(这个在我的原文《大数据面试常见问题(一)-Oracle》中有讲到过,有兴趣的可以看看)

2、select 1 from emp 与 select * from emp 与 select  anycol (表集合中的任意一行) from emp

从结果上来说:

三者是没有任何差别的,都是查看是否有记录,一般是作条件用的。

select 1 from 中的1是一常量,查到的所有行的值都是它。

但从效率上来说:

1>anycol>*,因为 select 1 ..不用查字典表。

3、select * from emp where 1=1; 的作用

(1)where 1=1 是为了应付多变的查询条件,为了避免where 关键字后面的第一个词直接就是 “and”而导致语法错误,等效于:select * from emp;

(2)其目的就只有一个,where 的条件为永真,得到的结果就是未加约束条件的。

--一个模糊查询可能有a, b, c, d 约束,也可能没有,那该如何处理呢? String sql  =  "select a,b from table_a  where 1=1 ";
if(!b.equals(""))sql += "and  b='"+b+"'";​

当用户选择了b (  假如b值为qwe ) 
结果就是:String sql  =  ''select a,b from table_a  where 1=1 and  a= 'qwe';

但是当用户没有选择b ,那b就是一个空值 

结果就是:String sql  =''select a,b from table_a  where 1=1''; 运行也不会出错,相当于没有限制b这个条件。

但是如果没有1=1的条件,则l String sql  =''select a,b from table_a  where'' ;  这样就会报错。

参考:

(1)CSDN博主「gerrynj」的原创文章,
原文链接:https://blog.csdn.net/gerrynj/article/details/4675837;

(2)CSDN博主「心歌技术」的原创文章,

原文链接:https://blog.csdn.net/qq_23994787/article/details/79045768

SQL语言中,一个有灵魂的数字 :1相关推荐

  1. sql 语言中 when case 用法

    sql语言中有没有相似C语言中的switch case的语句?? 没有,用case when 来取代就行了. 比如,以下的语句显示中文年月 select getdate() as 日期,case mo ...

  2. 1.实现sql语言中DQL语言,实现简单查询、条件查询、排序查询等。

    1.实现sql语言中DQL语言,实现简单查询.条件查询.排序查询等. (1)检索grade表当中的所有信息. (2)检索grade表数学成绩大于100的所有人信息. <%@ page langu ...

  3. sql 语言中 when case 用法

    sql语言中有没有相似C语言中的switch case的语句?? 没有,用case   when   来取代就行了.              比如,以下的语句显示中文年月           sel ...

  4. 【编译原理】为什么编程语言中,标识符不能以数字开头?

    标识符不能以数字为开头, 是为了简化词法解析器设计和实现,规避词法解析中以数字开头的变量与数字解析冲突的问题. 如果两种类型的词,如果起始符号不同,那么可以很容易把二者区分开:如果起始符号相同,那么以 ...

  5. c语言虚参传递字符串,c语言中,一个函数作为另一个函数的虚参是什么意思? 先谢了...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 呵呵,这里是用来传递参数的,但是他传递的是一个指针,但是这个指针不是指向一个值的地址.而是指向一个函数的首地址,这个函数是什么格式呢?就由申明的时候一起给 ...

  6. sql语言中,datepart和datename的区别

    Datepart():返回代表指定日期的指定日期部分的整数 语法:Datepart(datepart,date) 返回类型:int DateName():返回代表指定日期的指定日期部分的字符串 语法: ...

  7. Hive中类SQL语言中的where 与having

    1.用的地方不一样 where可以用于select.update.delete和insert...into语句中.    having只能用于select语句中 2.执行的顺序不一样 where 子句 ...

  8. 数据库SQL语言中,foreign key和references的区别是什么?

    假设两张表,表1(学号,姓名,性别),学号为主键. 表2(学号,课程,成绩). 可以为表2的学号定义外键(FOREIGN KEY),该外键的取值范围参照(REFERENCES)表1的学号 CONSTR ...

  9. mysql中更新的命令是_MySQL 语言中,更新表数据的命令是( )。_学小易找答案

    [简答题]MySQL 语言中包含数都定义语言.数据操纵语言和数据控制语言,分别有哪些功能? [单选题]查询员工工资信息时,结果按工资降序排列,正确的是( ). [简答题]arrayList测验 [填空 ...

最新文章

  1. freeradius 启动报错Refusing to start with libssl version OpenSSL 1.0.1
  2. OpenGL相机控制之二
  3. unet脑肿瘤分割_2D UNet3+ Pytorch实现 脑肿瘤分割
  4. 浅析phpwind9.0之登陆机制
  5. 第四单元用计算机写作,计算机复习题
  6. usbserialcontroller驱动安装不了_win10-有NVIDIA独显提示未安装控制面板的离线安装方式...
  7. JasperReports项目中的应用
  8. 电商并没有给我们创造一个就业机会
  9. 石、鋏、布~ 最疯狂的打斗场面,莫要错过,iphone手机游戏
  10. java 字符单词匹配_如何使用Java RegEx匹配单词字符?
  11. 记录成功通过CSP接口获取Ukey的X509数字证书过程
  12. ActiveMQ在win7下启动失败解决方案
  13. 你的Web系统真的安全吗?
  14. PHP之linux(一)linux基础
  15. [超详细]Echarts+vue+百度地图 动态实现城市疫情地图
  16. vulnhub靶机-DC2-Writeup
  17. 常熟理工php实验三_常熟理工Oracle实验三_高燕教授
  18. 2013年10月17日_羊豆豆_新浪博客
  19. 哈工大计算机系统大作业——hello P2P
  20. 管理系统中计算机应用自考本科,重庆自考管理系统中计算机应用本科模拟试题 _ 重庆自考网...

热门文章

  1. 2005年我研读了的书籍
  2. matlab 中 ROI区域的提取求解,谢谢大家
  3. 王爽《汇编语言》读书笔记——第二章
  4. 【MATLAB】曲柄摇杆机构摇杆3运动方程分析
  5. 学会拒绝 (贾平凹)
  6. Ajax-axios拦截器
  7. 二手房源信息数据分析与可视化
  8. Android:Fragment详细介绍 使用方法解析
  9. 03-07 创建和编辑AutoCAD实体(七) 向图形中添加文字(3)使用多行文字
  10. vue项目执行npm run dev 后没有自动弹出网页问题