今天学习SQLserver 连接以及开窗函数..加油!

1、复习:查询(检索)
-》筛选列
-》筛选行:distinct top where
运算符与关键字:比较运算符,逻辑运算符,between...and...,like '%_[^]'
-》分组与聚合函数
group by ... having ...
max,min,avg,sum,count
-》系统内置函数
类型转换函数:cast(值 as 类型) convert(目标类型,值[,格式])
字符串函数:len()
日期时间函数:getdate() datediff(关键字,日期1,日期2) datepart(关键字,日期)
-》联合查询:将多个结果集合并成一个结果集
要求:列相同,列类型相同
union:会排序,会去重复
union all:所有数据都取出来,并且不排序
-》连接查询:结果集中包含的数据分布于多个表中,则需要将多个表根据关系连接起来查询
何时使用连接查询?
关键:找出多个表的关系
join on
内连接inner join

2、自连接
分公司-company
cid
名称
1 总部
部门-department
did
名称
属于某个分公司cid
1 北京分公司 1
事业部-depart
deit
名称
属于某个部门did
->观察发现表的结构非常类似,于是考虑将这些表合成一张表
->组织架构表groups
gid
gname
gparent--对于没有上级的信息,可以使用0来填充
-》特点:关系列的值引用的本表中主键列信息
-》示例数据
1 总部 0
2 北京分公司 1
3 上海分公司 1
4 深圳分公司 1
5 广州分公司 1
6 .net部门 2
7 .net部门 5
-》查询部门及所对应的公司的名称
3、外连接
-》left join:左表中的信息全部出现,右表中的信息必须能够匹配的才出现
未匹配的项使用null填充
-》right join:右表中的信息全部出现,左表中的信息必须能够匹配的才出现
未匹配的项使用null填充
-》full join:所有数据都会出现,不匹配的项使用null填充
-》只要想做连接查询,必须分析出两个表间的关系

4、t-sql
-》case:用于在select子句中进行判断
两种格式:判断相等,判断不等
-》全局变量
@@identity:与一个insert语句连用,表示最新生成的标识
@@error:返回最近一个语句的错误编号,如果没有错误返回0,结合if替代try---catch的使用
-》开窗函数over
用途一:排序order by ,row_number
用途二:划区partition by,结合聚合函数针对某部分数据进行汇总
-》视图
用于存储封装一个select语句
使用:和使用表一样
注意:视图并不是一个存储数据的容器,而只是存储了一个查询
-》事务

在sqlserver中事务是自动提交的
通过set implicit_transactions on阻止自动提交
--开启事务:begin tran
--提交事务:commit tran
--回滚事务:rollback tran
-》存储过程
功能:完成一段代码的封装
语法:create proc 名称
参数列表
as
代码段
调用:exec 名称 参数列表
知识1:可以使用output修饰参数
知识2:可以使用默认值,注意需要将最后的参数设置成默认值
-》索引
作用:提高查询速度
注意:不是越多越好,会损耗存储空间
应用:对于出现在where子句中的列建立索引

下面是学习的代码

declare @uname nvarchar(10)='sk'
set @uname='yzk'
print @uname
select @uname

--全局变量
select @@VERSION
select * from Employee

insert into Employee(eName,eCode,edid) values('zjy',14,4)
select @@IDENTITY

insert into Employee values('yhb')
print @@error

print @@rowcount
---================if语句
--判断一个值是奇数还是偶数
declare @i int=10
if(@i%2=0)
begin
print '偶数'
end
else
begin
print '奇数'
end

--===========循环语句
--求1-100的和
declare @j int=1
declare @sum int=0
while(@j<=100)
begin
set @sum+=@j
set @j+=1
end
print @sum

--=============开窗函数
--排序
select *,RANK() over(order by tenglish desc) from TblScore
--order by tEnglish desc
--划区
select * from TblOrders
--传统的统计汇总
--这个语句表示对整个数据进行划区
select oname,SUM(ocount)
from TblOrders
group by oname

