SQL学习总结Word格式.docx

上传人:b****5 文档编号:16478297 上传时间:2022-11-24 格式:DOCX 页数:19 大小:48.15KB
下载 相关 举报
SQL学习总结Word格式.docx_第1页
第1页 / 共19页
SQL学习总结Word格式.docx_第2页
第2页 / 共19页
SQL学习总结Word格式.docx_第3页
第3页 / 共19页
SQL学习总结Word格式.docx_第4页
第4页 / 共19页
SQL学习总结Word格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

SQL学习总结Word格式.docx

《SQL学习总结Word格式.docx》由会员分享,可在线阅读,更多相关《SQL学习总结Word格式.docx(19页珍藏版)》请在冰豆网上搜索。

SQL学习总结Word格式.docx

Charindex

用来寻找一个指定的字符在另一个字符串中的起始位置

SELECTCHARINDEX(‘lucia'

’Iamlucia'

)返回:

6

Len

返回传递给它的字符串长度

Selectlen(‘sql’)

Lower

将传递给他的字符串变成小写

Selectlower(‘SQL’)返回sql

Upper

将传递给他的字符串变成大写

Ltrim

清空字符左边的空格

Selectltrim(‘你好’)返回你好

Rtrim

清空字符右边的空格

Right

从字符串右边返回指定数目字符

Selectright(‘玛丽莲.梦露,2’)梦露

Replace

替换一个字符串中的字符

