over函数的使用:

1.可以实现基于什么求和,省去group by:

select xingming,xingbie,COUNT(*) over() as '总人数' from jbxx_xueshengxinxi

2.over()括号里的参数是基于什么汇总,为空则是对所有记录汇总,例如:

select jiqiID,xiaofeizheID,sum(xiaofeijine) over (partition by xiaofeizheID) as '消费者消费总额',sum(xiaofeijine) over() as '总消费金额汇总' from jbxx_xiaofei           /** partition 分割,区分 **/

:row_number的使用等

1.实现行号的自动生成,一般要配合over一起使用可以实现条件排序。

行号条件生成:

select row_number() over(order by xueshengID) as '行号',xueshengID,xingming,xingbie from jbxx_xueshengxinxi;

2.当遇到有相同环境下的数据需要给予相同排名的时候,需要使用rank()

rank():select xueshengID,xingming,xingbie,rank() over(order by xueshengID) as '排名' from jbxx_xueshengxinxi; 

3.dense_rank()密集排名

dense_rank():select xueshengID,xingming,xingbie,dense_rank() over(order by xueshengID) as '排名' from jbxx_xueshengxinxi;

4.按某一条件,分组,ntile(*)

例如三个一组:

select xueshengID,xingming,xingbie,ntile() over(order by xueshengID) as 'ntile分组',dense_rank() over(order by xueshengID) as '密集排名' from jbxx_xueshengxinxi order by xueshengID

5. select a,b,(row_number)/rank() over(partition by a order by b ) nmb from test   分组中排序方式。

between...and...包含边界值;in()查找括号里符合条件的数据;like ‘%x%’通配符模糊查询使用;

case when...then...else...end...函数的使用:

1./**  这里sum可以结合over使用sum() over(partition by country),后面就可以省略group by子句。

在Case函数中Else部分的默认值是NULL,这点是需要注意的地方。

**/

SELECT country,

       SUM( CASE WHEN sex = '1' THEN 

                      population ELSE 0 END) as '男性人口',

       SUM( CASE WHEN sex = '2' THEN 

                      population ELSE 0 END) as '女性人口'

FROM  Table_A

GROUP BY country;

2.利用case when函数变更数据表主键

UPDATE SomeTable

SET p_key = CASE WHEN p_key = 'a'

THEN 'b'

WHEN p_key = 'b'

THEN 'a'

ELSE p_key END

WHERE p_key IN ('a', 'b');

  

3.利用in和exists对数据操作

 SELECT keyCol,

 CASE WHEN keyCol IN ( SELECT keyCol FROM tbl_B )

 THEN 'Matched'

 ELSE 'Unmatched' END Label

 FROM tbl_A;

 --使用EXISTS的时候

 SELECT keyCol,

 CASE WHEN EXISTS ( SELECT * FROM tbl_B

 WHERE tbl_A.keyCol = tbl_B.keyCol )

 THEN 'Matched'

 ELSE 'Unmatched' END Label

 FROM tbl_A;

4.字符串处理函数解析:substring(“字符串”,起始位置,截取长度)

 //注意:sql里下标都是从一开始的

 select xingming,shenfenID,substring("shenfenID",,) from jbxx_xueshengxinxi;

 //left表示从左边截取(从左往右数),right表示从右边截取(从右往左数)

 select xingming,left("shenfenID",) as xx from jbxx_xueshengxinxi    //right也是同理的

 //len可以返回字符串中的字符数,忽略空格;datalength返回字符串实际长度,包括空格

 select isnull(len(shenfenID),) as sfz from jbxx_xueshengxinxi

 //charIndex(" ",xingming) as '出现空格的位置'   可以查询出空格的索引位置。

 //replace(xingming,'xsxm','学生姓名') 可以将字段xingming中的xsxm替换成‘学生姓名’。

 //stuff(shenfenID,6,'2','===')表示,从shenfenID的索引6开始,后面两个字符替换成===

 //upper(),lower()可以进行大小写转换

 //sql去除空格ltrim(rtrim(**)),ltrim从左面去除空格,rtrim从右面去除空格。

 //代替表示语句:

 select *,case when xingming='xx' then '同一个地方' when xingming='rr' then '未知区域' else '其他区域' end '区域级别' from jbxx_xueshengxinxi where xingming='xx'

