澳门新萄京内容主要是对数据库的基本。

前言

正文是私有学习SQL Server 数据库时之过去记的整理,内容要是对准数据库的中坚增删改查的SQL语句操作约,视图,存储过程,触发器的着力了解。

流淌:内容比较基础,适合入门者对SQL
Server 数据库的了解!!!

正文

1.子查询

–把一个查询结果作另外一个询问的查询源
select * from (select * from Student where tbage between 3 and 5)
as ct where tbname=5 –ct是新创造的表名

–将另外一个查询的结果当当下询问的规范来以。
–子查询中=、!= 、< 、> 、<=
、>=之后只能回到单个值,如果多独价值就是见面报错
–解决办法 可以就此in 代替
select * from Student
where tbage in(select tbage from Student where tbname=3)

select * from Student
where tbage=(select tbage from Student where tbname=3)

》》》》》》子查询分页《《《《《《

–1》显示第一页的多寡
–分页查询的时光首先是将数据排序
select * from Student order by id desc

–2》第一页 显示5条数据
select Top 5 * from Student order by id desc

–3》第二页
select top 5 * from Student
where id not in (select top 5 * from Student order by id desc)
order by id desc

–4》第三页
select top 5 * from Student
where id not in (select top (2*5) * from Student order by id desc)
order by id desc

》》》开窗函数分页《《《

–第七页数据 每页5漫漫数
–over属于开窗函数

select * from
(
select * ,row_number() over( order by id desc) as paixu from Student
) as tbl
where tbl.paixu between 6*5+1 and 7*5

2.连表查询

–查询有学员的全名、年龄与所在班级 (班级在旁一个表中)
–当多个列在不同的表中时,要跨表查询,所以一般可使inner join
–tc ts是针对性表名起的号
select
ts.tsname,
ts.tsage,
tc.tclassname
from TblStudent as ts
inner join TblClass as tc on
ts.tsclassid=tc.tclassid(只询问两单说明中还有的数据)

–》》》full join 是查询有的数据(没有底为空)

—子查询写法
select
tsname,
tsage,
班级名称=(select tclassname from TblClass where
TblClass.tclassid=TblStudent.tsclassid)
from TblStudent

–查询学生姓名、年龄、班级和成绩(成绩属于第三张表)
select
ts.tsname,
ts.tsage,
tc.tclasssname,
tscore.tenglish,
tscore.tmath
from TblStudent as ts
inner join TblClass as tc on ts.tsclassid=tc.tclassid 
inner join TblScore as tscore on tscore.tsid=ts.tsid

 

–》》》左外联接(左联接)

–查询没有参加考试的学员的真名及号码
–把左表(left join
关键字左边的表明)中之全体记下还来得出,对于那些在右表中可知找到匹配的记录,显示对诺配合数据,对于那些右表中搜寻不交相当的记录显示为null
select
ts.tsid,
ts.tsname,
TblScore.*
from TblStudent as ts
left outer join TblSore.tsid=ts.tsid   –outer可以无写

–》》》右外过渡
–表示一旦拿右表(right join
右边的阐明)中之具备数据还来得,左表中仅仅显示那些匹配的多少。

select
ts.tsid,
ts.tsname,
TblScore.*
from TblStudent as ts
right outer join TblSore.tsid=ts.tsid

–右外联和左外联都是先行以配合的数量找到,然后重新将那些从没匹配的数增长进去,(注意:不是共查询出来的,有先后顺序)

–》》》练习:查询有学生(参加与莫到庭的试验)的学童姓名、年龄、成绩,如果没参加考试显示缺考,如果小于english或者math
小于60分显示不过关
select
ts.tsname,
ts.tsage,
tscore.tsid,
case
when tscore.tenglish is null then ‘缺考’
else convert(varchar(10),tscore.tenglish)
end as 英语成绩,
case
when tscore.tmath id null then ‘缺考’
else convert (varchar(10),tscore.tmath)
end as 数学成绩,
是不是报考=
case
when tscore.tscoreid is null then ‘是’
else ‘否’
end
from TblStudent as ts
left join TblScore as tscore on ts.tsid=tscore.tsid

3.视图

视图本身并无存储数据,只是存储的询问语句,如果拿实事求是表中的数量修改后,则透过视图查询及之结果吧移了。

视图的目的是惠及查询,所以一般情况下不能够针对视图进行增删改查

–以视图中的查询语句,必须也各级一样排列创建一个列名
create view vw2
as
select
tsname,
case
when tsage>13 and tsage<=16 then ‘少年’
when tsage>50 then ‘老年’
else ‘青壮年’
end as 称呼
from TblStudent

–以视图中无可知采用order by语句。除非:另外还点名了top 或for xml
–错误
create view vw3
as
select * from TblStudent order by tsage desc

–正确
create view vw3
as
select top 3 * from TblStudent order by tsage desc

4.声明变量和行使

–》》》局部变量
–声明变量
declare @name varchar(10)
declare @age int

–赋值
set @name=’yhz’
set @age=17

–输出值
print @name
print @age

–以set与select为变量赋值的别
declare @rcount int
set @rcount=(select count(*) from TblStudent)
print @rcount

declare @rcount int
select @rcount=count(*) from TblStudent
print @rcount

–》》》全局变量
print @@language
print @@version
print ‘aaa’+100
–通过判断@@error变量中是否非为0,就可断定上同一漫漫sql语句执行是否出错了
–如果@@error为0,表示达成等同久sql语句执行没有出错,如果@@error不为0,则意味着达成亦然长长的sql语句出错了。
print@@error

–》》》通过while计算1-100内所有奇数的跟

–声明变量并初始化