Selectreplace(‘连玉龙’,‘龙’,‘凤'

返回:

连玉凤

Studiff

在一个字符串中,删除指定长度的字符,并在该位置插入一个新的字符串

Selectstudiff('

ABCDEFG'

2,3,'

我的音乐我的世界'

A我的音乐我的世界EFG

日期函数

Getdate

取得当前的系统日期

Selectgetdate()

Dateadd

将指定的数值添加到指定的日期后面的日期

Selectdateadd(mm,4,’01/01/1999’)

返回05/01/19999

Datediff

两个日期之间的指定日期

Selectdatediff(mm,’01/01/1999’,’05/01/1999’)

Datename

日期中指定日期部分的字符串

Selectdatename(dw,‘01/01/2000’)

Datepart

日期中指定日期部分的整数形式

Selectdatepart(day,‘01/15/2000’)

数学函数

Convert

用来转变数据类型

Selectconvert(varchar(5),1234)

Current_user

返回当前用户的名字

Selectcurrent_user,返回你登录的用户名

Datalength

给指定表达式的字节数

Selectdatalegth(‘中国’)

Host_name

返回当前用户所登录的计算机名字

Selectuser_name

(1)

从任何数据库中返回‘abo’

备注:

日期函数中datediff可以用来计算时间差(例如,年龄)getdate()用来设置默认

这些函数容易记也容易忘,尤其是书写的格式规范。

5like用法

*通配符

*%包含零个或更多字符串

*_(下划线)任何单个字符

*[]指定范围([a-f])或集合[abcdf]中任何的一个单个字符

*[^]不属于指定范围[a-f]或集合[abcdef]的任何单个字符

SELECT*FROM数据表

WHERE编号LIKE‘00[^8]%[AC]%’

可能会查询出的编号值为(a)。

A、0090ACD

B、007_AFF

C、008&

DCG

D、008C

6.聚合函数

*Count(),*Max(),*Min(),*Avg(),sum()

6.1分组查询—groupby—having

Select任职部门,count(*)

Fromlucia工作室

Where目前的薪资>

=2000

Groupby任职部门

Havingcount(*)>

4

7.多表查询

*innerjoin内连接:

两张表的顺序颠倒对结果没有影响

*leftjoin左连接:

左边的表是主表,表的顺序不能颠倒

*rightjoin右连接:

右边的表是主表,表的顺序不能颠倒

SELECTS.姓名,C.课程编号,C.笔试成绩

FROMStudentInfoASS

INNERJOINScoreInfoASC

ONC.学号=S.学号

8.建表的三大范式

v第一范式的目标是确保每列的原子性

v如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF)

v

v如果一个表中个字段关系满足1NF,并且除了主键以外的其它列,都依赖于该主键,则满足第二范式(2NF)

v第二范式要求每个表只描述一件事情(去除不依赖主键或部分依赖主键的列)

由第二范式可知:

产品价格不是依赖订单的编号

v如果一个关系满足2NF,并且除了主键以外的其它列都不传递依赖于主键列,则满足第三范式(3NF)

v第三范式的目标是确保每列都直接依赖主键

由第三范式可知:

产品的结果是依赖产品编号而不是直接依赖订单编号的

9.主键(primarykey),外键(foreignkey)创建/添加语法

ConstraintPK_主键名称primarykey(主键名称)

ConstraintFK_外键的名称foreignkey(外键名称)

References父表(父表字段)

修改

Altertable子表

AddConstraintFK_外键的名称foreignkey(外键名称)

10变量(局部变量,全局变量)

局部变量

*声明局部变量

DECLARE@变量名数据类型

*赋值

*SET@变量名=值

*SELECT@变量名=值

全局变量

是系统的,是不能改变的

较常用的是:

变量

变量含义

@@ERROR

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

@@IDENTITY

最后一次插入的标识值

@@LANGUAGE

当前使用的语言的名称

@@MAX_CONNECTIONS

可以创建的同时连接的最大数目

@@ROWCOUNT

受上一个SQL语句影响的行数

@@SERVERNAME

本地服务器的名称

@@TRANCOUNT

当前连接打开的事务数

@@VERSION

SQLServer的版本信息

11.if……else,while,caseend,whenthen用法例题

=============ifelse===================

ifexists(select*fromsysobjectswherename='

NewTable'

droptableNewTable

select姓名,S.学号,笔试成绩,机试成绩,是否通过=case

when笔试成绩>

60and机试成绩>

60then1

else0

end

intoNewTablefromstudentinfoass

leftjoinscoreinfoasc

ons.学号=c.学号

go

==============while===================

declare@writtenAvgdecimal

declare@labavgdecimal

select@writtenAvg=avg(笔试成绩)fromstudentscore

select@labavg=avg(机试成绩)fromstudentscore

if(@writtenAvg>

@labavg)

begin

print('

笔试成绩大于机试成绩'

while(1=1)

updatestudentscoreset机试成绩=机试成绩+1

if(selectmax(机试成绩)fromstudentscore)>

=97

break

end

else

机试成绩大于笔试成绩'

updatestudentscoreset笔试成绩=笔试成绩+1

if(selectmax(笔试成绩)fromstudentscore)=97

select*fromstudentscore

============caseend==============

select姓名,学号

笔试成绩=

case

when笔试成绩isnullthen'

缺考'

elseconvert(varchar(5),笔试成绩)

end

机试成绩=

case

when机试成绩isnullthen'

elseconvert(varchar(5),机试成绩)

是否通过=

case

when是否通过=1then'

是'

when是否通过=0then'

否'

fromNewTable

===========whenthen=====================

select*fromnewTable

12子查询(in,exists)

SELECT姓名FROMStudentInfo

WHERE学号

IN

(SELECT学号FROMScoreInfo)

GO

基本上in可以等价于“=”可是“=”只能是子查询返回的是单个结果,如果是多个查询结果只能用in

Exists用法用例:

IFEXISTS(SELECT*FROMsysdatabasesWHEREname=‘LuciaBank'

DROPDATABASELuciaBank

14存储过程

优点:

<

1>

执行的速度更快

2>

允许模块化程序设计

3>

提高系统安全性

4>

减少网络流通量

14.1分类

系统存储过程

“sp_”或者是“XP_”

常用系统存储过程

Sp_database:

列出服务器上的所有数据库

Sp_helpdb:

报告有关指定数据库或所有数据库的信息

Sp_rename:

更改数据库的名称

Sp_tables:

返回当前环境下可查询的对象的列表

sp_columns:

返回某个表列的信息

sp_help:

查看某个表的所有信息

sp_helpconstraint:

查看某个表的约束

sp_helpindex:

查看某个表的索引

sp_password:

添加或修改登录帐户的密码

sp_helptext:

显示默认值、未加密的存储过程、用户定义的存储过程、触发器或视图的实际文本

14.2自定义的存储过程

14.2.1定义存储过程的语法和调用的语法

CREATEPROC[EDURE]存储过程名

@参数1数据类型=默认值OUTPUT,

……,

@参数n数据类型=默认值OUTPUT

AS

SQL语句

调用的语法

EXEC过程名[参数]

14.2.2不带参数的存储过程

/*------------------------------------------------------

存储过程(不带参数)

题目:

查看本次考试的平均分数,并查看没有通过的学生的名单

----------------------------------------------------------*/

createprocedurep_scoreInfo

as

declare@writtenAvgdecimal

declare@labAvgdecimal

select@writtenAvg=avg(笔试成绩),@labAvg=avg(机试成绩)fromstudentscore

print'

笔试成绩的平均分'

+convert(nvarchar(5),@writtenAvg)

机试成绩的平均分'

+convert(nvarchar(5),@labAvg)

60and@labAvg>

60)

本班的成绩优秀'

本班的成绩很差'

-------------------------------------------------------'

print'

本班成绩不及格的人名单'

selects.学号,姓名,笔试成绩,机试成绩

fromstudentinfos,studentscorec

wheres.学号=c.学号

and笔试成绩<

60or机试成绩<

60

go

execp_scoreInfo

14.2.3带参数的存储过程

存储过程的参数分两种:

输入参数,输出参数

例题

/*--------------------------------------------------------------

带参数的存储过程

题目:

可以规定及格的分数

-----------------------------------------------------------------*/

createprocedureproc_scoreinfoHaveParams

@writePassdecimal,--默认值是60

@labPassdecimal

declare@writtenAvgdecimal

print'

@writePassand@labAvg>

@labPass)

@writePassor机试成绩<

@labPass

execproc_scoreinfoHaveParams45,35

*--------------------------------------------------------------

带参数(输出)的存储过程

查看本次考试的平均分数,并查看没有通过的学生的人数

createprocedureproc_outputscoreInfo

@sumNotPassintoutput,

@writePassdecimal=60,--默认值是60

@labPassdecimal=60

declare@writtenAvgdecimal

select@sumNotPass=count(*)fromstudentscorewhere笔试成绩<

@writtenAvgor机试成绩=@labAvg

declare@sumint

execproc_outputscoreInfo@sumoutput,35,35

***************************************'

if@sum>

=3

本班成绩不及格的人数是'

+convert(varchar(5),@sum)+'

及格人太少,及格分数要在调低'

及格人数适中,及格分数线可以'

dropprocproc_outputscoreInfo

14.2.4RAISERROR用法

语法:

RAISERROR(msg_id|msg_str,severity,stateWITHoption[,...n]])

msg_id:

在sysmessages系统表中指定用户定义错误信息

msg_str:

用户定义的特定信息,最长255个字符

severity:

定义严重性级别。

用户可使用的级别为0–18级

state:

表示错误的状态,1至127之间的值

option:

指示是否将错误记录到服务器错误日志中

当输入的及格分数不再1到100之间则报错

declare@sumint,@tint

execproc_outputscoreInfo@sumoutput,80

set@t=@@error

错误号:

'

+convert(nvarchar(10),@t)

if@t<

raiserror('

及格线错误,请重新输入(1——100之间)'

16,1)

return

15事物

15.1事物概念

v事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作

v这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行

v事务是一个不可分割的工作逻辑单元

15.2事物四个属性

◆原子性(Atomicity):

事务是一个完整的操作。

事务的各步操作是不可分的(原子的);

要么都执行,要么都不执行

◆一致性(Consistency):

当事务完成时,数据必须处于一致状态

◆隔离性(Isolation):

对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务

◆永久性(Durability):

事务完成后,它对数据库的修改被永久保持,事务日志能够保持事务的永久性

15.3管理事务T_SQL语句

开始事务:

beigintransaction

提交事务:

committransaction

回滚事物:

rollbacktransaction

15.4判断出错的语句@@ERROR

v15.5事务的分类:

◆显性事务:

用BEGINTRANSACTION明确指定事务的开始,这是最常用的事务类型

◆隐性事务:

通过设置SETIMPLICIT_TRANSACTIONSON语句,将隐性事务模式设置为打开,下一个语句自动启动一个新事务。

当该事务完成时,再下一个T-SQL语句又将启动一个新事务

◆自动提交事务:

这是SQLServer的默认模式,它将每条单独的T-SQL语句视为一个事务,如果成功执行,则自动提交;

如果错误,则自动回滚

15.6例题

---------------------------------

--转账事物处理

--------------------------------

begintransaction

declare@errorcountint

set@errorcount=0

updateclientAccountset余额=余额-1000

where账号='

6226900707220987'

set@errorcount=@errorcount+@@error

updateclientAccountset余额=余额+1000

WHERE账号='

6226900707220654'

set@errorcount=@e

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 生产经营管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1