select *,SUM(ocount) over(partition by oname)
from TblOrders
--36
select *,SUM(ocount) over() from TblOrders
--196
--排号
select * from TblOrders
delete from TblOrders where oname='糖果'
select *,row_number() over(order by oprice desc)
from TblOrders
--
select distinct oname,oprice,max(ocount) over(partition by oname)
from TblOrders
--分页,要求3条数据显示一页
select * from(
select *,row_number() over(order by oprice desc) as num
from TblOrders
) t1
where num between 4 and 6
--找各班中城市人最多的城市名称
use ItCastCn

select * from TblStudent

select distinct tSClassId,MAX(counter) over(partition by tsclassid) from(
select distinct tSClassId,tSAddress,COUNT(*) over(partition by tsaddress) as counter
from TblStudent
) t1
--
select tSAddress ,tSClassId from(
select rank() OVER(partition by tsclassid ORDER BY num DESC )AS number,* from
(
select tSAddress,tSClassId ,count(tSAddress) as num
from TblStudent
group by tSClassId,tSAddress
)a
)b where number=1

--============视图
use hem09
select *,row_number() over(order by oprice desc) as num
from TblOrders

create view ordersWithNum
as
select *,row_number() over(order by oprice desc) as num
from TblOrders

select * from ordersWithNum
--查看视图中的代码
exec sp_helptext ordersWithNum

--=============事务
--比如订火车票
--下一个订单,这个订单中,包含多个购买信息
--orders,orders_detail
--合作事务来处理这种模型
--关键字:tran[saction]
--开启事务:begin tran
--提交事务:commit tran
--回滚事务:rollback tran
--示例
select * from TblOrders
declare @errornum int=0
begin tran
insert into tblorders values('五粮液',2,300)
set @errornum+=@@error
insert into TblOrders values('包子',3,1)
set @errornum+=@@error
if(@errornum>0)
begin
rollback tran
end
else
begin
commit tran
end

select * from TblOrders

begin tran
insert into tblorders values('ee',100,300)
--commit tran
rollback tran

set implicit_transactions on
--===============存储过程
select ' abc '
select rtrim(LTRIM(' abc '))
--'abc'

--存储过程完成一段sql代码的封装
create proc trim
--参数列表,多个间用逗号分隔
@str varchar(10)
as
--自定义代码段
declare @str1 varchar(10)
set @str1=LTRIM(RTRIM(@str))
print @str1

--使用存储过程
exec trim ' abc '
--'abc'
--===带输出参数的存储过程
--求两个数的和
create proc sum1
@num1 int,
@num2 int,
@result int output--表示这个参数可以将结果带出存储过程
as
set @result=@num1+@num2

declare @r1 int
exec sum1 1,2,@r1 output--必须要写output关键字,否则调用出错
print @r1

--===参数带默认值的存储过程,注意:默认值必须是最后一个参数
alter proc multi
@num1 int,
@num2 int=10 output--output的功能类似于C#中的ref修饰参数
as
set @num2=@num2*@num1
print @num2
--测试带出值的效果
declare @num int=2
exec multi 3,@num output
select @num
--测试默认值
exec multi 3

-------==============索引
select * from TblOrders
where oprice>100
--创建索引
create index index_name
on tblorders(oname)

这是昨天晚上看黑马视频学习的东西.感觉刘祁老师讲的挺好的.就是连着看了3-4个小时,很容易走神,可能听着听着就不知道自己想哪去了.这一点在以后的学习过程中要注意,不要一成不变的连续的看 ,可以边总结 边看

