mssql数据库基本语句总结(2)
2013-05-21 13:23
267 查看
use cstn go --建立一个check约束 alter table Student add constraint CK_Studetn_tSAge check(tsage between 0 and 100) go --对貂禅的年龄进行修改 update Student set tSAge=19 where tSId=9 go --select语句的执行过程 select tsgender,count(1)--5从分完组的并经过筛选的结果中,取得能够得到列,构成新的结果集 from student --1从表中取结果集合 where tsage>18 --2对集合内容进行筛选,得到新的结果集 group by tsgender --3对结果集进行分组 having count(*)>1 --4对分组后的结果进行筛选 order by count(*) desc --6最后对结果进行排列得到游标(非集合的结果,如果有top等就能从新变成集合) go --通配符 :_通配单个字符,%通配多个字符,^非通配符,[]选一通配符,在中括号中选一个匹配,带有转意的功能如[%],[[]等 select * from Student go --增加几列为后通配符做对比(一条语句加入多行信息写法) insert into Student(tsid,tsname,tsage) select 11,N'关飞',28 select 11,N'关飞飞',28 select 11,N'关飞飞云',28 select 11,N'关%飞云',28 --修改下主键某个值 set identity_insert student on insert into student(tid,tsid,tsname,tsage) values(21,11,N'关雨关%羽',28) set identity_insert student off go --????更新不了找原因???——>答案:不能update语句,但是能insert与语句而且要标明要插入的列的列明!!!! --事物回滚后主键自增2,不管有没有出错。 begin tran begin try insert into Student(tsid,tsname,tsage) select 11,N'关飞关',28 union all select 11,N'关飞飞',28 union all select 11,N'关飞飞云',28 union all select 11,N'关%飞云',28 end try begin catch commit end catch insert into student values (11,N'关雨_关%羽',28,N'男')--测试主键是否自增,结果有 go --通配符来选则对比 select *from Student where tSName like N'关_' select *from Student where tSName like N'关__' select *from Student where tSName like N'关%' select *from Student where tSName like N'关[%]%' go select * from Student go --局部临时表#表名,全局临时表##表名+两种表的插入方法 select * into ##stu from student where tsgender=N'男'--表不存在插入表方法,*也可以用你要插入的字段代替 go select* from ##stu go insert into ##stu --!!!这种插入是插入的表头,不是接着表末尾插入的!!!!!且是要已经存在的表才可以这么插入表 select tsid,tsage,tsname from student where tsgender=N'女' order by tsid desc go drop table ##stu go --创建一个视图(!!!!注:在视图的查询语句中必须为每一列创建一个列明,如果列没有列名的话!!!!) create view vw1 as select *, case when tsage>20 and tsage<25 then N'青少年' when tsage>=25 then N'成年了' when tsage<=20 then N'小屁孩' else N'没人要啦' end -----没有给列取名字,所以报错,此时没有取名的列不作为视图的一部分,!!!此时没有报错的列一起生成了视图!!!! from Student go --修改视图时候用alter关键字代替create alter view vw1 as select *, case when tsage>20 and tsage<25 then N'青少年' when tsage>=25 then N'成年了' when tsage<=20 then N'小屁孩' else N'没人要啦' end as 称呼-----给列取名字,不报错了 from Student go select * from vw1 go --创建一个存储过程 --(优点1.提前在数据编译好的,所以速度比较快2.提高系统安全性,防止spl注入攻击3.降低了网络流量,代码直接存储于数据库中,所以不会产生大量T-sql语句的代码流量。4.允许模块化程序设计,类似方法复用) --(缺点1.代码可读性差,相当难维护2.很多存储过程不支持面向对象的设计,无法采用面向对象的方式将业务逻辑进行封装,从而无法形成通用的可支持复用的业务逻辑框架。3.可移植性差,使用存储过程封装业务逻辑限制了应用程序的可移植性。这里不详细说明。。。) create proc usp_insert_stu @id int, @name nvarchar(10), @age int=45, @gender nchar(2)=N'男' as begin insert into student values(@id,@name,@age,@gender) end go --修改存储过程 alter proc usp_insert_stu @id int, @name nvarchar(10), @age int=45, @gender nchar(2)=N'女' as begin insert into student values(@id,@name,@age,@gender) end go --执行一个存储过程 exec usp_insert_stu 12,N'黄忠6' go --删除一个存储过程 drop proc usp_insert_stu go select * from student delete from student where tid>22 --总结视图和存储过程:1.视图和存储过程都是有as语法的2.视图一定不能有begin end,而存储过程可有可无,但是建议写上3.要修改时候两者直接把creat改为alter即可,这是其他语句(除了触发器!如下)所没有的特点!!! --和视图和存储过程有相似语法的——触发器 select *into ##test from student--1创建一个测试用的临时表导入student数据 truncate table ##test--2删除数据达到仅保留表结构的特点 --创建一个触发器(和事件类比,执行delete update 或者insert后(after或者代替(instead of))触发某个事件(那个看关键字用哪个) go create trigger tri_Student_delete_after on student after delete as begin insert into ##test select tid,tsid,tsname,tsage from deleted end go --修改下触发器的语法create 改为 alter即可 alter trigger tri_Student_delete_after on student after delete as begin set identity_insert ##test on insert into ##test(tid,tsid,tsname,tsage) select tid,tsid,tsname,tsage from deleted end --测试下delete的触发器 delete from student where tid>22 select * from #test --删除一个触发器 drop trigger tri_Student_delete_after --触发器小小总结:1.触发器里头不要有太复杂的代码,因为触发器没有结束事件就没有结束。2.在修改或者创建触发器的时候要么单独执行要么在语句开头加个go,(表示上一个语句的结束(不准确的说法啊~确切的说是go之前是作为一个代码段发给数据库操作的)),因为create trigger和alter trigger语句必须是查询批次中第一句~~!!!! --游标的使用(效率低下,最好不要用)========(在视图,子查询,内联函数,派生表中只能是集合不能是游标)=====不解释 --自己看书去吧,游标cursor内容和级联jion现在不想写了,后面有更新可能会写上..... --署名:黄飘龙
use cstn
go
--建立一个check约束
alter table Student add constraint CK_Studetn_tSAge check(tsage between 0 and 100)
go
--对貂禅的年龄进行修改
update Student set tSAge=19 where tSId=9
go
--select语句的执行过程
select tsgender,count(1)--5从分完组的并经过筛选的结果中,取得能够得到列,构成新的结果集
from student --1从表中取结果集合
where tsage>18 --2对集合内容进行筛选,得到新的结果集
group by tsgender --3对结果集进行分组
having count(*)>1 --4对分组后的结果进行筛选
order by count(*) desc --6最后对结果进行排列得到游标(非集合的结果,如果有top等就能从新变成集合)
go
--通配符 :_通配单个字符,%通配多个字符,^非通配符,[]选一通配符,在中括号中选一个匹配,带有转意的功能如[%],[[]等
select * from Student
go
--增加几列为后通配符做对比(一条语句加入多行信息写法)
insert into Student(tsid,tsname,tsage)
select 11,N'关飞',28
select 11,N'关飞飞',28
select 11,N'关飞飞云',28
select 11,N'关%飞云',28
--修改下主键某个值
set identity_insert student on
insert into student(tid,tsid,tsname,tsage) values(21,11,N'关雨关%羽',28)
set identity_insert student off
go --????更新不了找原因???——>答案:不能update语句,但是能insert与语句而且要标明要插入的列的列明!!!!
--事物回滚后主键自增2,不管有没有出错。
begin tran
begin try
insert into Student(tsid,tsname,tsage)
select 11,N'关飞关',28 union all
select 11,N'关飞飞',28 union all
select 11,N'关飞飞云',28 union all
select 11,N'关%飞云',28
end try
begin catch
commit
end catch
insert into student values (11,N'关雨_关%羽',28,N'男')--测试主键是否自增,结果有
go
--通配符来选则对比
select *from Student where tSName like N'关_'
select *from Student where tSName like N'关__'
select *from Student where tSName like N'关%'
select *from Student where tSName like N'关[%]%'
go
select * from Student
go
--局部临时表#表名,全局临时表##表名+两种表的插入方法
select * into ##stu from student where tsgender=N'男'--表不存在插入表方法,*也可以用你要插入的字段代替
go
select* from ##stu
go
insert into ##stu --!!!这种插入是插入的表头,不是接着表末尾插入的!!!!!且是要已经存在的表才可以这么插入表
select tsid,tsage,tsname from student where tsgender=N'女' order by tsid desc
go
drop table ##stu
go
--创建一个视图(!!!!注:在视图的查询语句中必须为每一列创建一个列明,如果列没有列名的话!!!!)
create view vw1
as
select
*,
case
when tsage>20 and tsage<25 then N'青少年'
when tsage>=25 then N'成年了'
when tsage<=20 then N'小屁孩'
else N'没人要啦'
end -----没有给列取名字,所以报错,此时没有取名的列不作为视图的一部分,!!!此时没有报错的列一起生成了视图!!!!
from Student
go
--修改视图时候用alter关键字代替create
alter view vw1
as
select
*,
case
when tsage>20 and tsage<25 then N'青少年'
when tsage>=25 then N'成年了'
when tsage<=20 then N'小屁孩'
else N'没人要啦'
end as 称呼-----给列取名字,不报错了
from Student
go
select * from vw1
go
--创建一个存储过程
--(优点1.提前在数据编译好的,所以速度比较快2.提高系统安全性,防止spl注入攻击3.降低了网络流量,代码直接存储于数据库中,所以不会产生大量T-sql语句的代码流量。4.允许模块化程序设计,类似方法复用)
--(缺点1.代码可读性差,相当难维护2.很多存储过程不支持面向对象的设计,无法采用面向对象的方式将业务逻辑进行封装,从而无法形成通用的可支持复用的业务逻辑框架。3.可移植性差,使用存储过程封装业务逻辑限制了应用程序的可移植性。这里不详细说明。。。)
create proc usp_insert_stu
@id int,
@name nvarchar(10),
@age int=45,
@gender nchar(2)=N'男'
as
begin
insert into student values(@id,@name,@age,@gender)
end
go
--修改存储过程
alter proc usp_insert_stu
@id int,
@name nvarchar(10),
@age int=45,
@gender nchar(2)=N'女'
as
begin
insert into student values(@id,@name,@age,@gender)
end
go
--执行一个存储过程
exec usp_insert_stu 12,N'黄忠6'
go
--删除一个存储过程
drop proc usp_insert_stu
go
select * from student
delete from student where tid>22
--总结视图和存储过程:1.视图和存储过程都是有as语法的2.视图一定不能有begin end,而存储过程可有可无,但是建议写上3.要修改时候两者直接把creat改为alter即可,这是其他语句(除了触发器!如下)所没有的特点!!!
--和视图和存储过程有相似语法的——触发器
select *into ##test from student--1创建一个测试用的临时表导入student数据
truncate table ##test--2删除数据达到仅保留表结构的特点
--创建一个触发器(和事件类比,执行delete update 或者insert后(after或者代替(instead of))触发某个事件(那个看关键字用哪个)
go
create trigger tri_Student_delete_after
on student after delete
as
begin
insert into ##test
select tid,tsid,tsname,tsage from deleted
end
go
--修改下触发器的语法create 改为 alter即可
alter trigger tri_Student_delete_after
on student after delete
as
begin
set identity_insert ##test on
insert into ##test(tid,tsid,tsname,tsage)
select tid,tsid,tsname,tsage from deleted
end
--测试下delete的触发器
delete from student where tid>22
select * from #test
--删除一个触发器
drop trigger tri_Student_delete_after
--触发器小小总结:1.触发器里头不要有太复杂的代码,因为触发器没有结束事件就没有结束。2.在修改或者创建触发器的时候要么单独执行要么在语句开头加个go,(表示上一个语句的结束(不准确的说法啊~确切的说是go之前是作为一个代码段发给数据库操作的)),因为create trigger和alter trigger语句必须是查询批次中第一句~~!!!!
--游标的使用(效率低下,最好不要用)========(在视图,子查询,内联函数,派生表中只能是集合不能是游标)=====不解释
--自己看书去吧,游标cursor内容和级联jion现在不想写了,后面有更新可能会写上.....
--署名:黄飘龙
相关文章推荐
- mssql数据库基本语句总结(1)
- MSSQL-用SQL语句添加删除修改字段、一些表与字段的基本操作、数据库备份等
- MySQL_知识总结01(基本数据库语句+关于Mysql面试题+select语句的练习)
- SQL语句总结一||数据库的创建,表格的创建,基本表的删除和修改
- SQL Server 数据库基本操作语句总结
- 【笔记】Oracle 数据库编程 - 基本语句总结
- SQL Server 数据库基本操作语句总结
- MSSQL2005用语句创建数据库和表
- mssql数据库,无法用语句实现“强制还原”功能
- 关系数据库常用的sql语句总结
- MSSQL数据库的字段类型总结
- 【数据库】MySQL基本语句的使用
- 数据库基本操作SQL(创建表 添加主键 添加列的常用语句)
- 数据库编程语句总结
- MySQL学习总结(二)数据库以及表的基本操作
- 数据库的基本语句用法
- 数据库基本----SQL语句大全
- MSSQL 基本语法及实例操作语句
- C#连接数据库最基本操作之sql语句 DML
- 数据库基本语句