【网学网提醒】:网学会员为您提供SQL server 语法总结参考,解决您在SQL server 语法总结学习中工作中的难题,参考学习。
---------------------SQLserver语法总结-------------------------
标示符的作用:[]表示该选项可以省略[,....]表示该选项可以重复一次或者多次<>表示在实际的语句中用相应的内容进行替代{}表示有相应的参数时,{}中的内容是必须的1)创建数据库createdatabasedatabase_name[ON[
[,....n]][,[,....n]]][LOGON[,.....n]][collatecollate_name]filespec定义[primary]([name=logical_file_name',]filename='os_file_name',[,size=size][,maxsze={maxsize|unlimited}][,filegrowth=growth_increment])[,.....n]定义filegroupfilegroupname[,......n]2)删除数据库dropdatabasedatabase_name[,....n]3)数据库更改名称:采用存储过程来进行实现sp_renamedb'old_name','new_name'4)修改数据库alterdatabasedatabase_name{addfile[,....]tofilegroupfilegroup_name|[addlogfile[,...n]]|removefilelogical_file_name|addfilegrupfilegroup_name|removefilegroupfilegroup_name|modifyfile
|modufyname=new_name|modifyfilegroupfilegroup_name{filegroup_property|name=new_filegroup_name}5)缩小数据库dbccshrinkdatabase(database_name[,target_percent][,{noturncate|turncateonly}])说明:target_percent:目标数据库的大小noturncate:收缩后空间不释放turncateonly:收缩后空间释放给操作系统(文件系统)6)创建表createtable[database_name.[owner].|[owner].]table_name({|column_nameAScomputed_column_expression|::=[constraintconstraint_name]}|[{primarykey|unique}][,.....n])[on{file_group|default}][text_imageon{filegroup|default}]说明:列的定义computed_column_expression列的表达式,用于列之间有依赖关系时候使用的表的约束primarykey主键约束unique唯一约束其中的定义部分:::={column_namedata_type}[collate][[defaultconstraint_expression]|[identity[(seed,increment)[notforrepublication]]]][ROWGUIDCOL][][....n]::=[constraintconstraint_name]{[null|notnull]|[{primarykey|unique}[clustered|nonclusterd]
[withfillfactor=fill_factor][on{filegroup|default}]]]|[foreignkey]refrencesref_table[(ref_column)][ondelete{cascade|noaction}][onupdate{cascade|noaction}][notforrepublication]]|check[notforrepublicaton](logical_expression)}::=[constraintcontraint_name]{[{primarykey|unique}[clustered|nonclusterd]{(column[ASC|DESC][,....n])}[withfillfactor=fill_factor][on{filegroup|default}]]|foreignkey[(column[,....n])]referencesref_table[(ref_column[,...n])][ondelete{cascade|noaction}][onupdate{cascade|noa
ction}][notforrepublication]|check[notforrepublication]{search_conditions}}例子:createtablexscj.dbo.xs(xuehaochar(6)notnull,xingmingchar(8)notnull,zhuanyemingchar(10)null,xingbiebitnotnulldefault((0)),chushengshijiansmalldatetimenull,zongxuefentinyintnull,beizhutextnull)5)创建约束创建主建约束constraintconstraint_nameprimarykey[clustered|nonclustered](column_name,...)[on
filegroup]创建唯一约束constraintconstraint_nameunique[clusterd|nonclustered](column_name,....)[onfilegroup]检查约束检查约束指定在一行成功插入或者删除之前,必须要满足的条件。列级的检查约束测试单个列的值,并且编码为列定义的一部分。外键约束constraintconstraint_nameforeignkey(column_name)referencestable_name.(column_name)例子:constraintsaleCusFkforeignkey(custid)refrencesdbo.customer(custID)在外键约束中,ondelete决定了当你试图删除有外键约束的行时,系统所采取的措施。参数noaction表明删除操作失败并返回出错信息参数cascade表明带有外键约束的所有行在指向的行被删除时,都会被随之删除onupdate及其参数的用法同ondelete6)增加、删除和修改表的字段例子:altertablexsaddyuwendecimal(5,3)check(yuwenbetween0and100)altertablexsaltercolumnyuwendecimal(7,5)notnullaltertablexsdropcolumnyuwen7)删除表droptable8)插入表数据语法:方法1insert[into]{table_namewith([,....n])|view_name|row_set_function_limited}{[column_list]{values(default|null|expression}[,....n])|derived_table|executed_statment}}|default_values方法2insert[into]
{table_namewith([,....n])|view_name|rowset_function_limited}{[(column_list)]subquery}例子:insertintoxs(xuehao,xingming,xingbie,chushengshijian,zongxuefen)values('991433','jacky','1','78-12-16',500)insertintoxsvaluse('99143','jacky','jsj','1','78-12-16',500,'');采用子查询insertintocustomer(custid,name,shipcity,shipstate,discount)selectcustid,name,shipcity,'',discountfromcustold;insertintodepart_info(zhuanyeming,renshu)selectzhuanyeming,count(*)fromxsgroupbyzhuanyeming;insertintodepart_info(zhuanyeming,xuefenzonge)execute('selectzhuanyeming,sum(zongxuefen)fromxsgroupbyzhuanyeming');9)更新表数据update{table_namewith([....n])|view_name|rowset_function_limited}set{column_name={expression|default|null}|@variable=expression|@variable=column=expression}[,....n]{{[from[,...n]][where]}例子updatecustomersetname='woodproducts'discount=disocount+0.02wherecustid='950001';updatecustomersetdiscount=defaultwherecustid='950001';updatecustomersetdiscount=nullwherecustid='950001';采
用子查询updateitemsetitemprice=price.itempricefromitem,pricewhereprice.itemid=item.itemid;10)删除数据delete[from]{table_name|view_name}[whereclause]
例子:deletefrommytablewherefirst_column='goodbye'orsecond_column='solong'采用子查询deletefromstudentwheredepart_id=(selectdepart_idfromdepartmentwheredepart_name='计算机');11)清空表数据(但是并不删除这张表)truncatetabletable_name例子:truncatetabledepart_info11)查询操作查询操作由几个子句构成select子句select[ALL|distinct][topn[percent][withties]]::={*|{table_name|view_name|table_alias}.*|{column_name|expression|indentitycol|rowguidcol}[[as]column_alias]|column_alias=expression}[,....n]into子句into子句用于把查询结果存放到一个新建的表中from子句from子句指定需要查询的表from::=
where子句where子句指定数据检索的条件,以限制返回的数据行where|::=......column_name{*=|=*}column_namesearch_condition:指定一个搜索的条件old_outer_join:指定一个外连接*=表示左连接,=*表示右连接
groupby子句groupby子句指定查询结果的分组条件groupby[all]group_by_expression[,.....n][with{cube|rollup}]rollup:与cube不同的是,此选项对groupby子句中的顺序十分敏感,它只返回第一个分组条件指定的列的统计行.having子句having子句指定分组搜索条件havinghaving子句通常与groupby子句连用。having子句和where子句不相同的地方是作用的对象不同,where子句作用的对象是表和视图,having子句作用于组。union操作符union操作符将两个或两个以上的查询结果合并为一个结果集。|()union[all]|()[Union[ALL]|()[,.....n]]union:合并操作符orderby子句orderby子句指定查询结果的排序方式orderby{order_by_expression[ASC|DESC]}ASC:指明排序规则是升序DESC:指明排序规则是降序例子:普通查询:select1+1as;selectxingming,xuehaofromxs;select*fromxs;selectxingming,yuwen,shuxue,yuwen+shuxueaszongfenfromxs;select*fromxswherezongxuefenbetween120and150;selectdistinctzhuanyemingfromxswherezongxuefen>160;distinct消除重复部分selectxingmingfromxswherexuehaoin('001001','001005');selectxingming,zongxuefenfromxswherexingminglike'王__'or'王%';select*fromxswherezhuanyeming='jsj'orderbyzongxuefen;selectxuehao,xingming,zongxuefenfromxswherezhuanyeming='dianzi'orderbyzongxuefen,xuehaodesc;selecttop5xingming,zongxuefenfromxsorderbyzongxuefendesc;selectxingming
,zhuanyemingfromxswherezongxuefen>120groupbyzhuanyeming;selectfirm_id,p_idfromordersgroupbyfirm_id,p_idwithcube|rollupcube和rollup这两个选项可以额外返回按组统计的数据行.与cube不同的是,rollup选项只
返回最高层的分组列(即第一个分组列)的统计数据。selectzhuanyeming,count(*)fromxswherezongxuefen<120groupbyzhuanyeminghavingcount(*)>1;连接查询:selectdistinctxs.xingming,cj.yuwen,cd.shuxuefromxs,cjwherexs.xuehao=cj.xuehao;selectdistinctxs.xingming,cj.yuwen,cd.shuxuefromxsinnerjoincjonxs.xuehao=cj.xuehao;selectproducts.p_idasproducts,orders.p_idasordersfromproducts,orderswhereproducts.quality160)orderbybianhaoselectf_namefromfirmswherefirm_idin(selectfirm_idfromorderswherep_id=(selectp_idfromproductswherep_name='jsj'))orderbyfirm_id;selectp_namefromproductswhereexists
(selectp_idfromorderswherep_id=products.p_idando_quality>5000)orderbyp_id;selectdepartment.dept_id,d_name,avg(e_wage)asavg_wagefromdepartment,employeewheredepartment.dept_id=employee.dept_idgroupbydepartment.dept_id,d_namehavingavg(e_wage)<(selectavg(e_wage)fromemployee)orderbyavg_wage;
12)数据格式bigint>int>smallint>tinyintreal精确到7位小数float精确到15位小数decimal(15,5)第一个数字表示最多占有的位数,第二个数字代表小数点后面可以有的数字binary(n)varbinary(n)imagechar()nchar()varchar()nvarchar()text()ntext()smalldatetimedatetimemoneysmallmoney用户自定义数据类型,需要用存储过程来实现sp_addtypetype,system_data_type[,'nulltype'][,'owner_name']owner_name:指定该类型的数据库所有者.删除用户自定义数据类型,需要用存储过程来实现sp_droptypeTDescription存储过程与函数不同,因为存储过程不返回取代其名称的值,也不能直接用在表达式中间。13)Tr
ansact-SQL程序设计变量:局部变量@开头,全局变量@@开头,变量使用前需要进行申明:declare@变量名变量类型[,......n]set@变量名=变量类型例子declare@idchar(10);select@id='10001';declare@namechar(30),@wagemoney;select@name=e_ename,@wage=e_wagefromemployee
whereemp_id='1001001';select@namease_name,@wagease_wage;14)字符串连接运算符:连接运算符'+'用于连接两个或两个以上的字符串,合并成一个字符串之用。例子:select'月薪最高的员工是'+e_name+',月薪为'+convert(varchar(10),e_wage)fromemployeewheree_wage=(selectmax(e_wage)fromemployee);14)常用函数ascii()返回字符的ascii码------char()返回acsii码代表的字符值lower()转换为小写upper()转换成大写字符str([,length[,]])把数字型的数据转换为字符串型。ltrim()去左边空格rtrim()去右边空格left(,length)取左子串right(,length)取右子串重要的数学函数avg([ALL|DISTINCT]):返回有关列的算术平均值count()函数返回与选择表达式匹配的列中不为null的数据个数selectcount(<列名>)from(<表名>)selectcount(distinctdept_id)asdept_numfromemployee;count(*)判别式匹配所有的行,此时count()函数将计算所有的行数,包括设置为null的行.max():返回最大值min():返回一个系列的最小值sum():返回一个系列的值的总合转换函数cast(as[(length)])convert([length],[,style])15)创建用户自定义函数用户自定义函数的类型:1.标量型函数,返回一个确定类型的标量值。2.内联表值型函数,以表的形式返回一个返回值,即返回的是一个表3.多声明表值型函数,可以看作是标量型和内联表型函数的结合体。它的返回值是一个表,但他和标量型函数一样有一个用begin....end语句括起来的函数体。16)创建用户自定义函数语法:
createfunction[owner_name.]function_name([{@paramenter_namescalar_parament_datatype[=default]}[,.....n])returnsscalar_return_type[with[,....n]][AS]beginfunction_bodyreturnsalar_expressionend::={encryption|schemabinding}例子:createfunctionworkyearwage(@hiredatedatetime,@todaydatetime,@per_wagemoney)asbegindeclare@workyearwagemoneyset@workyearwage=(year(@today)-year(@hiredate))*@per_wagereturn(@workyearwage)end调用函数selectworkyearwage('1991-7-1',getdate(),15)aswork_year_wage17)程序流程控制语句begin...end:用来设定一个程序块,将在begin..end内的所有程序视为一个单元执行.if<条件表达式><命令行或者程序块>[else[条件表达式]]<命令行或者程序块>case<运算式>when<运算式>then<运算式
>.....when<运算式>then<运算式>[else<运算式>]endcasewhen<条件表达式>then<运算式>.....when<条件表达式>then<运算式>[else<运算式>]end
sete_wage=casewhenjob_level='1'thene_wage*1.08casewhenjob_level='2'thene_wage*1.07casewhenjob_level='3'thene_wage*1.06elsee_wage*1.05endwhile<条件表达式>begin<命令行或者程序块>[break][continue]endgoto标示符waitfor:waitfor语句用来暂停程序执行,直到所设定的等待时间已过或者设定时间已到才继续往下执行。waitfor{delay<'时间'>|time<'时间'>|errorexit|processexit|mirrorexit}waitfordelay"01:02:03"select*fromemployee;waitfortime"23:02:03"select*fromemployee;return([整数值])18)视图的概念:视图是一种数据库对象,是从一个或多个数据表或者视图中导入的虚拟表,视图所对应的数据并不真正的存储在视图中,而是存储在所对应的数据表中,视图的结构和数据是对数据表进行查询的结果。对试图中数据的操作与对数据表的操作一样,可以对其进行查询,修改和删除。当通过视图对看到的数据进行修改时,相应基表的数据也会发生变化,同时,若基表的数据发生变化,这种变化也会自动反映到视图中。采用视图的优点:简化查询简化结构数据完整性数据安全性19)创建视图createview<视图名>[(<列名>[,<列名>]
as