sqlServer2008技术内幕笔记总结(实用的sql方法总结)
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方法总结)的更多相关文章
- SQL Server技术内幕笔记合集
SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...
- Microsoft SqlServer2008技术内幕:T-Sql语言基础-读书笔记-单表查询SELECT语句元素
1.select语句逻辑处理顺序: FORM WHERE GROUP BY HAVING SELECT OVER DISTINCT TOP ORDER BY 总结: 2.FORM子句的表名称应该带上数 ...
- Microsoft SqlServer2008技术内幕:T-Sql语言基础-读书笔记1
一.理论背景:关系模型,其数学理论是集合论和谓词逻辑. 1.集合论:集合定义是把我们直观或思维中确定的,相互间有明确区别的那些对象视为一个整体,这个整体就是集合. 2.谓词逻辑:谓词是判断对象是否有某 ...
- Mysql技术内幕-笔记-第二章 数据类型
第二章 数据类型 Mysql中尽量不要使用UNSIGNED,因为可能会带来一些意想不到的效果 SHOW CREATE TABLE tablename\G;查看表的创建语句 ZEROFILL会将宽度小于 ...
- Mysql技术内幕笔记
mysql由以下几个部分组成: 连接池组件 管理服务和工具组件 sql接口组价 查询分析器组价 优化器组价 缓存(cache)组价 插件式存储引擎 物理文件. 可以看出,MySQL数据库区别于其他数据 ...
- Mysql技术内幕-笔记-第三章 查询处理
第三章 查询处理 逻辑查询处理:(8) SELECT (9) DISTINCT <select_list> (1) FROM <left_table> (3) <join ...
- webkit 技术内幕 笔记 三
浏览器内核及特性 在浏览器中,一个很重要的模块,是将页面转变成可视化的图像结果,这就是浏览器的内核,通常被称作渲染引擎.渲染:就是根据描述或者定义构建数学模型,通过模型生成图像的过程.浏览器的渲染引擎 ...
- webkit 技术内幕 笔记 二
浏览器历史 80年代末-90年代初:worldwideweb(nexus) -- Berners-Lee 1993: Mosaic浏览器,后来叫网景(Netscape)--Marc Andreesse ...
- webkit 技术内幕 笔记 一
目前应用最广的渲染引擎项目-webkit webkit 内部渲染html网页的原理 webkit 内容工作原理 web 的接入口浏览器 浏览器的内核-渲染引擎(像webkit)
随机推荐
- MinGW下载并配置gcc/g++编译环境
本文将讲解如何下载MinGW并配置gcc\g++编译环境 一.下载MinGW 在MinGW官网中下载“mingw-get-setup.exe” 官网传送门:http://www.mingw.org/ ...
- java代码 求和1+1/2+1/3+1/4+1/5+1/6+.......+1/n 的值~~~~
总结:很简单的练习: s=1+1/2+1/3+1/4+1/5+1/6+.......+1/n的值:注意这里的s是float型,绝对记住不能留整数型 即s+=1/i; package com.c2; i ...
- 2015 浙江省赛B Team Formation (技巧,动归)
Team Formation For an upcoming programming contest, Edward, the headmaster of Marjar University, is ...
- Java-Maven-Runoob:Maven NetBeans
ylbtech-Java-Maven-Runoob:Maven NetBeans 1.返回顶部 1. Maven NetBeans NetBeans 6.7 及更新的版本已经内置了 Maven.对于以 ...
- 测试php中的curl是否可使用
<?php $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,"http://www.baidu.com"); curl_seto ...
- (转)编写 DockerFile
这几天在研究怎样制作docker image. 其中使用dockerfile是一种可记录制作image的过程的并且是容易重复使用的一种方式.在园子里看到了一篇好文,于是分享到这里~~ 原文链接: ht ...
- 移植OpenWrt到CuHead Pro WiFi
移植OpenWrt到CuHead Pro WiFi Posted by: zou, baozhu , 三月 13, 2014 CuHead Pro是一款路由器开发板,下面是开发板的配置信息. 名称 型 ...
- vue-cli脚手架config目录下index.js配置文件详解
此文章介绍vue-cli脚手架config目录下index.js配置文件 此配置文件是用来定义开发环境和生产环境中所需要的参数 关于注释 当涉及到较复杂的解释我将通过标识的方式(如(1))将解释写到单 ...
- maven项目依赖包问题
问题 maven传递依赖 解决方案 前段时间,开发中遇到一个关于maven依赖包的问题:由于业务需要,支付网关对账代码中的slf4j-api包需要更新,原包为1.5.8版本,需要更新到1.6.4版 ...
- Python 小知识点(1)
1.Python命名规则------>下划线连接 girl_of_wfb="lgl" 2.常量-----名称全大写->WFB="WFaceBoss&qu ...