今天学习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. (转)SQL利用Case When Then多条件判断

    CASE     WHEN 条件1 THEN 结果1     WHEN 条件2 THEN 结果2     WHEN 条件3 THEN 结果3     WHEN 条件4 THEN 结果4 ....... ...

  2. java equals 心得体会

    要记住最有用的一点: equals 在已经被系统定义好的类中 是已经被重写好了的 父类中的 equals方法是比较的两个对象是否指向同一引用 在被定义除了父类以外比较的是两个对象的内容 因此 人为定义 ...

  3. IOS网络开发实战(二)

      1 飞机航班查询软件 1.1 问题 NSURLConnection是IOS提供的用于处理Http协议的网络请求的类,可以实现同步请求也可以实现异步请求,本案例使用NSURLConnection类实 ...

  4. webform 验证控件

    验证: 一.非空验证  RequiredFieldValidator ErrorMessage - 验证出错后的提示信息 ControlToValidate - 要验证的控件的ID Display - ...

  5. Lightoj1009 Back to Underworld(带权并查集)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Back to Underworld Time Limit:4000MS      ...

  6. VB6基本数据库应用(四):数据的提取,新增和修改

    列的第四篇,上一篇在:http://blog.csdn.net/jiluoxingren/article/details/9474661 数据的提取,新增和修改 由于在写第三章的时候没有充分考虑这一章 ...

  7. 为什么要采用外部js文件

    这篇文章主要讲的是为什么要采用外部js文件,有什么好处. 为什么不把js内嵌在html中呢,这样不是好分析吗?对,这样你是好分析,同样的别人呢?不内嵌在html中有如下原因:   安全性: 只要查看页 ...

  8. 03--理解HelloWorld结构

    作为程序猿还是要代码来说事的,现在开始进入到具体的代码中来.国际惯例HelloWorld打头阵,我也不能免这个俗. Win32入口函数中主要代码如下: main.cpp // 创建应用实例 AppDe ...

  9. asp.net 中如何判断字符串中有几个逗号 (asp也通用)

    如: 字符串 a="1,2,3"; 怎样判断a 中的逗号 有几个 len(a)-len(replace(a,",",""))

  10. discuz@功能的代码

    //转载 $atlist = $atlist_tmp = $ateduids = array(); preg_match_all("/@([^\r\n]*?)\s/i", $mes ...