SQL常用语法.docx
《SQL常用语法.docx》由会员分享,可在线阅读,更多相关《SQL常用语法.docx(39页珍藏版)》请在冰点文库上搜索。
SQL常用语法
/*1433端口,是SQLServer默认的端口,
SQLServer服务使用两个端口:
TCP-1433、UDP-1434。
其中用于供SQLServer对外提供服务,
1434用于向请求者返回SQLServer使用了哪个TCP/IP端口。
*/
--*************************************************************************创建新表
createtabletableok
(
col1int,
col2_notnullintnotnull,
col3_defaultnchar
(1)notnulldefault('男'),--默认男
col4_defaultdatetimenotnulldefault(getdate()),--默认得到系统时间
col5_checkintnotnullcheck(col5_check>=18andcol5_check<=55),--添加约束,数据值在到之间
col6_checknchar(9)notnullcheck(col6_checklike'msd0902[0-9][^6-9]'),--添加约束,数据值前位必须是‘msd0902’,倒数第两位可以是-9中任意一个数字,最后一位不是-9之间的数字。
cola_primarynchar(5)notnullprimarykey,--建立主键
colb_uniqueintunique,--唯一约束
col7_Identityintnotnullidentity(100,1),--自增长,从开始,每列值增加个
col8_identitynumeric(5,0)notnullidentity(1,1),--自增长,从开始,每列值增加个,最大值是位的整数
col9_guiduniqueidentifiernotnulldefault(newid())--使用newid()函数,随机获取列值
)
--根据已有的表创建新表:
--createtabletab_newlikes1
--createtabletab_newasselectcol1,col2…fromtab_olddefinitiononly
select*intotab_newfroms1
--*************************************************************************修改表
--alter
--主外键/引用/关系约束
/*
altertable[从表名][withcheck]--启用
withnocheck--禁用约束
addconstraintFK_主表名_从表名
foreignkey(从表中的字段名)references主表名(主表中的字段名)
--其它非主外键约束
altertabletablename
addconstraint[约束名][约束类型]具体的约束说明
altertablewf--修改联合主键
addconstraintPk_cola_primaryprimarykey(cola_primary,col1)
*/
--*************************************************************************
--,列增加后将不能删除。
DB2中列加上后数据类型也不能改变,
--唯一能改变的是增加varchar类型的长度
altertable[s1]add[column_name]int--[]数据类型----增加一个列
droptable[s1]--删除新表
altertable[s1]addconstraintprimary_key_idprimarykey([col])--添加主键
altertable[s1]dropprimary_key_id--删除主键
--索引是不可更改的,想更改必须删除重新建
createuniqueindex[idxname]on[s1](id)--创建索引
dropindex[idxname]on[s1]--删除索引
--createviewviewnameasselectidfroms1go--创建视图
dropviewviewname--删除视图
select*froms1whereid='1'--选择
insertintos1(id,tid)values('6','06')--插入
deletefroms1whereid='1'--删除
updates1setid='6'whereid='1'--更新
select*froms1wherenamelike'%value1%'--查找
select*froms1orderbyid,namedesc--排序
selectcount(*)as'总数'froms1--总数
selectsum(id)as'求和'froms1--求和
selectavg(id)as'平均'froms1--平均
selectmax(id)as'最大'froms1--最大
selectmin(id)as'最小'froms1--最小
EXECmaster..xp_fixeddrives--查看硬盘分区
--*************************************************************************字符串函数
--字符串函数长度与分析用
datalength(Char_expr)--返回字符串包含字符数,但不包含后面的空格
--取子串,字符串的下标是从“”,start为起始位置,length为字符串长度,
--实际应用中以len(expression)取得其长度
substring(expression,start,length)
--返回字符串右边第int_expr个字符,还用left于之相反
right(char_expr,int_expr)
--如果check_expression為空,則返回replacement_value的值,
--不為空,就返回check_expression字符操作类
isnull(check_expression,replacement_value)
--自定数据类型Sp_addtype
EXECsp_addtypebirthday,datetime,'NULL'
setnocount{on|off}
--*************************************************************************
--备份sqlserver
--创建备份数据的device
USEmaster
EXECsp_addumpdevice'disk','testBack','c:
\mssql7backup\MyNwind_1.dat'
backupdatabasepubsTOtestBack
--如何为表中的某列设置为null
selectgetdate()--查当前系统时间
selectgetutcdate()--查询UTC时间
--*************************************************************************--联接(leftrightcross)
--联接:
--内联接也叫自然联接--连接条件通常采用“主键=外键”的形式
--select列名列表from表名[inner]join表名on表名.列名=表名.列名
--或
--select列名列表from表名,表名where表名.列名=表名.列名
--左外联接
--select列名列表
--from表名asaleft[outer]join表名asonA.列名=B.列名
--右外联接
--select列名列表
--from表名asAright[outer]join表名asBonA.列名=B.列名
--全外联接
--select列名列表
--from表名asAfull[outer]join表名asBonA.列名=B.列名
--交叉联接
--select列名列表from表名crossjoin表名
--或者
--select列名列表from表名,表名
--合并查询也称联合查询
--查询语句
--union[all]
--查询语句
--*************************************************************************--事务(transaction)
--事务
--begintransaction--标记显式连接事务的起始点。
--committransaction--如果没有遇到错误,可使用该语句成功地结束事务。
--该事务中的所有数据修改在数据库中都将永久有效。
事务占用的资源将被释放。
--RollackTransaction--用来清除遇到错误的事务。
该事务修改的所有数据都返回到事务开始时的状态。
--事务占用的资源将被释放。
--savetrunsaction--用户可以在事务内设置保存点或标记。
保存点是如果有条件地取消事务的一部分,事务可以返回的位置。
--withmark--标记事务选项使事务名置于事务日志中
--隐式事务:
setimplicit_transactins{on|off};
--altertableinsertcreateopendeleterevoke
--truncatetabledropselectfetchgrantupdate
--*************************************************************************--约束(constraint)
--约束
--查看表性别列的默认约束名。
--[exec]Sp_help表名
--域
--default指定列的默认值
--check指定列的允许值
--foreignkey指定必须存在值的列
--null指定是否允许为NULL
--实体
--primarykey唯一标识每一行
--UNIQUE防止非主键重复
--引用
--foreignkey定义值与同一个表或另一个表的主键值匹配的一列或多列组合
--CHECK指定根据同一个表中其他列的值可在列中接受的数据值
--*************************************************************************--约束语法
--createtable语句创建约束
/*createtabletable_name
({|}[,...,n])
:
:
=
{column_namedata_type}
[{defaultconstant_expression|[identity[(seed,increment)]]}]
[[···n]]
列约束定义
:
:
=
[constraintconstraint_name]
{ ?
null|notnull]
|[primarykey|unique]
|[clustered|nonclustered] ?
?
?
?
|[referencesref_table[(ref_column)]
[ondelete{cascade|noaction}]
[onupdate{cascade|noaction}]
}
表约束定义
:
:
=
[constraintconstraint_name]
{ ?
[{primarykey|unique}{(column[,…,n])}]
|foreighkey(column[,…,n])
[referencesref_table[(ref_column[[,…,n])]
[ondelete{cascade|noaction}]
[onupdate{cascade|noaction}]
}
*/
--*************************************************************************--主键约束(primarykey)
--在创建表时创建主键约束
--语法格式:
--createtable数据表名
--(列名数据类型[constraint约束名]primarykey[clustered︱nonclusterde][,…])
--语法格式:
--createtable数据表名
--([constraint约束名]primarykey[clustered︱nonclusterde](列名[,…n])[,…])
--向已有表中添加主键约束**保证主键列没有空值和重复值**
--altertable表名
--add[constraint约束名]primarykey(列名[,…n])[,…])
--删除主键约束
--altertable表名
--dropconstraint约束名
--*************************************************************************--默认值约束(default)
--在创建表时创建默认值约束
--语法格式:
/*
createtable数据表名
(列名数据类型[constraint约束名]default默认值[,…])
*/
--语法格式:
/*
createtable数据表名
([constraint约束名]default默认值for列[,…])
*/
--向已有表中添加默认值约束
/*
altertable表名
add[constraint约束名]默认值for列[,…])
*/
--删除默认值约束
/*
altertable表名
dropconstraint约束名
*/
--*************************************************************************--检查约束(check)
--在创建表时创建检查约束
/*
createtable数据表名
(列名数据类型[constraint约束名]check(逻辑表达式)[,…])
*/
--向已有表中添加检查约束
/*
altertable表名
withnocheck
add[constraint约束名]check(逻辑表达式)[,…])
*/
--删除检查约束
/*
altertable表名
dropconstraint约束名
*/
--可以通过关键字WITHNOCHECK禁止CHECK约束检查表中已有的数据
/*
altertable表名
nocheckconstraint约束名︱checkconstraint约束名
*/
--*************************************************************************--(clusterednonclustered)
--唯一性约束
/*
语法格式:
定义单列唯一约束
createtable数据表名
(列名数据类型[constraint约束名]unique[clustered︱nonclusted][,…])
*/
--语法格式:
定义多列组合唯一约束
/*
createtable数据表名
([constraint约束名]unique[clustered︱nonclusteed](列名[,…n])[,…])
*/
--向已有表中添加唯一约束
/*
altertable表名
add[constraint约束名]unique(列名[,…n])[,…])
*/
--删除唯一约束
/*
altertable表名
dropconstraint约束名
*/
--*************************************************************************--外键(foreighkey)
--外键
--在创建表时创建外键约束
--语法格式:
定义单列外键约束
/*
createtable数据表名
(列名数据类型[constraint约束名][foreignkey]references参照主键表[(参照列)]
[ondeletecascade︱onupdatecascade][,…])
*/
--语法格式:
定义多列组合外键约束
/*
createtable数据表名
([constraint约束名][foreignkey][(列[,…n])]
references参照主键表[(参照列[,…n])]
[ondeletecascade︱onupdatecascade[,…])
*/
--ONDELETECASCADE表示级联删除,ONUPDATECASCADE表示级联更新,他们也称为级联参照完整性约束。
--向已有表中添加外键约束
/*
altertable表名
add[constraint约束名]
[foreignkey][(列[,…n])]
references参照主键表[(参照列[,…n])]
[ondeletecascade︱onupdatecascade][,…])
*/
--删除外键约束
/*
altertable表名
dropconstraint约束名
*/
--*************************************************************************--完整性
--级联引用完整性
/*
cCascade选项*UPDATE行为*DELETE行为*
noaction(Default)*引发错误;回滚操作*引发错误;回滚操作*
cascade*在引用表中更新外键*在引用表中删除行*
setnull*在引用表中设置外键为NULL*在引用表中设置外键为NULL*
setdefault*在引用表中设置外键为DEFAULT值*在引用表中设置外键为DEFAULT值*
*/
--*************************************************************************--触发器(trigger)
--触发器
/*
createtriggertrigger_nameon{table|view}
[withencryption]
{{for|after|insteadof{[insert][,][update]}
[withappend]
[notforreplication]
as
{ifupdatecolumn
[{and|or}update(column)][...n]
|if(columns_updated(){bitwise_operator}updated_bitmask)
{comparison_operator}column_bitmask[...n]
}
sql_statement[...n]
}
}
*/
/*
trigger_name是用户要创建的触发器的名字
table是与用户创建的触发器相关联的表的名字,并且该表已经存在
withencryption表示对包含有CREATETRIGGERsyscomments文本的表进行加密。
after表示只有在执行了指定的操作(INSERT、DELETE、UPDATE)之后触发器才被激活,
执行触发器中的SQL语句。
若使用关键字FOR,则表示为AFTER触发器,
且该类型触发器仅能在表上创建。
INSTEADOF当为表或视图定义了针对某一操作(INSERT、DELETE、UPDATE)
的INSTEADOF类型触发器且执行了相应的操作时,
尽管触发器被触发,但相应的操作并不被执行,而运行的仅是触发器SQL语句本身。
[delete][,][insert][,][update]关键字用来指明哪种数据操作将激活触发器。
至少要指明一个选项。
withappend表明增加另外一个已存在某一类型触发器。
notforreplication表明当复制处理修改与触发器相关联的表时,触发器不能被执行。
as是触发器将要执行的动作
sql_statement是包含在触发器中的条件语句或处理语句。
触发器的条件语句定义了另外的标准
来决定将被执行的INSERT、DELETE、UPDATE语句是否激活触发器。
ifupdatecolumn用来测定对某一确定列是插入操作还是更新操作。
但不与删除操作用在一起。
ifcolumns_updated仅在INSERT和UPDATE
类型的触发器中使用,用其来检查所涉及的列是被更新还是被插入。
bitwise_operator是在比较中使用的位逻辑运算符。
updated_bitmask是那些被更新或插入的列的整型位掩码。
comparison_operat