时间:2016-12-5来源:本站原创作者:佚名

1、case…end(具体的值)case后面有值,相当于c#中的switchcase注意:case后必须有条件,并且when后面必须是值不能为条件。

-----------------case--end---语法结构---------------------selectname,--注意逗号caselevel--case后跟条件when1then骨灰when2then大虾when3then菜鸟endas头衔from[user]

2、case…end(范围)case后面无值,相当于c#中的if…elseif…else….注意:case后不根条件

------------------case---end--------------------------------selectstudentId,casewhenenglishbetween80and90then优whenenglishbetween60and79then良else差endfromScore------------------case---end--------------------------------selectstudentId,casewhenenglish=80then优whenenglish=60then良else差endfromScore-----------------------------------------------------select*,casewhenenglish=60andmath=60then及格else不及格endfromScore

3、if…eles

IF(条件表达式)BEGIN--相当于C#里的{语句1……END--相当于C#里的}ELSEBEGIN语句1……END--计算平均分数并输出,如果平均分数超过分输出成绩最高的三个学生的成绩,否则输出后三名的学生declare

avgint--定义变量select

avg=AVG(english)fromScore--为变量赋值select平均成绩+CONVERT(varchar,

avg)--打印变量的值if

avg60beginselect前三名selecttop3*fromScoreorderbyenglishdescendelsebeginselect后三名selecttop3*fromScoreorderbyenglishend

4、while循环

WHILE(条件表达式)BEGIN--相当于C#里的{语句……BREAKEND--相当于C#里的}--如果不及格的人超过半数(考试题出难了),则给每个人增加分select*fromScoredeclare

conutint,

failcountint,

iint=0--定义变量select

conut=COUNT(*)fromScore--统计总人数select

failcount=COUNT(*)fromScorewhereenglish--统计未及格的人数while(

failcount

conut/2)beginupdateScoresetenglish=english+1select

failcount=COUNT(*)fromScorewhereenglishset

i=

i+1endselect

iupdateScoresetenglish=whereenglish

5、索引使用索引能提高查询效率,但是索引也是占据空间的,而且添加、更新、删除数据的时候也需要同步更新索引,因此会降低Insert、Update、Delete的速度。只在经常检索的字段上(Where)创建索引。1)聚集索引:索引目录中的和目录中对应的数据都是有顺序的。2)非聚集索引:索引目录有顺序但存储的数据是没有顺序的。

--创建非聚集索引CREATENONCLUSTEREDINDEX[IX_Student_sNo]ONstudent([sNo]ASC)

6、子查询将一个查询语句做为一个结果集供其他SQL语句使用,就像使用普通的表一样,被当作结果集的查询语句被称为子查询。所有可以使用表的地方几乎都可以使用子查询来代替。

select*from(select*fromstudentwheresAge30)ast--被查询的子表必须有别名wheret.sSex=男--对子表中的列筛选

转换为两位小数:CONVERT(numeric(10,2),AVG(english))只有返回且仅返回一行、一列数据的子查询才能当成单值子查询。

select平均成绩,(selectAVG(english)fromScore)--可以成功执行select姓名,(selectsNamefromstudent)--错误,因为‘姓名’只有一行,而子表中姓名有多行select*fromstudentwheresClassIdin(selectcidfromClasswherecNameIN(高一一班,高二一班))--子查询有多值时使用in

7、分页

--分页1selecttop3*fromstudentwhere[sId]notin(selecttop(3*(4-1))[sid]fromstudent)--4表示页数select*,row_number()over(orderby[sage]desc)fromstudent--row_number()over(orderby..)获取行号--分页2select*from(select*,row_number()over(orderby[sid]desc)asnumfromstudent)astwherenumbetween(Y-1)*T+1andY*Torderby[sid]desc

--分页3select*from(selectROW_NUMBER()over(orderby[UnitPrice]asc)asnum,*from[Books]where[publisherid]=1)astwheret.numbetween1and20--要查询的开始条数和结束条数

8、连接

selectsName,sAge,casewhenenglish60then不及格whenenglishISnullthen缺考elseCONVERT(nvarchar,english)endas英语成绩fromstudentassleftjoinScoreascons.sid=c.sid内连接innerjoin...on...查询满足on后面条件的数据外连接左连接leftjoin...on...先查出左表中的所有数据再使用on后面的条件对数据过滤右连接rightjoin...on...先查出右表中的所有数据再使用on后面的条件对数据过滤全连接fulljoin...on...(*)交叉连接crossjoin没有on第一个表的每一行和后面表的每一行进行连接没有条件。是其它连接的基础

9.视图优点:

筛选表中的行

防止未经许可的用户访问敏感数据

降低数据库的复杂程度

创建视图

createviewv_Demoasselect......

10、局部变量

---------------------------------局部变量----------------------------声明变量:使用declare关键字,并且变量名已

开头,

直接连接变量名,中间没有空格。必须指明变量的类型,同时还可以声明多个不同类型的变量。declare

namenvarchar(30),

ageint--变量赋值:--1、使用set给变量赋值,只能给一个变量赋值set

age=18set

name=Tianjiaselect

age,

name--输出变量的值--2、使用select可以同时为多个变量赋值select

age=19,

name=Laoniu--3、在查询语句中为变量赋值declare

sumint=18--为变量赋初值select

sum=SUM(english)fromScore--查询语句中赋值select

sum--输出变量值--4、变量作为条件使用declare

snamenvarchar(10)=张三declare

sageintselect

sage=sagefromstudentwheresName=

snameselect

sage--5、使用print输出变量值,一次只能输出一个变量的值,输出为文本形式print

sage

11、全局变量

--------------------------全局变量(系统变量)----------------------------------select*fromstudent0select

error--最后一个T-SQL错误的错误号select

max_connections--获取创建的同时连接的最大数目select

identity--返回最近一次插入的编号

12、事务事务:同生共死指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)–也就是由多个sql语句组成,必须作为一个整体执行这些sql语句作为一个整体一起向系统提交,要么都执行、要么都不执行语法步骤:

开始事务:BEGINTRANSACTION

事务提交:COMMITTRANSACTION

事务回滚:ROLLBACKTRANSACTION

判断某条语句执行是否出错:全局变量

ERROR;

ERROR只能判断当前一条T-SQL语句执行是否有错,为了判断事务中所有T-SQL语句是否有错,我们需要对错误进行累计;

---------------------------模拟转账----------------------------declare

sumErrorint=0--声明变量begintranupdatebanksetbalance=balance-0wherecId=set

sumError=

sumError+

errorupdatebanksetbalance=balance+0wherecId=set

sumError=

sumError+

errorif(

sumError=0)







































白癜风的治愈
济南哪里治疗白癜风

转载请注明原文网址:http://www.helimiaopu.com/hjpz/2588.html
------分隔线----------------------------