5.日期和时间数据处理

 -- cast 可以将20160820这种格式转换成日期格式的数据

 select * from jbxx_xueshengxinxi where addtime>=cast('' as datetime)

 -- datepart截取日期字符

 select datepart(year,getdate()) as '年',datepart(month,getdate()) as 'yue',......

 特殊:select datepart(dayofyear,getdate()) as N'一年中的第几天',datepart(weekday,getdate()) as N'一星期中第几天',datepart(week,getdate()) as N'今年的第几周'

 日期计算加减:select DATEADD(DAY,,GETDATE()),DATEDIFF(YEAR,'',GETDATE()) as '现在多大了'

 -- convert()可以指定转换类型,cast直接转换

 select convert(nvarchar,getdate(),) as 'ss'

 --- CONVERT(data_type(length),data_to_be_converted,style)使用的规范,(数据类型,需要转换的数据项,需要转换成的日期格式)

6.sqlserver的表连接

 --->交叉连接(cross join),即笛卡尔积:查询出满足两张表的所有记录数,比如,tb_a有6条记录,tb_b有5条记录,交叉连接就是a*b有30条记录。

 select * from tb_a;  select * from tb_b;      --->select * from tb_a a cross join tb_b b;  

 --->内连接(inner join),必须两边同时满足某一条件的组合

 我们要查询某些产品属于哪个工厂生产的,我们需要将产品明细表和工厂信息表进行内连接。

 --->左连接(left join)、右连接(right join),左连接查询左边都存在,右边数据如果不符合连接条件则不符合项为null;right join正好相反。

7.嵌套查询,相关子查询,聚合等

 子查询:select * from jbxx_xueshengxinxi where addtime=(select MAX(addtime) as '最晚录入时间' from jbxx_xueshengxinxi)

 select zztuijianren,COUNT(*) as '个人总招数' from jbxx_xueshengxinxi where zztuijianren is not null group by zztuijianren order by zztuijianren

8.派生表、CTE\递归CTE

 --->派生表示例:select * from (select addtime,count(*) over(partition by addperson) as zz from jbxx_xueshengxinxi) t

 --->CTE示例:

 with tb_table1 as (select * from jbxx_xueshengxinxi)

 select * from tb_table1           /** 注意,这里的tb_table1查询过一次之后就失效了 **/

 --->有参数的CTE可以多次使用:

 declare @country nvarchar();

 set @country='USA';

 with tb_table2('公司名称','国家名称') as (select company,country from jbxx_guojia where country=@country)

 select * from tb_table2

 --->递归CTE:

 declare @id int;

 set @id='';

 with tb_ss as 

 (

 select empID,name,mgrID from employees where mgrID=@id

 UNION ALL

 select e.empID,e.name,e.mgrID from employees e 

 inner join tb_ss s

 on e.mgrID=s.empID

 )

 select * from tb_ss;

9.视图、集合操作

/** 创建视图 **/

--->create view v_tb

as

(select * from jbxx_xueshengxinxi where xingbie='女');

--->union\union all

可以将两个表合集,union是去重后的结果,而union all没有去重。

--->intersect交集,也是去重后的结果

--->except差集,取出一个表在另一个表不存在的数据

10.透视(pivot)

实现行转列、列转行

11.约束(主键、唯一、非空、检查、外键约束)

 create table tb_st(

 stuid int identity(,),  //编号

 stuname nvarchar() not null,

 gender nvarchar() not null, //非空约束

 constraint ck_gender check(gender in ('男',‘女’)),    //检查约束

 constraint un_name unique(stuname),    //唯一约束

 constraint pk_id primary key (stuid)   //主键约束

 )

12.事物

 begin transaction;

 delete * from jbxx_uesheng where id='';

 delete * from jbxx_use where id='';

 roolback;或者是直接提交--->commit

13.T-SQL编程

 实例:declare @sum nvarchar()

 select @sum=COUNT(*) from jbxx_xueshengxinxi

 print @sum

 --->

 declare @a int

 declare @b int

 set @a=

 set @b=

 while @a<=

 begin

  set @a=@a+

  set @b=@a+@b

 end

 print @b

14.存储过程

 ----->基本用法实例:

 CREATE PROCEDURE table_1

 (

 @num ss

 )

 as

 update db.tb_1

 set kb = kb + @num;

 exec table_1 @num;

 ----->存储过程传出参数实例:

 CREATE PROCEDURE table_2

 (

 @sc int output

 )

 as

 declare @num int

 select @num=count(*) from jbxx_ls

 --传出参数

 set @sc=@num

 go

 --创建一个来存储传出参数的变量

 declare @rc int

 --运行

 exec table_2 @sc=@rc output;

 print @rc;