SQLserver 连接+开窗函数+视图+事务的更多相关文章

  1. MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...

  2. 数据库MySQL之 视图、触发器、存储过程、函数、事务、数据库锁、数据库备份、事件

    数据库MySQL之 视图.触发器.存储过程.函数.事务.数据库锁.数据库备份.事件 浏览目录 视图 触发器 存储过程 函数 事务 数据库锁 数据库备份 事件 一.视图 1.视图概念 视图是一个虚拟表, ...

  3. SQLServer学习笔记<>.基础知识,一些基本命令,单表查询(null top用法,with ties附加属性,over开窗函数),排名函数

    Sqlserver基础知识 (1)创建数据库 创建数据库有两种方式,手动创建和编写sql脚本创建,在这里我采用脚本的方式创建一个名称为TSQLFundamentals2008的数据库.脚本如下:   ...

  4. sqlserver的over开窗函数(与排名函数或聚合函数一起使用)

    首先初始化表和数据 create table t_student(   Id INT,   Name varchar(),   Score int,   ClassId INT ); insert i ...

  5. sql server中的开窗函数over、视图、事物

    一.开窗函数over的作用有两个: 1.排序order by,row_number,翻页 2.划区partition by,结合聚合函数针对某部分数据进行汇总 翻页的sql server 语句: an ...

  6. SQL——连接查询、聚合函数、开窗函数、分组功能、联合查询、子查询

    连接查询 inner join,用的最多,表示多张表一一对应 聚合函数 操作行数据,进行合并 sum.avg.count.max.min 开窗函数 将合并的数据分布到原表的每一行,相当于多出来了一列, ...

  7. 连接SQLServer时,因启用连接池导致孤立事务的原因分析和解决办法

    本文出处:http://www.cnblogs.com/wy123/p/6110349.html 之前遇到过这么一种情况: 连接数据库的部分Session会出现不定时的阻塞,这种阻塞时长时短,有时候持 ...

  8. sqlserver开窗函数

    从 http://jimshu.blog.51cto.com/3171847/1376637/ 转 开窗函数是在 ISO 标准中定义的.SQL Server 提供排名开窗函数和聚合开窗函数. 在开窗函 ...

  9. sqlserver开窗函数在财务对账中的用法

    曾几何时发现开窗函数在财务对账总特别好用.但是每次可能很久没用,逻辑都要重头来过.特此留一份完整的思考逻辑待日后参考. 以下是数据源: 从上面的数据可以看到通过C列,那么只需要两个条件即可获得已经用对 ...

随机推荐

  1. 深入javascript——构造函数和原型对象

    常用的几种对象创建模式 使用new关键字创建 最基础的对象创建方式,无非就是和其他多数语言一样说的一样:没对象,你new一个呀! var gf = new Object(); gf.name = &q ...

  2. hdu1272并查集入门

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  3. Jlink仿真器下载程序时出现Invalid ROM table!

    原因:仿真器时钟设置不对,应该将时间改低一点.

  4. HEAP[xxx.exe]:Invalid Address specified to RtlValidateHeap 错误的解决方法总结

    一.情况 抽象出问题是这样的: class DLL_API1 A { func() { vector vec; B b; b.func(vec); return TRUE; } } 其中B是另一个导出 ...

  5. Java学习笔记--Java图形用户界面

    AWT:抽象窗口组件工具包 Abstract Windows Toolkit(AWT)是最原始的 Java GUI 工具包.AWT 的主要优点是,它在 Java 技术的每个版本上都成为了一种标准配置, ...

  6. Oracle字符函数(转换大小写,替换等)

    在oracle中,有一些字符函数: upper(字符串):转换为大写lower(字符串):转换为小写initcap(字符串):首字母大写replace(字符串1,字符串2,字符串3):将串1中所有的串 ...

  7. CoreData (四)备

    监听NSFetchedResultsController 之前说过, NSFetchedResultsController是有两个重要的功能. 第一:NSFetchedResultsControlle ...

  8. 转载收藏之用 - 微信公众平台开发教程(四):Hello World

    这一篇文章其实可以写在很前面,不过我还是希望开发者们尽多地了解清楚原理之后再下手. 通过上一篇Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证,我们已经使微 ...

  9. Android SDCard和内部存储中gcc编译后的可执行文件无法运行提示 cannot execute - Permission denied

    原因是mount的方式问题,root后运行 su mount -o rw,remount /mnt/sdcard   //SDCard mount -o rw,remount /mnt/interna ...

  10. Oracle asm介绍和安装linux+oracle10g+asm过程

    Oracle asm介绍和安装linux5.2+oracle10g+asm过程   1)ASM(自动存储管理)的来由:   ASM是Oracle 10g R2中为了简化Oracle数据库的管理而推出来 ...