SQLserver 连接+开窗函数+视图+事务
今天学习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 连接+开窗函数+视图+事务的更多相关文章
- MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...
- 数据库MySQL之 视图、触发器、存储过程、函数、事务、数据库锁、数据库备份、事件
数据库MySQL之 视图.触发器.存储过程.函数.事务.数据库锁.数据库备份.事件 浏览目录 视图 触发器 存储过程 函数 事务 数据库锁 数据库备份 事件 一.视图 1.视图概念 视图是一个虚拟表, ...
- SQLServer学习笔记<>.基础知识,一些基本命令,单表查询(null top用法,with ties附加属性,over开窗函数),排名函数
Sqlserver基础知识 (1)创建数据库 创建数据库有两种方式,手动创建和编写sql脚本创建,在这里我采用脚本的方式创建一个名称为TSQLFundamentals2008的数据库.脚本如下: ...
- sqlserver的over开窗函数(与排名函数或聚合函数一起使用)
首先初始化表和数据 create table t_student( Id INT, Name varchar(), Score int, ClassId INT ); insert i ...
- sql server中的开窗函数over、视图、事物
一.开窗函数over的作用有两个: 1.排序order by,row_number,翻页 2.划区partition by,结合聚合函数针对某部分数据进行汇总 翻页的sql server 语句: an ...
- SQL——连接查询、聚合函数、开窗函数、分组功能、联合查询、子查询
连接查询 inner join,用的最多,表示多张表一一对应 聚合函数 操作行数据,进行合并 sum.avg.count.max.min 开窗函数 将合并的数据分布到原表的每一行,相当于多出来了一列, ...
- 连接SQLServer时,因启用连接池导致孤立事务的原因分析和解决办法
本文出处:http://www.cnblogs.com/wy123/p/6110349.html 之前遇到过这么一种情况: 连接数据库的部分Session会出现不定时的阻塞,这种阻塞时长时短,有时候持 ...
- sqlserver开窗函数
从 http://jimshu.blog.51cto.com/3171847/1376637/ 转 开窗函数是在 ISO 标准中定义的.SQL Server 提供排名开窗函数和聚合开窗函数. 在开窗函 ...
- sqlserver开窗函数在财务对账中的用法
曾几何时发现开窗函数在财务对账总特别好用.但是每次可能很久没用,逻辑都要重头来过.特此留一份完整的思考逻辑待日后参考. 以下是数据源: 从上面的数据可以看到通过C列,那么只需要两个条件即可获得已经用对 ...
随机推荐
- AVL树插入和删除
一.AVL树简介 AVL树是一种平衡的二叉查找树. 平衡二叉树(AVL 树)是一棵空树,或者是具有下列性质的二叉排序树: 1它的左子树和右子树都是平衡二叉树, 2且左子树和右子树高度之差的 ...
- oracle服务的开始和关闭 CMD
开始: @echo halt oracle service ...net start OracleServiceORCLnet start OracleOraDb11g_home1TNSListene ...
- Windows命令行(DOS命令)教程-8 (转载)http://arch.pconline.com.cn//pcedu/rookie/basic/10111/15325_7.html
15. pass [功能] 设定DOS寻找.COM..EXE..BAT文件的所在目录 [格式] path=[[drive:]path[;-]]或path [说明] 只打path没有参数时,只显示环境变 ...
- 关于DIPS的MVC 4.0项目发布与在IIS 7.0上的部署的方法
本人技术笨拙,今天在发布DIPS的MVC4.0项目,并部署到IIS上,遇到各种问题.在查询相关资料后,最终得以解决,所以想把这个过程记录下来. 首先是MVC4.0项目的发布: 打开你的VS2012网站 ...
- Linux设置自启动
启动大致过程:bootloader-->内核-->内核模块-->挂载根文件系统-->init进程 init进程是非内核进程中第一个被启动运行的,因此它的进程编号PID的值总是1 ...
- keil中查看内存数据
1.工具栏中 view->Memory Windows 然后 c:0 表示读取0地址开始的代码区数据 d:0 表示读取0地址开始的数据区数据 x:0表示读取0地址开始的外部数据区
- Linux下使用多线程模拟异步网络通信
服务器 /* socket server * 2014-12-15 CopyRight (c) arbboter */ #include <unistd.h> #include <s ...
- dedecms友情链接flink的调用方法
标记名称:flink[标签简介][功能说明]:用于获取友情链接,其对应后台文件为"includetaglibflink.lib.php".[适用范围]:全局标记,适用V55,V56 ...
- hdfs的实现机制和文件系统概念
1.HDFS的诞生背景: 数据量太大,在一个结点(机器)存不下.所以需要分布式存储,HDFS就是hadoop的分布式文件系统,来存储分布式数据. 2.共享文件系统也是一种分布式存储但有缺点:1.并发差 ...
- [C入门 - 游戏编程系列] 贪吃蛇篇(六) - 蛇实现
这一篇是关于设置蛇的属性的,接上一篇(五). 设置蛇的速度,很简单,只要不是负数就行了. void SNK_SetSnakeSpeed(Snake *snake, int speed) { ) sna ...