declare @sum int=0
declare @i int =1
while @i<=100
begin
if @i%2<>0
begin
set @sum=@sum+@i
end
end
print @sum

5.事务

政工有四个属性:原子性 一致性 隔离性 持久性
原子性:对于数据修改,要么全都执行,要么全都不执行
一致性:当数码就时,数据必须处于相同状态
隔离性:对数码进行改动的具备并发事务时相隔离的。这标志工作必须是单身的,它不应允以另外措施凭让要影响外事情
永久性:事务完成后,他对数据库的改动被永远保持,事务日志能够保障业务之永久性

–打开工作
begin transaction

–提交事务
commit transaction

–回滚事务
rollback transaction

–账户A为账户B转账 当一正在来问题时,两个报告句都不执行
begin tran
declare @sum int=0
update bank set balance =balance-1000 where cid=’0001′
set @sum=@sum+@@error
update banl set balance =balance+1000 where cid=’0002′
set @sum=@sum+@@error

if @sum<>0
begin
rollback tran
print ‘回滚’
end
else
begin
commit tran
print ‘提交了’
end

6.囤过程

–创建一个自定义的积存过程
create proc usp_HelloWorld
as
begin
print ‘hello world’
end

–输出存储过程
exec usp_HelloWorld

–创建一个仓储过程计算两单数的同
create procedure usp_Add
@num1 int,
@num2 int
as
begin
print @num1+@num2
end

–输出值
exec usp_Add 100,230

–存储过程中的参数的问题
–存储过程要发参数,则调用的下必须也参数赋值
exec usp_Add –不传参数则报错

–次独参数如果用户不污染,则生一个默认值
create procedure usp_Add
@num1 int,
@num2 int 1000 –为存储过程的参数设置默认值
as
begin
print @num1+@num2
end

–创建分页存储过程
create proc usp_PageBum
@pageSize int, –每页显示的数据
@pageIndex int –第几页
as
begin
select * from (select *,row_number()over (order by CityID asc)as num
from S_City )as s
where s.num between (@pageIndex -1)*@pageSize +1 and @pageIndex
*@pageSize
end
–查询第5页内容每页显示10修数据
exec usp_PageBum 10,5

–删除一个囤积过程
drop proc usp_Add

7.触发器

尽量避免在触发器中执耗时操作,因为触发器会以及sql语句认为当跟一个作业中(事务不了事,就无法自由锁)

–创建插入数据触发器
create trigger tri_Teacher_insert_after
on Teacher after insert
as
begin
declare @id int
declare @name varchar(10)
declare @phone int
declare @mail varchar(50)
select @id=tcid,@name=tcname,@phone=tcphone,@mail=tcmail from inserted

print @id
print @name
print @phone
print @mail
end

–插入数据
insert into Teacher values(‘网名好’,’12352536′,’Wjifdfji@qq.com’)

–创建删除数据触发器
–不能够闹主键
create trigger tri_Teacher_after
on Teacher after delete
as
begin
insert into TeacherBak
select * from deleted
end

–删除数据
–sql
server中的触发器是表级触发器,无论去多少行还是插多少行,只触发一样破
–是遵循语句来点的,每次执行同一不良讲话,触发一不行触发器
delete from Teacher where tcid>18

8.游标

–1.概念游标
declare cur_Student cursor fast_forward for select * from Student

–2.开辟游标
open cur_Student

–2.1 对游标的操作
–将各国条数读取并出口

–2.1.1将游标向后运动一条
fetch next from cur_Student

–将游标循环为后走,直到最后
while @@fetch_status=0
begin
fetch next from cur_Student
end

–3.关门游标
close cur_Student

–4.获释资源
deallocate cur_Student

9.(补充)全局临时表,局部临时表

有临时表:表名以#呢发端。只当时对话中有效,不克跳连访问。如果直白以连年会话中开创,则当前连续断开后去,如果是于存储过程中开创的,则存储过程执行完毕后删除

大局临时表:表名以##呢始发。多只照面说话不过共享全局临时表。当创建全局临时表的对话断开,并且没有用户在访全局临时表时删除

10.(补充)约束

–删除一排列(EmpAddress列)
alter table Class drop column EmpAddress

–增加一列(增加一列EmpAddr varchar(1000))
alter table Class Add EmpAddr varchar(1000)

–修改一下Emp 的数据类型(varchar(200))
alter table Class alter column Emp varchar(200)

–为EmpId增加一个主键约束
alter table Class add constraint PK_Class_EmpId primary key(EmpId)

–为EmpName增加一个唯一约束
alter table Class add constraint UQ_Class_EmpName unique(EmpName)

–为性增加一个默认约束,默认为男
alter table Class add constraint DF_Class_EmpGender default(‘男’) for
EmpGender

–为春秋增加一个反省约,年龄必须于1—120载以内(包含)
alter table Class add constraint CK_Class_EmpAge check(EmpAge>=0
and EmpAge<=120)

–增加外键约束,表Class中起一列EmpDeptId引用Student表中之DeptId
alter table Class add EmpDeptId int not null
alter table Student add constraint PK_Student_DeptId primary
key(DeptId)

alter table Class add constraint FK_Class_Student foreign
key(EmpDeptId)
references Student(DeptId)

–同长条告句删除多单框,约束名用 逗号 隔开
alter table Class drop constraint
PK_Student_DeptId,
FK_Class_Student,
CK_Class_EmpAge

–用一修告句也说明增加多只框
alter table Class add
constraint PK_Student_DeptId primary key(DeptId),
constraint CK_Class_EmpAge check(EmpAge>=0 and EmpAge<=120),
add constraint DF_Class_EmpGender default(‘男’) for EmpGender

后记

笔记不全,还恳请见谅!希望对你有所提高。

 

相关文章