当前位置:文档之家› SQL学习总结

SQL学习总结

1、With ties :查出与返回数据的最后一行的相同的数据2、用法:select top(5) with ties 字段名FROM 表名3、Over的使用Over称为窗口函数用法:sum(valus) over() 其是指对搜索出来的数据进行求和,不需要在进行分组,如果需要有限定条件则sum(valus) over(partition by字段名)4、数据的计算在进行数据与字段的乘除的时候,数字后面加一个点,(110.),这样就可以把整数字段隐式的装换为十进制数据进行乘除,否则则会使正式除法,回省略小数5、In 、like 、between的用法In主要是指在多个数据中选择一个,进字段名的值在in之内Like主要进行迷糊查询,例:like ‘ %as’Between 主要是指字段值在两个值之间6、N 的用法N 表示国际化(national)用于表示字符串Unicode(nchar、nvarchar)数据类型numeric是指实数例:numeric(12,2)(12指数据长度,2指小数位数)7、数据的优先级1、()2、x 、/、%3、+ 、-、4、5、NOT6、and7、between 、in、like、or8、=8、case表达式的使用Select 字段一,case 字段二When‘条件’then 结果When ‘条件’then 结果End as 字段名from 表名Case 与end是成对出现的Case与case表达式的区别是,case表达式可以添加条件,但是case不可以While 语句的使用:进行1+2+3+…….+100declare@sum intset@sum=0declare@I intSET@I=0WHILE@I<100BEGINSELECT@SUM=@SUM+@ISELECT@I=@I+1ENDSELECT (@sum)求得日期的月份select MESBUSINESS20.dbo.fun_GetRealYYYYMMByDate(SubmitDat e)其中fun是函数9、数据类型Varchar 和char nvarchar 和nchar 前者是一个字节来保存一个字符,语言只能限定于英语,后者是用两个字节来保存一个字符,不进行语言限制在进行查询时如果把null值当做空字符串进行连接时,则可以通过一个CONCAT_NULL_YIELDS_NULL 保持OFF状态语法:SET CONCAT_NULL_YIELDS_NULL OFF同时也可以使用COALESEC 函数进行转变COALESEC(字段)Nvarchar 和varvhar的区别:Nvarchar在分配内存是可以根结自身的大小进行调整,nvarchar(100),其中一百是自己的最大地址,varchar(100)不会根据自身大小进行调整,100就是其占用的内存,不会改变10、函数的使用:数据截取函数SUBSTRING函数使用SUBSTRING(String,start,length)Len函数和DATALENGTH函数二者函数主要进行返回字符串的字符数,其中DATALENGTH返回字符串的字节数,用法:select len(N’字符串)/DATALENGTH(N’字符串)区别:前者不包含尾随空格,后者包括尾随空格Charindex函数返回字符串中字串第一次出现的位置用法:Charindex(substring,string,start-POS)Substring是指字串,start-POS指开始检索的行PATINDEX函数PATINDEX函数主要是返回字符串中某个模式第一次出现的位置用法:PATINDEX(pattern ,string)其中pattern和like函数相似,主要进行模糊查询PATINDEX(‘%0-9%’ ,’abcd12345’),返回5REPLACE函数REPLACE(string,substring1,substring2)Substring1指要被替换的字段,substring2指替换成的字段REPLICATE函数REPLICATE 函数主要进行字符串的复制用法:REPLICATE(string,n)STUFF函数STUFF函数选删除一个字符串再插入一个字符串用法:STUFF(string,POS,length,insertstring)POS是指开始插入的字符,length指长度UPPER函数和LOWER 函数UPPER函数和LOWER函数主要是进行字母的大小写转换的函数RTRIM 函数和LTRIM 函数主要进行前后空格的删除11、自定义函数的书写:书写格式:CREATEFUNCTION函数名(@字段,数据类型)RETURNS@表名TABLE(@字段,数据类型)ASBeginSELECT 0ReturnEnd例如:已知部门id,求其子部门ALTERFUNCTION[dbo].[Fun_BM_GetSubDeptByID](@DeptID INT--指定部门的ID)RETURNS@SubDeptByIDTable TABLE([ID][int]NOTNULL,[PID][int]NULL,cn_name[nvarchar](50)NULL,en_name[nvarchar](50)NULL,iscompany[smallint]NULL)ASBEGINwith SubDeptTree as(select ID,PID,cn_Name,en_name,iscompany from V_BS_Department as a where ID=@DeptID union allselect b.ID,b.PID,_Name,b.en_name,b.iscompany from V_BS_ Department as bjoin SubDeptTree on CHARINDEX(cast(SubDeptTree.id asvarchar(10)),b.PID)>0)insertinto@SubDeptByIDTable select ID,PID,cn_Name,en_name,i scompany from SubDeptTree;return;END12、通配符的使用常用的通配符主要有:’%’、’_’、’字符列(ABC)’、’[字符-字符]’、‘[^字符列或范围]’、’escape(转义)’字符列(ABC)用法:like ‘【abc】%’指以abc中某一个字母开始的字符‘[^字符列或范围]’用法:^表示不存在字符列或者范围内的字符escape(转义)的使用:当字符中存在特殊通配符是,需使用转义字符like%!_% escape!指搜索是否含有_的字符,同样也可以使用like%[_]%时间等待:WAITFOR--WAITFOR--例等待1 小时2 分零3 秒后才执行SELECT 语句waitfor delay ’01:02:03’select * from employee--例等到晚上11 点零8 分后才执行SELECT 语句waitfor time ’23:08:00’select * from employee13、约束:行约束:Create tableId varchar(10)primary key表约束:Create table(Id varchar(10),Name varchar(10)Constraint Id primary key(id))向没有主键的表中进行添加主键Alter tableAddConstraint Idprimary key id删除主键Alter tableDrop Constraint Id创建外键Create table(Id varchar(10)null references 指定参照的包表,Name varchar(10))向没有外建的表中进行添加外键Alter tableAddConstraint 字段Forign key 字段references 指定表名(字段)Default 约束是指向数据库中插入数据时,在定义的约束列会填充相应的默认值-------当分数为空值时,会显示该考生未参加考试删除表中所有数据:delete from 表名//Truncate删除数据Truncate table 表名Compute by 进行数据分组汇总,在一部分数据中进行处理,其必须要与order by连用,切排序字段必须一致视图的重新定义:例:alter view vas select did from empcreate view v as select eid,ename,emp.did as edid,dept.did as did,dnamefrom emp,dept where emp.did=dept.did/*创建视图*/create view v as select * from emp--v为视图名,as为必须14、索引:/*查询指定的数据库有多少张表*/select object_id('employee')--获得指定database对象的ID,如果该对象不存在,返回NULLselect name from syscolumns where id=object_id('employee')--返回指定表的字段select name from sysobjects where xtype='U'--返回指定数据库的用户表--xtype表类型,U表示用户表15、游标:创建游标:Use 数据库Declare 游标名称cursor(scroll可以进行跳转的游标)for select *from 表名------创建普通游标For read only/update ----创建只读游标/更新游标打开游标:Open 游标Fetche next (prior)from 游标----每次查找下一条(上一条)记录进行绝对跳转时使用absolute,如果进行相对跳转时使用relative (relative 1 向后跳转,-1 向前跳转)如果把数据存到其他表中进行展示,则需定义变量,例:Declare @A int(数据类型与原表相同)Fetch absolute from游标into @ASelect@A关闭游标:close 游标释放游标:dealloate 游标,释放后就不能在进行打开--------在进行数据跳转查询时,可以通过‘print @@fetch_seatus’的值来确定跳转是否超出范围,(0 正常,-1超出范围,-2查询值本来不存在)如果需要检索游标中的行数,可以使用@@cursor_row进行检索,但是在某些条件下是不具备检索的对表中数据进行循环查找fetchnextfrom testcursorawhile@@FETCH_STATUS=0beginfetchnextfrom testcursoraend/*游标实例(更新)*/begin trantrdeclare crcursor for select * from empforupdate of ename--通过该游标只能更新ename列--多个列逗号分隔open crfetch next from crupdate emp set ename='log' where current of cr--current of cr通过游标--只更新一行close crdeallocatecrrollback trantr/*删除游标指向的行*/delete from where current of cr对于存储过程,在传递参数时不用添加括号,直接写要传递的参数Exec 存储过程参数16、存储过程中的输出参数用法:例:create proc 存储过程名称@参数1 数据类型outputAsBegin、、、、、、、、、End执行时:Daclare@参数1 数据类型Exec存储过程名称@参数1 outputSelect参数1如果要进行参数输出时,在后面会用到select 自定义的参数(declare 参数)17、触发器创建触发器:Create trigger 触发器名称on 表名for insert/update、delete----事后触发器AsBegin要执行的语句End--insert into、、、、、、、、、、、、、、、、、§、insert是插入式触发,update是更新触发器,delete删除触发器触发器调用时的顺序,只能定义第一个和最后一个语句:sp_settriggerorder @triggername =’触发器名称’,@order=frist/laet/none,stmttype=insert/update其中frist指的是第一个要触发的触发器,last是最后一个要触发的触发器,none 是取消触发的顺序,Create trigger 触发器名称on 表名for instead of delect /insert/update----发器AsBegin要执行的语句End--inseSQL数据学习问题:索引以及触发器的含义以及用途。

相关主题