sqlServer2008技术内幕笔记总结(实用的sql方法总结)的更多相关文章

  1. SQL Server技术内幕笔记合集

    SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...

  2. Microsoft SqlServer2008技术内幕:T-Sql语言基础-读书笔记-单表查询SELECT语句元素

    1.select语句逻辑处理顺序: FORM WHERE GROUP BY HAVING SELECT OVER DISTINCT TOP ORDER BY 总结: 2.FORM子句的表名称应该带上数 ...

  3. Microsoft SqlServer2008技术内幕:T-Sql语言基础-读书笔记1

    一.理论背景:关系模型,其数学理论是集合论和谓词逻辑. 1.集合论:集合定义是把我们直观或思维中确定的,相互间有明确区别的那些对象视为一个整体,这个整体就是集合. 2.谓词逻辑:谓词是判断对象是否有某 ...

  4. Mysql技术内幕-笔记-第二章 数据类型

    第二章 数据类型 Mysql中尽量不要使用UNSIGNED,因为可能会带来一些意想不到的效果 SHOW CREATE TABLE tablename\G;查看表的创建语句 ZEROFILL会将宽度小于 ...

  5. Mysql技术内幕笔记

    mysql由以下几个部分组成: 连接池组件 管理服务和工具组件 sql接口组价 查询分析器组价 优化器组价 缓存(cache)组价 插件式存储引擎 物理文件. 可以看出,MySQL数据库区别于其他数据 ...

  6. Mysql技术内幕-笔记-第三章 查询处理

    第三章 查询处理 逻辑查询处理:(8) SELECT (9) DISTINCT <select_list> (1) FROM <left_table> (3) <join ...

  7. webkit 技术内幕 笔记 三

    浏览器内核及特性 在浏览器中,一个很重要的模块,是将页面转变成可视化的图像结果,这就是浏览器的内核,通常被称作渲染引擎.渲染:就是根据描述或者定义构建数学模型,通过模型生成图像的过程.浏览器的渲染引擎 ...

  8. webkit 技术内幕 笔记 二

    浏览器历史 80年代末-90年代初:worldwideweb(nexus) -- Berners-Lee 1993: Mosaic浏览器,后来叫网景(Netscape)--Marc Andreesse ...

  9. webkit 技术内幕 笔记 一

    目前应用最广的渲染引擎项目-webkit webkit 内部渲染html网页的原理 webkit 内容工作原理 web 的接入口浏览器 浏览器的内核-渲染引擎(像webkit)

随机推荐

  1. Navicat设定mysql定时任务步骤示例

    怎样在Navicat中设置,是数据库按照记录中的日期更新状态字段 其实这个很常用,比如你网站里的某条记录的日期——比如说数据库中某条活动记录的审核日期字段已经过期,亦即当前时间已经超过审核日期,那么定 ...

  2. (转)oracle嵌套表示例

    本文转载自:http://www.cnblogs.com/gisdream/archive/2012/04/13/2445291.html ----嵌套表:就是把一个表中的字段定义为一个表,这个字段表 ...

  3. memcache常见问题及解答

    memcached的cache机制是怎样的? Memcached主要的cache机制是LRU(最近最少用)算法+超时失效.当您存数据到memcached中,可以指定该数据在缓存中可以呆多久Which ...

  4. fatal: read error: Connection reset by peer解决办法

    标签(空格分隔): ceph源码安装,git 问题描述: 源码安装ceph,克隆代码时提示如下错误: [root@localhost ~]# git clone git://github.com/ce ...

  5. Windows可信任路径代码执行漏洞

    乌云里有很多这样的案例,当然在开发过程中也会存在这样的问题 搜索:可信任路径漏洞 调用案例中的描述: Microsoft Windows API使用CreateProcess()函数创建新的进程及其主 ...

  6. JS中有几种数据类型分别是哪几种

    number,string,boolean,null,undefined,object

  7. Android Studio 配置模拟器AVD存放路径(默认在c盘,解决c盘空间不够问题)

    Android Studio 安装之后,默认的会给我们创建一个 Nexus 的模拟器, 这个模拟器的镜像文件放在了 C:\Users\Administrator\.android  中 其中的avd文 ...

  8. 通过键盘上下键 JS事件,控制候选词的选择项

    效果图 JS代码 //上下键 选择事件 searchBackgroud 为样式,只做标记,无实质样式,因为和其他样式不兼容,只能添加CSS $(document).keydown(function ( ...

  9. Hibernate中的一些注解的学习

    1.@Column注解 就像@Table注解用来标识实体类与数据表的对应关系类似,@Column注解来标识实体类中属性与数据表中字段的对应关系. @Column注解一共有10个属性,这10个属性均为可 ...

  10. AngularJS框架

    http://www.runoob.com/angularjs/angularjs-intro.html