SQL语言中,一个有灵魂的数字 :1
不知道你们在开发中有没有看到过这样的sql: .. where 1=1、count(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相关推荐
- sql 语言中 when case 用法
sql语言中有没有相似C语言中的switch case的语句?? 没有,用case when 来取代就行了. 比如,以下的语句显示中文年月 select getdate() as 日期,case mo ...
- 1.实现sql语言中DQL语言,实现简单查询、条件查询、排序查询等。
1.实现sql语言中DQL语言,实现简单查询.条件查询.排序查询等. (1)检索grade表当中的所有信息. (2)检索grade表数学成绩大于100的所有人信息. <%@ page langu ...
- sql 语言中 when case 用法
sql语言中有没有相似C语言中的switch case的语句?? 没有,用case when 来取代就行了. 比如,以下的语句显示中文年月 sel ...
- 【编译原理】为什么编程语言中,标识符不能以数字开头?
标识符不能以数字为开头, 是为了简化词法解析器设计和实现,规避词法解析中以数字开头的变量与数字解析冲突的问题. 如果两种类型的词,如果起始符号不同,那么可以很容易把二者区分开:如果起始符号相同,那么以 ...
- c语言虚参传递字符串,c语言中,一个函数作为另一个函数的虚参是什么意思? 先谢了...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 呵呵,这里是用来传递参数的,但是他传递的是一个指针,但是这个指针不是指向一个值的地址.而是指向一个函数的首地址,这个函数是什么格式呢?就由申明的时候一起给 ...
- sql语言中,datepart和datename的区别
Datepart():返回代表指定日期的指定日期部分的整数 语法:Datepart(datepart,date) 返回类型:int DateName():返回代表指定日期的指定日期部分的字符串 语法: ...
- Hive中类SQL语言中的where 与having
1.用的地方不一样 where可以用于select.update.delete和insert...into语句中. having只能用于select语句中 2.执行的顺序不一样 where 子句 ...
- 数据库SQL语言中,foreign key和references的区别是什么?
假设两张表,表1(学号,姓名,性别),学号为主键. 表2(学号,课程,成绩). 可以为表2的学号定义外键(FOREIGN KEY),该外键的取值范围参照(REFERENCES)表1的学号 CONSTR ...
- mysql中更新的命令是_MySQL 语言中,更新表数据的命令是( )。_学小易找答案
[简答题]MySQL 语言中包含数都定义语言.数据操纵语言和数据控制语言,分别有哪些功能? [单选题]查询员工工资信息时,结果按工资降序排列,正确的是( ). [简答题]arrayList测验 [填空 ...
最新文章
- freeradius 启动报错Refusing to start with libssl version OpenSSL 1.0.1
- OpenGL相机控制之二
- unet脑肿瘤分割_2D UNet3+ Pytorch实现 脑肿瘤分割
- 浅析phpwind9.0之登陆机制
- 第四单元用计算机写作,计算机复习题
- usbserialcontroller驱动安装不了_win10-有NVIDIA独显提示未安装控制面板的离线安装方式...
- JasperReports项目中的应用
- 电商并没有给我们创造一个就业机会
- 石、鋏、布~ 最疯狂的打斗场面,莫要错过,iphone手机游戏
- java 字符单词匹配_如何使用Java RegEx匹配单词字符?
- 记录成功通过CSP接口获取Ukey的X509数字证书过程
- ActiveMQ在win7下启动失败解决方案
- 你的Web系统真的安全吗?
- PHP之linux(一)linux基础
- [超详细]Echarts+vue+百度地图 动态实现城市疫情地图
- vulnhub靶机-DC2-Writeup
- 常熟理工php实验三_常熟理工Oracle实验三_高燕教授
- 2013年10月17日_羊豆豆_新浪博客
- 哈工大计算机系统大作业——hello P2P
- 管理系统中计算机应用自考本科,重庆自考管理系统中计算机应用本科模拟试题 _ 重庆自考网...