解析关于SQL语句Count的一点细节
count语句支持*、列名、常量、变量,并且可以用distinct关键字修饰, 并且count(列名)不会累计null的记录。下面随便用一些例子示范一下count的规则:比如对如下表做统计,所有列这里都用sql_variant类型来表示。
代码如下:
if (object_id ('t_test' )> 0 )
drop table t_test
go
create table t_test (a sql_variant , b sql_variant , c sql_variant )
insert into t_test select 1 , 1 , 'a'
insert into t_test select 1 , getdate (), null
insert into t_test select 'a' , null , 1
insert into t_test select 3 , null , null
insert into t_test select null , null , null
go
select * from t_test
go
select
count (* ) --总数
, count (nullif (1 , 1 )) --永远返回0
, count (a ) --a数量
, count (b) --b数量
, count (distinct a ) --a不重复数量
, count (isnull (b, c )) --b或者c不为null数量
, count (Coalesce (a , b, c )) --a或者b或者c不为null数量
, count (nullif (a , b)) --a不等于b的数量
, count (nullif (isnumeric (cast (a as varchar (38 ))), 0 ))--a是数字的数量
from t_test
相关推荐
-
SQL语句中SUM与COUNT的区别深入分析
SUM是对符合条件的记录的数值列求和 COUNT 是对查询中符合条件的结果(或记录)的个数 例如: 表fruit id name price 1 apple 3.00 2 pear 4.00 select count(price) from fruit; ----执行之后结果为:2 (表示有2条记录) select sum(price) from fruit;---执行之后结果为:7:00(表示各记录price字段之和为7.00)
-
解析关于SQL语句Count的一点细节
count语句支持*.列名.常量.变量,并且可以用distinct关键字修饰, 并且count(列名)不会累计null的记录.下面随便用一些例子示范一下count的规则:比如对如下表做统计,所有列这里都用sql_variant类型来表示. 复制代码 代码如下: if (object_id ('t_test' )> 0 ) drop table t_test go create table t_test (a sql_variant , b sql_variant , c sql_varia
-
SqlParser 一个利用正则表达式解析单句SQL的类
先看要解析的样例SQL语句: 复制代码 代码如下: select * from dual SELECT * frOm dual Select C1,c2 From tb select c1,c2 from tb select count(*) from t1 select c1,c2,c3 from t1 where condi1=1 Select c1,c2,c3 From t1 Where condi1=1 select c1,c2,c3 from t1,t2 where condi3=3
-
SQL语句的各个关键字的解析过程详细总结
由于最近需要做一些sql query性能提升的研究,因此研究了一下sql语句的解决过程.在园子里看了下,大家写了很多相关的文章,大家的侧重点各有不同.本文是我在看了各种资料后手机总结的,会详细的,一步一步的讲述一个sql语句的各个关键字的解析过程,欢迎大家互相学习. SQL语句的解析顺序 简单的说一个sql语句是按照如下的顺序解析的: 1. FROM FROM后面的表标识了这条语句要查询的数据源.和一些子句如,(1-J1)笛卡尔积,(1-J2)ON过滤,(1-J3)添加外部列,所要应用的对象.F
-
SQL语句执行深入讲解(MySQL架构总览->查询执行流程->SQL解析顺序)
前言: 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了. 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序来探讨一下其中的知识. 一.MySQL架构总览: 架构最好看图,再配上必要的说明文字. 下图根据参考书籍中一图为原本,再在其上添加上了自己的理解. 从上图中我们可以看到,整个架构分为两层,上层是MySQLD的被称为的'SQL Layer',下层是各种各样对上提供接口的存储引擎,被称为'Storage Engin
-
ORACLE SQL语句优化技术要点解析
操作符优化: IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格. 但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别: ORACLE试图将其转换成多个表的连接,如果转换不成功则先执行IN里面的子查询,再查询外层的表记录,如果转换成功则直接采用多个表的连接方式查询. 由此可见用IN的SQL至少多了一个转换的过程.一般的SQL都可以转换成功,但对于含有分组统计等方面的SQL就不能转换了. 推荐方案:
-
php实现解析xml并生成sql语句的方法
本文实例讲述了php实现解析xml并生成sql语句的方法.分享给大家供大家参考,具体如下: php解析xml有很多种办法,文档中有,搜索一下就一大把的. 今天遇到一个需求:将某个xml中的节点属性提取出来,然后更新数据库某一表中的字段. 思路: 解析XML,获取所有的节点属性 –> 循环节点集合,获取对应的属性 –> 拼接sql字符串存入一数组 –> 将数组转为字符串保存于某一文件中 这里使用了xpath,在写代码的过程中遇到两个问题: 1.xml的史路径属性为D:\xx\-时load不
-
Mybatis中的动态SQL语句解析
这篇文章主要介绍了Mybatis中的动态SQL语句解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Mybatis中配置SQL有两种方式,一种是利用xml 方式进行配置,一种是利用注解进行配置. Mybatis使用注解配置SQL,但是由于配置功能受限,而且对于复杂的SQL而言可读性很差,所以很少使用. Mybatis常用xml配置的方式,使用xml的几个简单的元素,便能完成动态SQL的功能,大量的判断都可以在mybaties的映射xml里面配
-
MyBatis Log 插件无法显示SQL语句的原因解析
Mybatis有什么用 前两天跟阿里的大牛聊天,他讲到对于性能要求高,需求变化多的互联网项目来说,用在sql优化上的开发时间是大头,有时候代码写出来一小时,优化反反复复可能要几个星期,这时候Mybatis这种配置比较灵活的框架优势就显现了!Mybatis为什么在国内这么流行? 1. 什么是Mybatis? MyBatis是支持定制化sql.存储过程以及高级映射的优秀的持久层框架.MyBatis避免了几乎所有的JDBC代码和手工设置参数以及抽取结果集.MyBatis使用简单的XML或注解来配置和映
-
SQL语句解析执行的过程及原理
目录 一.sqlSession简单介绍 二.获得sqlSession对象源码分析 三.SQL执行流程,以查询为例 一.sqlSession简单介绍 拿到SqlSessionFactory对象后,会调用SqlSessionFactory的openSesison方法,这个方法会创建一个Sql执行器(Executor),这个Sql执行器会代理你配置的拦截器方法. 获得上面的Sql执行器后,会创建一个SqlSession(默认使用DefaultSqlSession),这个SqlSession中也包含了C
-
解析如何用SQL语句在指定字段前面插入新的字段
create proc addcolumn@tablename varchar(30), --表名@colname varchar(30), --要加的列名@coltype varchar(100), --要加的列类型@colid int --加到第几列as declare @colid_max intdeclare @sql varchar(1000) --动态sql语句--------------------------------------------------if not exist
随机推荐
- 移除AngularJS下URL中的#字符的方法
- MYSQL 左连接右连接和内连接的详解及区别
- jQuery中extend函数的实现原理详解
- Java基于Runtime调用外部程序出现阻塞的解决方法
- python实现百度关键词排名查询
- JS实现六边形3D拖拽翻转效果的方法
- js点击任意区域弹出层消失实现代码
- 基于PHP导出Excel的小经验 完美解决乱码问题
- Linux 中(加、减、乘、除)实例详解
- PHP 强制下载文件代码
- javascript 缓冲效果 实现代码
- Java多线程之中断线程(Interrupt)的使用详解
- mysql 5.7以上版本安装配置方法图文教程(mysql 5.7.12\mysql 5.7.13\mysql 5.7.14)
- 实现了基于TCP的Java Socket编程实例代码
- 利用计划任务和VBS脚本实现自动WEB共享文件夹里的文件
- toggle()隐藏问题的解决方法
- Android开发技巧之永不关闭的Toast信息框(长时间显示而非系统关闭)
- javascript实现的网页标题变换效果(网页游戏广告常用)
- Android中的Fragment类使用进阶
- memcached的学习过程