MSSQL编程:Transact_SQL小手册(各类sql语句年夜汇合...
支持多种存储引擎。Transact_SQL小手册*******************Transact_SQL********************
--语句功能
--数据操纵
SELECT--从数据库表中检索数据行和列
INSERT--向数据库表增加新数据行
DELETE--从数据库表中删除数据行
UPDATE--更新数据库表中的数据
--数据界说
CREATETABLE--创立一个数据库表
DROPTABLE--从数据库中删除表
ALTERTABLE--修正数据库表布局
CREATEVIEW--创立一个视图
DROPVIEW--从数据库中删除视图
CREATEINDEX--为数据库表创立一个索引
DROPINDEX--从数据库中删除索引
CREATEPROCEDURE--创立一个存储历程
DROPPROCEDURE--从数据库中删除存储历程
CREATETRIGGER--创立一个触发器
DROPTRIGGER--从数据库中删除触发器
CREATESCHEMA--向数据库增加一个新形式
DROPSCHEMA--从数据库中删除一个形式
CREATEDOMAIN--创立一个数据值域
ALTERDOMAIN--改动域界说
DROPDOMAIN--从数据库中删除一个域
--数据把持
GRANT--授与用户会见权限
DENY--回绝用户会见
REVOKE--排除用户会见权限
--事件把持
COMMIT--停止以后事件
ROLLBACK--中断以后事件
SETTRANSACTION--界说以后事件数据会见特性
--程序化SQL
DECLARE--为查询设定游标
EXPLAN--为查询形貌数据会见企图
OPEN--检索查询了局翻开一个游标
FETCH--检索一行查询了局
CLOSE--封闭游标
PREPARE--为静态实行筹办SQL语句
EXECUTE--静态地实行SQL语句
DESCRIBE--形貌筹办好的查询
---部分变量
declare@idchar(10)
--set@id=10010001
select@id=10010001
---全局变量
---必需以开首
--IFELSE
declare@xint@yint@zint
select@x=1@y=2@z=3
if@x>@y
printx>y--打印字符串x>y
elseif@y>@z
printy>z
elseprintz>y
--CASE
usepangu
updateemployee
sete_wage=
case
whenjob_level=’1’thene_wage*1.08
whenjob_level=’2’thene_wage*1.07
whenjob_level=’3’thene_wage*1.06
elsee_wage*1.05
end
--WHILECONTINUEBREAK
declare@xint@yint@cint
select@x=1@y=1
while@x<3
begin
print@x--打印变量x的值
while@y<3
begin
select@c=100*@x+@y
print@c--打印变量c的值
select@y=@y+1
end
select@x=@x+1
select@y=1
end
--WAITFOR
--例守候1小时2分零3秒后才实行SELECT语句
waitfordelay’01:02:03’
select*fromemployee
--例比及早晨11点零8分后才实行SELECT语句
waitfortime’23:08:00’
select*fromemployee
***SELECT***
select*(列名)fromtable_name(表名)wherecolumn_nameoperatorvalue
ex:(宿主)
select*fromstock_informationwherestockid=str(nid)
stockname=str_name
stocknamelike%findthis%
stocknamelike%---------([]指定值的局限)
stocknamelike[^F-M]%---------(^扫除指定局限)
---------只能在利用like关头字的where子句中利用通配符)
orstockpath=stock_path
orstocknumber<1000
andstockindex=24
notstocksex=man
stocknumberbetween20and100
stocknumberin(10,20,30)
orderbystockiddesc(asc)---------排序,desc-降序,asc-升序
orderby1,2---------by列号
stockname=(selectstocknamefromstock_informationwherestockid=4)
---------子查询
---------除非能确保内层select只前往一个行的值,
---------不然应在外层where子句顶用一个in限制符
selectdistinctcolumn_nameformtable_name---------distinct指定检索独占的列值,不反复
selectstocknumber,"stocknumber+10"=stocknumber+10fromtable_name
selectstockname,"stocknumber"=count(*)fromtable_namegroupbystockname
---------groupby将表按行分组,指定列中有不异的值
havingcount(*)=2---------having选定指定的组
select*
fromtable1,table2
wheretable1.id*=table2.id--------左内部毗连,table1中有的而table2中没有得以null暗示
table1.id=*table2.id--------右内部毗连
selectstocknamefromtable1
union-----union兼并查询了局集,all-保存反复行
selectstocknamefromtable2
***insert***
insertintotable_name(Stock_name,Stock_number)value("xxx","xxxx")
value(selectStockname,StocknumberfromStock_table2)---value为select语句
***update***
updatetable_namesetStockname="xxx"
Stockname=default
Stockname=null
Stocknumber=Stockname+4
***delete***
deletefromtable_namewhereStockid=3
truncatetable_name-----------删除表中一切行,仍坚持表的完全性
droptabletable_name---------------完整删除表
***altertable***---修正数据库表布局
altertabledatabase.owner.table_nameaddcolumn_namechar(2)null.....
sp_helptable_name----显现表已有特性
createtabletable_name(namechar(20),agesmallint,lnamevarchar(30))
insertintotable_nameselect.........-----完成删除列的办法(创立新表)
altertabletable_namedropconstraintStockname_default----删除Stockname的default束缚
***function(/*经常使用函数*/)***
----统计函数----
AVG--求均匀值
COUNT--统计数量
MAX--求最年夜值
MIN--求最小值
SUM--乞降
--AVG
usepangu
selectavg(e_wage)asdept_avgWage
fromemployee
groupbydept_id
--MAX
--求人为最高的员工姓名
usepangu
selecte_name
fromemployee
wheree_wage=
(selectmax(e_wage)
fromemployee)
--STDEV()
--STDEV()函数前往表达式中一切数据的尺度差
--STDEVP()
--STDEVP()函数前往整体尺度差
--VAR()
--VAR()函数前往表达式中一切值的统计变异数
--VARP()
--VARP()函数前往整体变异数
----算术函数----
/***三角函数***/
SIN(float_expression)--前往以弧度暗示的角的正弦
COS(float_expression)--前往以弧度暗示的角的余弦
TAN(float_expression)--前往以弧度暗示的角的正切
COT(float_expression)--前往以弧度暗示的角的余切
/***反三角函数***/
ASIN(float_expression)--前往正弦是FLOAT值的以弧度暗示的角
ACOS(float_expression)--前往余弦是FLOAT值的以弧度暗示的角
ATAN(float_expression)--前往正切是FLOAT值的以弧度暗示的角
ATAN2(float_expression1,float_expression2)
--前往正切是float_expression1/float_expres-sion2的以弧度暗示的角
DEGREES(numeric_expression)
--把弧度转换为角度前往与表达式不异的数据范例可为
--INTEGER/MONEY/REAL/FLOAT范例
RADIANS(numeric_expression)--把角度转换为弧度前往与表达式不异的数据范例可为
--INTEGER/MONEY/REAL/FLOAT范例
EXP(float_expression)--前往表达式的指数值
LOG(float_expression)--前往表达式的天然对数值
LOG10(float_expression)--前往表达式的以10为底的对数值
SQRT(float_expression)--前往表达式的平方根
/***取近似值函数***/
CEILING(numeric_expression)--前往>=表达式的最小整数前往的数据范例与表达式不异可为
--INTEGER/MONEY/REAL/FLOAT范例
FLOOR(numeric_expression)--前往<=表达式的最小整数前往的数据范例与表达式不异可为
--INTEGER/MONEY/REAL/FLOAT范例
ROUND(numeric_expression)--前往以integer_expression为精度的四舍五进值前往的数据
--范例与表达式不异可为INTEGER/MONEY/REAL/FLOAT范例
ABS(numeric_expression)--前往表达式的相对值前往的数据范例与表达式不异可为
--INTEGER/MONEY/REAL/FLOAT范例
SIGN(numeric_expression)--测试参数的正负号前往0零值1负数或-1正数前往的数据范例
--与表达式不异可为INTEGER/MONEY/REAL/FLOAT范例
PI()--前往值为π即3.1415926535897936
RAND()--用任选的做种子值得出0-1间的随机浮点数
----字符串函数----
ASCII()--函数前往字符表达式最左端字符的ASCII码值
CHAR()--函数用于将ASCII码转换为字符
--假如没有输出0~255之间的ASCII码值CHAR函数会前往一个NULL值
LOWER()--函数把字符串全体转换为小写
UPPER()--函数把字符串全体转换为年夜写
STR()--函数把数值型数据转换为字符型数据
LTRIM()--函数把字符串头部的空格往失落
RTRIM()--函数把字符串尾部的空格往失落
LEFT(),RIGHT(),SUBSTRING()--函数前往部分字符串
CHARINDEX(),PATINDEX()--函数前往字符串中某个指定的子串呈现的入手下手地位
SOUNDEX()--函数前往一个四位字符码
--SOUNDEX函数可用来查找声响类似的字符串但SOUNDEX函数对数字和汉字均只前往0值
DIFFERENCE()--函数前往由SOUNDEX函数前往的两个字符表达式的值的差别
--0两个SOUNDEX函数前往值的第一个字符分歧
--1两个SOUNDEX函数前往值的第一个字符不异
--2两个SOUNDEX函数前往值的第一二个字符不异
--3两个SOUNDEX函数前往值的第一二三个字符不异
--4两个SOUNDEX函数前往值完整不异
QUOTENAME()--函数前往被特定字符括起来的字符串
/*selectquotename(abc,{)quotename(abc)
运转了局以下
----------------------------------{
{abc}*/
REPLICATE()--函数前往一个反复character_expression指定次数的字符串
/*selectreplicate(abc,3)replicate(abc,-2)
运转了局以下
----------------------
abcabcabcNULL*/
REVERSE()--函数将指定的字符串的字符分列按次倒置
REPLACE()--函数前往被交换了指定子串的字符串
/*selectreplace(abc123g,123,def)
运转了局以下
----------------------
abcdefg*/
SPACE()--函数前往一个有指定长度的空缺字符串
STUFF()--函数用另外一子串交换字符串指定地位长度的子串
----数据范例转换函数----
CAST()函数语法以下
CAST()(<expression>AS<data_type>)
CONVERT()函数语法以下
CONVERT()(<data_type>,<expression>[,style])
selectcast(100+99aschar)convert(varchar(12),getdate())
运转了局以下
------------------------------------------
199Jan152000
----日期函数----
DAY()--函数前往date_expression中的日期值
MONTH()--函数前往date_expression中的月份值
YEAR()--函数前往date_expression中的年份值
DATEADD(<datepart>,<number>,<date>)
--函数前往指定日期date加上指定的分外日时代隔number发生的新日期
DATEDIFF(<datepart>,<number>,<date>)
--函数前往两个指定日期在datepart方面的分歧的地方
DATENAME(<datepart>,<date>)--函数以字符串的情势前往日期的指定部分
DATEPART(<datepart>,<date>)--函数以整数值的情势前往日期的指定部分
GETDATE()--函数以DATETIME的缺省格局前往体系以后的日期和工夫
----体系函数----
APP_NAME()--函数前往以后实行的使用程序的称号
COALESCE()--函数前往浩瀚表达式中第一个非NULL表达式的值
COL_LENGTH(<table_name>,<column_name>)--函数前往表中指定字段的长度值
COL_NAME(<table_id>,<column_id>)--函数前往表中指定字段的称号即列名
DATALENGTH()--函数前往数据表达式的数据的实践长度
DB_ID()--函数前往数据库的编号
DB_NAME(database_id)--函数前往数据库的称号
HOST_ID()--函数前往服务器端盘算机的称号
HOST_NAME()--函数前往服务器端盘算机的称号
IDENTITY(<data_type>[,seedincrement]))
--IDENTITY()函数只在SELECTINTO语句中利用用于拔出一个identitycolumn列到新表中
/*selectidentity(int,1,1)ascolumn_name
intonewtable
fromoldtable*/
ISDATE()--函数判别所给定的表达式是不是为公道日期
ISNULL(<check_expression>,<replacement_value>)--函数将表达式中的NULL值用指定值交换
ISNUMERIC()--函数判别所给定的表达式是不是为公道的数值
NEWID()--函数前往一个UNIQUEIDENTIFIER范例的数值
NULLIF(<expression1>,<expression2>)
--NULLIF函数在expression1与expression2相称时前往NULL值若不相称时则前往expression1的值
<pstyle="TEXT-INDENT:2em">以上是自己保藏的,作者我也不记得了。原文地点:http://dev.csdn.net/develop/article/83/83318.shtm
上面我们说了DML的闪回方案。但对于DDL却无能为力,对于大多数的DDL,即使是rowbase格式,二进制日志binlog中仍只记录语句本身。对于删表操作,只记录一个语句droptablet。仅凭这句话,无法还原表的数据。 但是随着数据量的增大,这种成本差距会逐渐减小,趋于相等。(500万数量级只相差10%左右) 语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的! SQL语言是学习所有数据库产品的基础,无论你是做数据库管理还是做数据库开发都是这样。不过具体学习的侧重点要看你将来做哪一块,如果是做数据库管理(DBA),侧重点应该放在SQLServer的系统管理上. 每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。 理解了存储结构,再阅读下性能优化的章节基本上会对sqlserver有个清晰地认识 比如,MicrosoftSQLServer2008的某一个版本可以满足现在的这个业务的需要,而且价格还比Oracle11g要便宜,那么这一产品就是适合的。 发几份SQL课件,以飨阅者 varchar(max)\\\\nvarchar(max)类型的引入大大的提高了编程的效率,可以使用字符串函数对CLOB类型进行操作,这是一个亮点。 分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。
页:
[1]