SQL语法大全TsqlWord文档下载推荐.docx
- 文档编号:19892112
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:29
- 大小:32.55KB
SQL语法大全TsqlWord文档下载推荐.docx
《SQL语法大全TsqlWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《SQL语法大全TsqlWord文档下载推荐.docx(29页珍藏版)》请在冰豆网上搜索。
EXISTS()语句:
检测是否存在stuDB数据库,如果存在stuDB数据库,则删除
sysdatabases表在master数据库中,保存着当前系统中所有的数据库
三、表
1、建表
--判断是否存在该表,有则删除
USEstuDB--将当前数据库设置为stuDB,以便在stuDB数据库中建表
IFEXISTS(SELECT*FROMsysobjectsWHEREname='
stuInfo'
)
DROPTABLEstuInfo
--建表
CREATETABLEstuInfo/*-创建学员信息表-*/
stuNameVARCHAR(20)NOTNULL,--姓名,非空(必填)
stuNoCHAR(6)NOTNULL,--学号,非空(必填)
stuAgeINTNOTNULL,--年龄,INT类型默认为4个字节
stuIDNUMERIC(18,0),--身份证号
stuSeatSMALLINTIDENTITY(1,1),--座位号,自动编号
stuAddressTEXT--住址,允许为空,即可选输入
)
2、删表
USE库名--将当前数据库设置为stuDB,以便在stuDB数据库中建表
表名'
DROPTABLE表名
四、约束
1、主键(primarykey)
ALTERTABLEstuInfo
ADDCONSTRAINTPK_stuNoPRIMARYKEY(stuNo)
2、唯一性(uinque)
ADDCONSTRAINTUQ_stuIDUNIQUE(stuID)
3、默认填写(default('
……'
)for)
ADDCONSTRAINTDF_stuAddress
DEFAULT('
地址不详'
)FORstuAddress
4、检查(check(……))
ADDCONSTRAINTCK_stuAge
CHECK(stuAgeBETWEEN15AND40)
5、外键(foreignkey(列名)references主表名(列名))
ALTERTABLEstuMarks
ADDCONSTRAINTFK_stuNo
FOREIGNKEY(stuNo)REFERENCESstuInfo(stuNo)
6、删除约束
ALTERTABLE有约束的表名DORP约束名
五、通配符
通配符
解释
示例
'
_'
一个字符
ALike'
C_'
%
任意长度的字符串
BLike'
CO_%'
[]
括号中所指定范围内的一个字符
CLike'
9W0[1-2]'
[^]
不在括号中所指定范围内的一个字符
DLike'
%[A-D][^1-2]'
六、插入数据
INSERT表名(列名)VALUES(插入的列值)
insertstuinfo(stuname,stuno,stuage,stuid,stuaddress)
values('
张三'
001,20,100,'
hello'
1、注意事项
A、每次插入一行数据,不可能只插入半行或者几列数据,因此,插入的数据是否有效将按照整行的完整性的要求来检验。
B、每个数据值的数据类型、精度和小数位数必须与相应的列匹配。
C、不能为标识列指定值,因为它的数字是自动增长的。
D、如果在设计表的时候就指定了某列不允许为空,则必须插入数据。
E、插入的数据项,要求符合检查约束的要求。
F、具有缺省值的列,可以使用DEFAULT(缺省)关键字来代替插入的数值。
2、插入多行数据
(1)对象表存在
INSERTINTO<
表名>
(列名)
SELECT<
列名>
FROM<
源表名>
INSERTINTOstuinfobak(stuname,stuno,stuage)
SELECTstuname,stuno,stuageFROMstuinfo
(Stuinfobak表必须在数据库中存在)
(2)对象表不存在
SELECT(列名)INTO<
SELECTstuname,stuno,stuageINTOstuinfobak1FROMstuinfo
(Stuinfobak1表必须在数据库中不存在)
(3)插入新的标识列
IDENTITY(数据类型,标识种子,标识增量)
SELECTIDENTITY(数据类型,标识种子,标识增长量)AS列名
INTO新表FROM原始表
SELECTStudents.SName,Students.SAddress,Students.SEmail,
IDENTITY(int,1,1)AsStudentID
INTOTongXunLuEXFROMStudents
(4)插入多行内容
(列名)
SELECT列内容UNION
……
七、更新数据行
UPDATE<
SET<
列名=更新值>
[WHERE<
更新条件>
]
UPDATEStudents
SETSAddress='
北京女子职业技术学校家政班'
WHERESAddress='
北京女子职业技术学校刺绣班'
UPDATEScores
SETScores=Scores+5
WHEREScores<
=95
八、删除数据行
1、删除指定的行
DELETEFROM<
[WHERE<
删除条件>
注意:
DELETEFROM不会只删单个字段,要删就是整行
2、删除所有记录
TRUNCATETABLE<
不能用于有外键约束引用的表。
删除后,表的结构、列、约束、索引不变。
九、查询
FROM<
查询条件表达式>
]
[ORDERBY<
排序的列名>
[ASC(升)或DESC(降)]]--默认为升序
1、查询全部的行和列
SELECT*FROMStudents
2、查询部分行
WHERE<
3、自定义命名查询结果中的列名
(1)使用AS来命名列
SELECT原表中列名AS查询结果中显示的列名
SELECTStunoAS学员编号,StuNameAS学员姓名,StuAddressAS学员地址
FROMstuinfo
WHERESAddresslike'
(2)合并两列数据,以规定格式输出查询结果
SELECT原表中列名+'
.'
+原表中列名AS查询结果中显示的列名
FROM表名
(3)使用=来命名列
SELECT查询结果中显示的列名=原表中列名
SELECT查询结果中显示的列名=原表中列名+'
+原表中列名
(4)查询某几列为空的行
SELECT列名A
FROM表名
WHERE条件列名BISNULL
显示结果:
B列为空的A列内容。
(5)显示结果中加入常量列
SELECT列A=SName,列B=SAddress,'
常量列内容'
AS常量列名称
FROMStudents
SELECT姓名=SName,地址=SAddress,'
河北新龙'
AS学校名称
(6)限制查询结果输出的行数
SELECTTOP5列名
WHERE条件
显示结果:
符合条件的前五行。
(7)返回百分之多少行
SELECTTOP20PERCENT列名
符合条件的行数的前20%行。
(8)升序排列(默认)ASC
SELECTStudentIDAs学员编号,(Score*0.9+5)As综合成绩
FROMScore
WHERE(Score*0.9+5)>
60
ORDERBYScore
(9)降序排列DESC
SELECTAu_Lname+'
+Au_fNameASEMP
From表AUnion
SELECTfName+'
+LNameASEMP
From表B
ORDERBYEMPDESC
混合查找两张表中的列,并按格式输出到新列中,并按新列排序输出。
(10)按多列排序
SELECTStudentIDAs学员编号,ScoreAs成绩
WHEREScore>
ORDERBYScore,studentID
先按Score排序,再按studentID排序。
十、模糊查询
1、LIKE
查询时,字段中的内容并不一定与查询内容完全匹配,只要字段中含有这些内容。
SELECTStuNameAS姓名
FROMStuinfo
WHEREstunameLIKE'
徐%'
姓为“徐”的人的名字。
2、ISNULL
把某一字段中内容为空的记录查询出来。
SELECTStuNameAS姓名,StuAddressAS地址。
WHEREStuAddressISNULL
把地址栏为空的显示出来。
3、BETWEEN
把某一字段中内容在特定范围内的记录查询出来。
SELECTStuNo,Score
FROMStumarks
WHEREScoreBETWEEN60AND80
把分数80>
=Score>
=60的显示出来。
4、IN
把某一字段中内容与所列出的查询内容列表匹配的记录查询出来。
SELECTStuNameAS学员姓名,StuAddressAs地址
FROMStuinfo
WHEREStuAddressIN('
北京'
'
广州'
上海'
把地址在('
)里的显示出来。
十一、聚合函数
1、SUM(求和)
SELECTSUM(Score)
WHERE条件
把符合条件的Score求和,然后显示结果。
2、AVG(求平均值)
SELECTAVG(Score)AS平均成绩
FromScore
WHEREScore>
=60
把Score>
=60的成绩求平均值,然后显示结果,显示的列名为“平均成绩”
3、MAX、MIN(求最大、最小值)
SELECTMAX(Score)AS最高分,MIN(Score)AS最低分
FromScore
WHEREScore>
把Score>
=60中的最高分和最低分显示出来。
4、COUNT(计数)
SELECTCOUNT(*)AS及格人数
WHEREScore>
把Score列中,>
=60的个数统计出来,然后显示统计数目。
十二、分组查询
1、单列分组查询
SELECTCourseID,AVG(Score)AS课程平均成绩
FROMScore
GROUPBYCourseID
按CourseID组求Score的平均值,然后将CourseID和平均值显示出来。
2、多列分组
SELECTStudentIDAS学员编号,CourseIDAS内部测试,AVG(Score)AS平均成绩
GROUPBYStudentID,CourseID
显示所有学员的:
“学员编号”(StudentID),“内部测试”(CourseID),“平均成绩”(AVG(Score))。
如果同一CourseID组中出现了相同的StudentID,则显示出来的是这一CourseID组中相同的StudentID的平均成绩。
3、HAVING(追加条件)
SELECTStudentIDAS学员编号,CourseIDAS内部测试,AVG(Score)AS平均成绩
GROUPBYStudentID,CourseID
HAVINGCOUNT(Score)>
1
显示补考学员的:
如果同一CourseID组中的同一StudentID组中记录Score的次数,如果次数>
1,则显示出来“学员编号”(StudentID),“内部测试”(CourseID),“平均成绩”(AVG(Score))。
4、条件比较顺序
WHERE子句从数据源中去掉不符合其搜索条件的数据。
GROUPBY子句搜集数据行到各个组中,统计函数为各个组计算统计值。
HAVING子句去掉不符合其组搜索条件的各组数据行。
WHERE———>
GROUPBY———>
HAVING
十三、多表联接查询
1、分类
(1)内联接(INNERJOIN)
(2)外联接
A、左外联结(LEFTJOIN)
B、右外联结(RIGHTJOIN)
C、完整外联结(FULLJOIN)
(3)交叉联接(CROSSJOIN)
2、多表内联结查询
(1)建立联接
SELECTS.SName,C.CourseID,C.Score
FromScoreASC
INNERJOINStudentsASS
ONC.StudentID=S.SCode
把Score表和Students表建立内联结,查询C.StudentID=S.SCode时,显示S.SName,C.CourseID,C.Score的内容。
(2)未建立联接
SELECTStudents.SName,Score.CourseID,Score.Score
FROMStudents,Score
WHEREStudents.SCode=Score.StudentID
同上。
(3)多表联接查询—三表联接
SELECTS.SNameAS姓名,CS.CourseNameAS课程,C.ScoreAS成绩
FROMStudentsASS
INNERJOINScoreASC
ON(S.SCode=C.StudentID)
INNERJOINCourseASCS
ON(CS.CourseID=C.CourseID)
(4)区别
建立联接的查询速度比没有建立的快得多。
3、多表外联接查询
(1)左外联接
(LEFTJOIN或LEFTOUTERJOIN)
FromStudentsASS
LEFTJOINScoreASC
Students为左表(leftjoin)Score为右表。
左表中有的,右表中没有的显示空值(NULL)。
(2)右外联接
(RIGHTJOIN或RIGHTOUTERJOIN)
SELECTTitles.Title_id,Titles.Title,Publishers.Pub_name
FROMtitles
RIGHTOUTERJOINPublishers
ONTitles.Pub_id=Publishers.Pub_id
与左外连接相反。
(3)完整外联接
(FULLJOIN或FULLOUTERJOIN)
左表和右表中的所有行。
当某行在另一个表中没有匹配行时,则另一个表的选择列为空值;
如果有匹配行,则显示结果包括左右表中的所有列值。
4、多表交叉联接查询
(CROSSJOIN)
交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行一一组合,相当于两个表“相乘”。
十四、数据库用户
1、创建登录帐户
(1)添加Windows登录帐户
EXECsp_grantlogin'
jbtraining\S26301'
(域名\用户名)
(2)添加SQL登录帐户
EXECsp_addlogin'
zhangsan'
'
1234'
EXEC表示调用存储过程,存储过程类似C语言的函数。
内置的系统管理员帐户sa,密码默认为空,建议修改密码
2、创建数据库用户
USE库名
EXECsp_grantdbaccess'
登录帐户名'
数据库用户名'
其中,“数据库用户“为可选参数,默认为登录帐户,即数据库用户默认和登录帐户同名。
3、给用户分配权限
GRANT权限[ON表名]TO数据库用户
权限:
select、insert、update、delete、createtable……
4、系统内置的数据库用户
(1)dbo用户
A、表示数据库的所有者(DBOwner)
B、无法删除dbo用户,此用户始终出现在每个数据库中
(2)guest用户
A、适用于没有数据库用户的登录帐号访问
B、每个数据库可有也可删除
十五、T—SQL编程
1、变量
(1)局部变量
A、局部变量必须以标记@作为前缀,如@age。
B、局部变量的使用也是先声明,再赋值。
C、声明局部变量
DECLARE@变量名数据类型
D、赋值
SET@变量名=值
SELECT@变量名=值
(2)全局变量
A、全局变量必须以标记@@作为前缀,如@@version
B、全局变量由系统定义和维护,我们只能读取,不能修改全局变量的值
C、全局变量的类型与含义
变量
含义
@@ERROR
最后一个T-SQL错误的错误号
@@IDENTITY
最后一次插入的标识值
@@LANGUAGE
当前使用的语言的名称
@@MAX_CONNECTIONS
可以创建的同时连接的最大数目
@@ROWCOUNT
受上一个SQL语句影响的行数
@@SERVERNAME
本地服务器的名称
@@TRANSCOUNT
当前连接打开的事务数
@@VERSION
SQLServer的版本信息
2、输出语句
(1)print局部变量或字符串
结果在消息窗口以文本方式显示。
(2)SELECT局部变量AS自定义列名
结果在网格窗口以表格方式显示。
3、逻辑控制语句
(1)IF-ELSE条件语句
IF(条件)
BEGIN
语句块……
END
ELSE
……
(2)WHILE循环语句
WHILE(条件)
(BREAK)--跳出循环,可选语句。
(3)CASE—END多分支语句
CASE
WHEN条件1THEN结果1
WHEN条件2THEN结果2
……
(ELSE)--其他结果,可选语句。
END
(4)GO批处理语句
语句1
语句2
GO--批处理语句的标志
A、批处理是包含一个或多个SQL语句的组,从应用程序一次性地发送到SQLServer执行。
SQLServer将批处理语句编译成一个可执行单元,此单元称为执行计划。
执行计划中的语句每次执行一条。
B、GO是批处理的标志,表示SQLServer将这些T-SQL语句编译为一个执行单元,提高执行效率。
一般是将一些逻辑相关的业务操作语句,放置在同一批中,这完全由业务需求和代码编写者决定。
C、SQLServer规定:
如果是建库、建表语句、以及我们后面学习的存储过程和视图等,则必须在语句末尾添加GO批处理标志。
十六、高级查询
1、简单的子查询
SELECT*FROMstuInfo
WHEREstuAge>
(SELECTstuAgeFROMstuInfowherestuName='
姓名'
(1)子查询的一般
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL 语法 大全 Tsql