SQL简单详解.docx
- 文档编号:30650485
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:20
- 大小:22.37KB
SQL简单详解.docx
《SQL简单详解.docx》由会员分享,可在线阅读,更多相关《SQL简单详解.docx(20页珍藏版)》请在冰豆网上搜索。
SQL简单详解
useliuyi
go
-------------------------------------------------------------
setnocounton--不显示消息中影响的行数
EXECmaster..xp_fixeddrives--查看硬盘分区
select*,typefromsysobjects--查询sysobjects中的记录的类型
------------------------------------------------------------创建一个表
createtabletable1
(id1int,
id2_pkintconstraintpk_table1primarykey,
id3_uniqueintnotnullunique,
id4_fk_updateintnotnullconstraintfk_table1_table2foreignkeyreferencestable2(id2)onupdatecascade,
id5_identityintnotnullidentity(1,1),
id6_newiduniqueidentifiernotnullconstraintde_t1_newiddefault(newid()),--随机函数
newtime_getdatedatetimenotnullconstraintde_t1_timedefault(getdate()),--时间函数
tel_checkintnotnullconstraintch_t1_telcheck(tel_checklike'7809[0-9][0-9][1-9]'),
name_defaultnvarchar(20)notnullconstraintde_t1_namedefault('六六')
)
--------------------------------------
createtabletable2
(id1int,
id2_pkintconstraintpk_table2primarykey,
id3_uniqueintnotnull,
id4_fk_updateintnotnull,
id5_identityintnotnull,
id6_newiduniqueidentifier,
newtime_getdatedatetimenotnull,
tel_checkintnotnull,
name_defaultnvarchar(20)notnull
)
createtables1
(idintnotnull,
namenvarchar(20))
createtables2
(idintnotnull,
namenvarchar(20))
--------------------------------------------------------------增加一个列
--,列增加后将不能删除。
DB2中列加上后数据类型也不能改变,
--唯一能改变的是增加varchar类型的长度
altertable[s1]add[column_name]int--[]数据类型--
------------------------------------------------------------约束
altertable[s1]addconstraintpk_idprimarykey([id])--添加主键
altertable[s1]droppk_id--删除主键
altertable[s2]addconstraintfk_s1_s2foreignkey(id)referencess1(id)--添加外键
altertable[s2]dropfk_s1_s2--删除外键
altertable[s2]addconstraintfk_s1_s2foreignkey(id)referencess1(id)--级联更新
onupdatecascade
altertable[s2]addconstraintfk_s1_s2foreignkey(id)referencess1(id)--级联删除
ondeletecascade
altertable[s1]addconstraintun_s1unique(id)--添加唯一列,非聚集
altertable[s1]dropconstraintun_s1--删除唯一列,非聚集
altertable[s1]addconstraintun_clu_s1uniqueclustered(id)--聚集
altertable[s1]dropconstraintun_clu_s1--删除聚集
altertable[s1]addconstraintde_s1default'未知'forname--添加默认值
altertable[s1]dropconstraintde_s1--删除默认值
altertable[s1]withnocheckaddconstraintch_s1check(idlike'[1-9]')--添加检查彻查check
altertable[s1]dropconstraintch_s1--删除检查彻查check
altertable[s1]nocheckconstraintch_s1--设置check无效
altertable[s1]checkconstraintch_s1--设置check重新有效
------------------------------------------------------------索引
--索引是不可更改的,想更改必须删除重新建
createuniqueclusteredindexin_s1ons1(id)--创建索引
dropindexin_s1ons1--删除索引
------------------------------------------------------------常用查询
select*froms1whereid='1'--选择where"=,>,<.>=,<=,<>"
insertintos1(id,name)values('7','liuyi')--插入insert
deletefroms1whereid='6'--删除delete
updates1setname='liuyi'whereid='1'--更新update
--'%'零个和多个任意的字符,'_'任意一个字符,'[]'指定的范围作保单个字符,'[^]不在指定的范围作保单个字符
select*froms1wherenamenotlike'%value1%'--查找"字符串比较like,notlike"
select*froms1whereid='1'orid='2'--查找"逻辑运算符and,or"
select*froms1wherenotid='1'--查找"逻辑运算符not"
select*froms1whereidbetween'1'and'6'--查找"值的范围between,notbetweent"
select*froms1whereidin('1','3','6')--查找"值的列表in,notin"
select*froms1whereidisnotnull--查找"未知值isnull,notisnull"
------------------------------------------------------------设置结果集
select*froms1orderbyname--orderby"asc升,desc降"
selectdistinctid,namefroms1--distinct削除重复行
------------------------------------------------------------常用函数"聚合"
selectcount(*)as'总数'froms1--总数
selectsum(id)as'求和'froms1--求和
selectavg(id)as'平均'froms1--平均
selectmax(id)as'最大'froms1--最大
selectmin(id)as'最小'froms1--最小
selectid,name,COUNT(*)froms1groupbyid,name--groupby
selectid,name,COUNT(*)froms1groupbyid,namehavingid>2--groupby,having
selectid,name,sum(id)froms1groupbyid,namewithrollup--groupby,withrollup
selectid,name,sum(id)froms1groupbyid,namewithcube--groupby,withcube
--selectid,name,sum(id)grouping(id)froms1
selectid,namefroms1orderbyidcomputesum(id)--compute
selectid,namefroms1orderbyidcomputesum(id)byid--computeby
------------------------------------------------------------联接
select*froms1innerjoins2ons1.id=s2.id--内联接
select*froms1,s2wheres1.id=s2.id--内联接
select*froms1leftjoins2ons1.id=s2.id--左外联接
select*froms1rightjoins2ons1.id=s2.id--右外联接
select*froms1fulljoins2ons1.id=s2.id--全外联接
select*froms1crossjoins2--交叉联接
select*froms1,s2--交叉联接
selectid,namefroms1--合并多个结果集
union
selectid,namefroms2
selectid,namefroms1whereexists--exists判断某个值是否在值列表中
(selects1.idfroms1,s2wheres1.id=s2.id
ands2.idbetween'3'and'6')
--------------------------------------------------------------事务
--begintransaction--标记显式连接事务的起始点。
--committransaction--如果没有遇到错误,可使用该语句成功地结束事务。
--该事务中的所有数据修改在数据库中都将永久有效。
事务占用的资源将被释放。
--RollackTransaction--用来清除遇到错误的事务。
该事务修改的所有数据都返回到事务开始时的状态。
--事务占用的资源将被释放。
--savetrunsaction--用户可以在事务内设置保存点或标记。
保存点是如果有条件地取消事务的一部分,事务可以返回的位置。
--withmark--标记事务选项使事务名置于事务日志中
--隐式事务:
setimplicit_transactins{on|off};
--altertableinsertcreateopendeleterevoke
--truncatetabledropselectfetchgrantupdate
------------------------------------------------------------触发器trigger
useliuyi
go
createtriggertri_s1ons1--onview_name---
withencryption/*表进行加密*/
forinsert,update,delete
withappend/*增加另外一个已存在某一类型触发器*/
notforreplication/*表明当复制处理修改与触发器相关联的表时,触发器不能被执行。
*/
as
select*froms1
go
createtriggertri_s1ons1--onview_name---
withencryption
insteadofinsert
as
declare@aint,@bnvarchar(20)
inserts2values(@a,@b)
go
altertriggertri_s1ons1--onview_name---
withencryption
insteadofinsert
as
declare@aint,@bnvarchar(20)
inserts2values(@a,@b)
go
droptriggertri_s1
------------------------------------------------------------视图view
useliuyigo
createviewvi_s1
withencryption/*表进行加密*/
as
select*froms1
go
dropviewvi_s1--删除
------------------------------------------------------------储存过程procedure
useliuyi
go
ifexists(selectnamefromsysobjectswheretype='p'andname='my_test')
dropproceduremy_test
go
createprocedurepro_select_s1
withencryption
as
select*froms1
go
dropprocedurepro_insert_s2--删除
useliuyi
go
createprocedurepro_insert_s2
(@aint,@bnvarchar(20)='未知')
as
inserts2values(@a,@b)
go
executedbo.pro_insert_s2'1'
useliuyi
go
createprocedurepro_select_s2
(@idasint,@nameasnvarchar(20)output)
withencryption,/*可选,加密*/
recompile/*可选,指明SQLServer并不保存该存储过程的执行计划,该存储过程每执行一次都又要重新编译。
*/
forreplication/*可选指明了为复制创建的存储过程不能在订购服务器上执行*/
as
select@name=namefroms1whereid=@id
go
declare@namenvarchar(20)
execpro_select_s22,@nameoutput
select@name
--修改可以直接将create改为alter
------------------------------------------------------------函数
--标量函数
useStuSys
go
ifexists(selectnamefromsysobjectswheretype='fn'andname='fun_s1')
dropfunctionfun_s1
go
createfunctiondbo.fun_s1
(@stuidint,@newtimedatetime)
returnsint
as
begin
declare@birthdaydatetime
select@birthday=birthdayfromstudentwherestuid=@stuid
returndatediff(YY,@birthday,@newtime)
end
go
selectstuid,stuname,gender,age=dbo.fun_s1(stuid,GETDATE()),classid,professional
fromStudent
--内联表值函数
ifexists(selectnamefromsysobjectswheretype='fn'andname='fun_s1')
dropfunctionfun_s1
go
createfunctionfun_s1
(@stuidasint)
returnstable
as
return(select*fromstudentwherestuid=@stuid)
go
select*fromdbo.fun_s1(2011001)
select*fromstudent
--多语句表值函数
ifexists(selectnamefromsysobjectswherename='fun_s1'andtype='fn')
dropfunctionfun_s1
go
createfunctionfun_s1
(@counameasnvarchar(50))
returns@studenttable(stuidint,couidint,counamenvarchar(50),degreeint)
as
begin
insert@student
selects1.stuid,c1.couid,c1.couname,s1.degree
fromstuscores1,coursec1
wheres1.couid=c1.couidandc1.couname=@couname
return
end
go
select*fromfun_s1('SQLServer2008数据库开发应用基础')
/*-------------------------------------------------------------------------游标*/
declarersinsensitivecursor
forselect*fromstudent
openglobalrs--打开游标
IF@@ERROR=0
BEGIN
PRINT'游标打开成功。
'
PRINT'学生总数为:
'+CONVERT(VARCHAR(3),@@CURSOR_ROWS)
END
closers--关闭游标
deallocaters--释放游标
GO
/*-------------------------------------------------------------------------------备份*/
--使用sp_addumpdevice创建数据库备份设备
EXECsp_addumpdevice'DISK','StuSysBACK','E:
\zhouxianqun\SQL\StuSys.bak'
EXECsp_dropdevice'StuSysBACK'--执行删除该设备
BACKUPDATABASEStuSysTOStuSysBACKWITHINIT,NAME='StuSysbak'--覆盖备份
BACKUPDATABASEStuSysTOStuSysBACKWITHNOINIT,NAME='StuSysbak3'--追加备份
BACKUPDATABASEStuSysTODISK='E:
\zhouxianqun\SQL\DIFFER.BAK'--差异备份
WITHDIFFERENTIAL,INIT,NAME='differbak'
BACKUPLOGStuSysTODISK='E:
\zhouxianqun\SQL\DIFFER.BAK'--日志备份
WITHNOINIT,NAME='differbak'
--用SQL语句还原数据库
restoredatabaseStuSys
fromdisk=N'E:
\zhouxianqun\SQL\StuSys.bak'
with
norecovery,
file=1,--恢复第几个
nounload,
replace,
stats=10
GO
/*---------------------------------------------------------------------------创建数据库快照*/
createdatabaseStuSys_Snapshot_1
on
(name='StuSys',filename='E:
\zhouxianqun\SQL\StuSys_Snapshot_1.ss')
assnapshotofStuSys
GO
--测试
useStuSys_Snapshot_1
select*fromt1
-------------------------------编程语句-----------------------------------------------------
setnocounton--设置不显示影响的行
-----------------------------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL 简单 详解