SQL Server知识点全集.docx
- 文档编号:9666863
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:46
- 大小:29.41KB
SQL Server知识点全集.docx
《SQL Server知识点全集.docx》由会员分享,可在线阅读,更多相关《SQL Server知识点全集.docx(46页珍藏版)》请在冰豆网上搜索。
SQLServer知识点全集
--1.SQL由什么文件和什么文件组成?
/*
答:
SQL由数据文件和日志文件组成
*/
--2.SQL的数据文件分哪两类?
扩展名分别是什么?
分别可以有多少个?
/*
答:
SQL的数据文件分主数据文件和二级数据文件。
主数据文件有且只有一个,二级数据文件0-N个
扩展名:
主数据文件:
MDF
二级数据文件:
NDF
*/
--3.SQL文件组和文件的关系?
/*
答:
文件存放在文件组中,一个文件只能属于一个文件组;
一个文件组可以有多个文件。
*/
--4.用代码创建多个数据文件的数据库?
/*
答:
CREATEDATABASEDatabaseName
primaryON
(
name=逻辑名,
filename=物理名,--扩展名是mdf
size=初始大小,
maxsize=最大值,
filegrowth=增长
),--多个文件组之间用逗号分隔
filegroup文件组名
(
name=逻辑名,
filename=物理名,--扩展名是ndf
size=初始大小,
maxsize=最大值,
filegrowth=增长
)
logON
(
name=逻辑名,
filename=物理名,--扩展名是ldf
size=初始大小,
maxsize=最大值,
filegrowth=增长
)
*/
--5.用代码创建表?
CREATETABLETABLE_NAME--创建表的表名
(
[ID]intIDENTITY(1,1)PRIMARYKEY,--设置ID为自增长的主键
[NAME]varchar(20)NOTNULL,--设置名字不为空
[AGE]tinyintCHECK([AGE]<120)--设置年龄小于120
)
--6.用代码实现修改数据库,添加文件组?
ALTERDATABASEDATABASENAME--要修改的数据库名
ADDFILEGROUPFILEGROUPNAME--要添加的文件组名
--7.用代码实现修改文件,文件组?
/*
答:
--修改文件示例
ALTERDATABASEDATABASENAME
modifyfile
(
[name]='原逻辑名',
[NEWNAME]='新逻辑名',
[FILENAME]='新文件名',
[SIZE]='文件大小',
[MAXSIZE]='文件的最大值',
[FILEGROWTH]='文件增长值或增长百分比'
)
*/
--修改文件组
ALTERDATABASEDemo_20091230NEW
MODIFYFILEGROUPfilegroup2name=Newfilegroup_name
--8.用代码修改表实现添加列、修改列、删除列?
--添加列示例代码
ALTERTABLEStudent
ADD[S_Number]Varchar(20)
--删除列例代码
ALTERTABLEStudent
DROPCOLUMN[S_Number]
--修改列例代码
ALTERTABLEStudent
ALTERCOLUMN[S_Name]varchar(8)
--修改列名通过系统存储过程
SP_RENAME'Student.S_Name','S_NAME_NEW'
--9.用代码实现查看表、数据库的信息?
/*
答:
查看表:
sp_help表名
查看数据库:
sp_helpDB数据库名
*/
--示例代码:
--查看表:
sp_helpclass
--查看表:
sp_helpdbDemo_20091230NEW
--10.重命名数据库和表的SQL语句?
--重命名表的SQL语句(调用存储过程)
SP_RENAMEclass,classNew--不添加引号
SP_RENAME'class','classNew'--添加引号
--重命名表的SQL语句(ALTERDATABASE)
ALTERDATABASEDemo_20091230NEW
Modifyname=Demo_20091230
--重命名数据库的SQL语句
SP_RENAMEDBDemo_20091230NEW,Demo_20091230--不添加引号
SP_RENAMEDB'Demo_20091230','Demo_20091230NEW'--添加引号
--11.什么是数据库的完整性?
/*答:
确保数据库的一致性和精确性,
可以用约束和触发器来实现。
*/
--12.数据库完整性的分类?
/*答:
实体完整性:
规定表的每一行在表中是唯一的实体。
(主键)
域完整性:
是指表中列满足特定的数据类型和约束。
引用完整性:
两个表的主键和外键的关键字一致。
自定义完整性:
用户自己定义的数据类型的约束。
*/
--13.约束分为哪两个级别,它和完整性的关系?
/*
答:
约束分表级别和列级别,可以相互转换,只是写法不同。
创建联合主键的时候一定要用表级约束
PRIMARYKEY约束(实现实体完整性)
UNIQUEKEY约束(实现域完整性)
NOTNULL约束(实现域完整性)
CHECK约束(实现域完整性)
FOREIGNKEY约束(实现引用完整性)
自定义数据类型(实现自定义完整性)
其中PRIMARYKEY、UNIQUEKEY、FOREIGNKEY
可以新建表级别和列级别约束。
*/
--14.用代码创建NOTNULL约束?
/*
答:
直接在创建表的时候添加。
*/
--代码示例:
CREATETABLEStudent
(
[ID]intNOTNULL
)
--15.用代码创建primarykey约束(两种方式)?
/*
答:
primarykey约束可以用列级和表级两种方式创建。
创建联合主键的时候,必须用表级的方式创建。
*/
--示例代码(列级)
CREATETABLEStudent
(
[ID]intPRIMARYKEY,
[NAME]varchar(20)
)
--示例代码(表级)
CREATETABLEStudent
(
[ID]int,
[NAME]varchar(20)
CONSTRAINTPK_STUDENTPRIMARYKEY([ID],[NAME])
)
--16.用代码创建foreignkey约束(两种方式)?
/*
答:
foreignkey约束可以用列级和表级两种方式创建。
*/
--示例代码(列级)
CREATETABLEStudent
(
[ID]intPRIMARYKEY,
[C_NAME]varchar(20)REFERENCESCLASS([C_NAME])--学生表中的课程名引用课程表中的课程名
)
--示例代码(表级)
CREATETABLEStudent
(
[ID]intPRIMARYKEY,
[C_NAME]varchar(20),
CONSTRAINTFK_C_NAMEFOREIGNKEY([C_NAME])
REFERENCESCLASS([C_NAME])--学生表中的课程名引用课程表中的课程名
)
--17.用代码创建uniquekey约束(两种方式)?
/*
答:
uniquekey约束可以用列级和表级两种方式创建。
在创建约束的列上添加唯一约束。
*/
--示例代码(列级)
CREATETABLEStudent
(
[ID]intPRIMARYKEY,
[C_NAME]varchar(20)REFERENCESCLASS([C_NAME]),--学生表中的课程名引用课程表中的课程名
[S_NUM]varchar(20)UNIQUE--学号必须唯一
)
--示例代码(表级)
CREATETABLEStudent
(
[ID]intPRIMARYKEY,
[C_NAME]varchar(20)REFERENCESCLASS([C_NAME]),--学生表中的课程名引用课程表中的课程名
[S_NUM]varchar(20),
CONSTRAINTUN_S_NUMUNIQUE([S_NUM])--学号必须唯一
)
--18.用代码创建check约束(两种方式)?
/*
答:
check约束可以用列级和表级两种方式创建。
*/
--示例代码(列级)
CREATETABLEStudent
(
[ID]intPRIMARYKEY,
[C_NAME]varchar(20)REFERENCESCLASS([C_NAME]),--学生表中的课程名引用课程表中的课程名
[S_NUM]varchar(20)UNIQUE,--学号必须唯一
[S_AGE]tinyintCHECK([S_AGE]<60)--年龄必须小于60岁
)
--示例代码(表级)
CREATETABLEStudent
(
[ID]intPRIMARYKEY,
[C_NAME]varchar(20)REFERENCESCLASS([C_NAME]),--学生表中的课程名引用课程表中的课程名
[S_NUM]varchar(20),
[S_AGE]tinyint,
CONSTRAINTCK_S_AGECHECK([S_AGE]<60)--学号必须唯一
)
--19.用代码实现修改、删除约束?
/*答:
修改约束:
只有NOTNULL能通过修改列的方式修改约束。
删除约束:
DROPCONSTRAINT关键字,后面跟约束名称。
*/
--示例代码(通过修改列的方式修改NOTNULL约束。
):
ALTERTABLEclass
ALTERCOLUMN[NAME]varchar(20)NOTNULL
--删除代码:
DROPCONSTRAINTCK_S_AGE--删除学号唯一约束
--20.用代码实现查看约束的信息?
/*答:
查看约束SP_HELPCONSTRAINT约束名称
*/
--代码示例:
SP_HELPCONSTRAINTCK_S_AGE--查看学号唯一约束
--21.SQL有哪些数据类型?
/*答:
日期类型:
DATETIME、SMALLDATETIME
整数类型:
BIGINT、INT、SMALLINT、TINYINT
浮点型:
DOUBLE、FLOAT、DECIMAL、REAL、NUMERIC
货币类型:
MONEY、SMALLMONEY
字符类型:
CHAR、VARCHAR、NCHAR、NVARCHAR
二进制数据类型:
BINARY、VARBINARY、IMAGE
全局唯一标识:
UNIQUEIDENTIFIER
大容量数据类型:
TEXT、NTEXT、IMAGE
*/
--22.SQL语句分类(DDL、DQL、DML、DCL)?
/*
答:
数据定义语言:
DDL(DataDefinitionLanguage)创建、删除、修改数据库对象
如:
表、视图、模式、触发器、存储过程等。
数据查询语言:
DQL(DataQueryLanguage)用户检索数据库的。
数据操纵语言:
DML(DataManipulationLanguage)用于添加、修改、删除存储在
数据库对象中的数据。
数据控制语言:
DCL(DataControlLanguage)控制访问数据库权限的。
数据定义语言:
CREATE、DROP、ALTER
数据查询语言:
SELECT
数据操纵语言:
INSERT、UPDATE、DELETE
数据控制语言:
GRANT(授权)、DENY(拒绝)、REVOKE(移除)
*/
--23.关键字identity是什么意思?
/*
答:
关键字identity表示自动编号,自增长。
*/
--24.uniqueidentifier是什么意思?
如何生成?
/*
答:
uniqueidentifier表示全球唯一标识。
用SELECTNEWID()生成
*/
--代码示例:
SELECTNEWID()AS全球唯一标识
--25.默认值创建?
绑定默认值?
取消绑定默认值?
/*
答:
创建默认值有两种:
a)创建表的时候附带创建
b)使用CREATEDEFAULT关键字
区别:
后再独立于表存在,前者必须要有表。
绑定默认值:
使用sp_bindefault默认值名,表名.列名。
注意:
只有使用CREATEDEFAULT关键字才需要绑定。
取消绑定默认值:
使用sp_unbindefault默认值名,表名.列名。
注意:
只有使用CREATEDEFAULT关键字才需要绑定。
*/
--代码示例:
创建表的时候附带创建
CREATETABLECLASS
(
[ID]intPRIMARYKEY,
[NAME]varchar(20)DEFAULT('徐念')
)
--代码示例:
使用CREATEDEFAULT关键字创建
CREATEDEFAULTDF_NAME
AS'徐念'
--代码示例:
绑定默认值到CLASS表的NAME列上
sp_bindefaultDF_NAME,'CLASS.NAME'
--代码示例:
取消绑定默认值到CLASS表的NAME列上
sp_unbindefaultDF_NAME,'CLASS.NAME'
--26.规则创建?
绑定规则?
取消绑定规则?
/*
答:
创建规则用CREATERULE关键字
绑定规则用SP_BINDRULE系统存储过程
取消绑定规则SP_UNBINDRULE系统存储过程
*/
--代码示例:
使用CREATEDEFAULT关键字创建
CREATERULERU_NAME
AS@NAME='徐念'
--代码示例:
绑定规则到CLASS表的NAME列上
SP_BINDRULERU_NAME,'CLASS.NAME'
--代码示例:
取消绑定规则到CLASS表的NAME列上
SP_UNBINDRULERU_NAME,'CLASS.NAME'
--27.如何创建自定义类型?
/*
答:
创建自定义类型:
用系统存储过程:
SP_ADDTYPE
*/
--代码示例:
创建一个身份证的数据类型(18为字符)且不允许为空
SP_ADDTYPEIdCard,'varchar(18)','NOTNULL'
--28.Select查询执行顺序?
/*
答:
1.执行FROM字句,根据FROM字句后面的一个或多个表创建工作表。
如果是多个表,将对表进行交叉连接。
如果只有一个表,就直接作为工作表。
2.如果有WHERE字句,根据WHERE字句搜索满足条件的行。
3.如果有GROUPBY字句,会对第二步产生的结果集进行分组汇总。
4.如果有HAVING字句,会对第三步产生的结果集进行组筛选。
5.如果有DISTINCT、TOP关键字,将在第四步的基础上进行过滤,去掉重复的行。
6.如果有ORDERBY字句,会在第五步的基础上进行排序。
7.显示查询结果。
*/
--29.数据库中的表关系有哪几种?
分别是什么?
/*
答:
分四种(一对一、一对多、多对一、多对多)
多对多:
必须要分表,分解成两个多对一
举例:
如学生和课程是多对多关系,新增一个学生选修课程表。
学生和学生选修课程表是一对多关系
课程和学生选修课程表是一对多关系
*/
--30.级联删除、更新的关键字是什么?
并写出代码?
/*
答:
级联删除关键字:
ONDELETECASCADE
级联更新关键字:
ONUPDATECASCADE
代码示例如下:
*/
--修改表添加级联删除、级联更新外键约束
ALTERTABLEStudentClass
ADDCONSTRAINTjlDeleteFOREIGNKEY(Fk_S_ID)
REFERENCESStudent(S_ID)
ONDELETECASCADE
ONUPDATECASCADE
--31.表的连接有哪几种?
它们的含义分别是什么?
/*
答:
共五种。
INNERJOIN:
内连接(以两个表中匹配的记录为准)
LEFTJOIN/LEFTOUTERJOIN:
(以左边的表中有的记录为准)
RIGHTJOIN/RIGHTOUTERJOIN:
(以右边的表中有的记录为准)
FULLJOIN/FULLOUTERJOIN:
(以两边的表只要有一个表有的记录即可)
CROSSJOIN:
(两个表的记录的笛卡尔积)
*/
--32.消除重复行的关键字是什么?
/*
答:
DISTINCT(放在SELECT关键字后面)
*/
--33.分组时既能显示明细记录又能显示汇总值的关键字是什么?
--请写一个示例代码?
/*
答:
关键字:
COMPUTE\COMPUTEBY
*/
SELECTS_GROUP,S_AGEAS'平均年龄'
FROMStudent
WHERES_GROUP='二组'
ORDERBYS_GROUP
COMPUTEAVG(S_AGE)BYS_GROUP
--34.SQL中的通配符有几种?
每种的含义是什么?
/*
答:
'_'表示一个任意字符;
'%'表示0-N个任意字符;
'[ABC]'表示A或B或C中的一个任意字符,常与'%'连用;
'[^ABC]'表示不是A且B且C中的一个任意字符,常与'%'连用;
*/
--35.Rollup和CUBE的相同点和异同点是什么?
/*
答:
都是对分组(GROUP)中的汇总结果集的扩展。
CUBE的扩展要比Rollup多。
*/
--只根据'组'分组
SELECTS_Group,AVG(S_age)FROMStudent
GROUPBYS_Group
SELECTS_Group,AVG(S_age)FROMStudent
GROUPBYS_GroupWITHROLLUP
SELECTS_Group,AVG(S_age)FROMStudent
GROUPBYS_GroupWITHCUBE
--根据'组'和'姓名'分组
SELECTS_Group,S_Name,AVG(S_age)FROMStudent
GROUPBYS_Group,S_Name
SELECTS_Group,S_Name,AVG(S_age)FROMStudent
GROUPBYS_Group,S_NameWITHROLLUP
SELECTS_Group,S_Name,AVG(S_age)FROMStudent
GROUPBYS_Group,S_NameWITHCUBE
--36.子查询的种类?
它们的区别是什么?
/*
答:
子查询分标准子查询(嵌套子查询)和相关子查询
区别:
标准子查询(嵌套子查询)子查询只执行一次;
相关子查询:
子查询执行0-N次;
*/
--示例:
--查找年龄在23岁以内的学生的信息(用子查询的方式)
--标准子查询
SELECT*FROMstudent
WHERES_NAMEIN
(SELECTS_NAMEFROMstudent
WHEREstudent.S_age<23)
--查找学生信息并统计班级每个学生与班级平均年龄的差值
--相关子查询
SELECT*,
(SELECTAVG(S_age)FROMstudent)AS'班级平均年龄',
S_age-(SELECTAVG(S_age)FROMstudent)AS'差值'
FROMstudent
--37.子查询的意义和写子查询的注意事项?
/*
答:
子查询的意义:
简化复杂的查询,
将一个复杂的查询逻辑上分解成几个简单的查询。
子查询的注意事项:
1.带有小括号
2.可以在很多地方使用
a)使用别名时;
b)使用IN或NOTIN时;
c)使用UPDATE、INSERT、DELETE语句时;
e)使用比较运算符时;
f)使用ANY、SOME、ALL时;
g)使用EXIST或NOTEXIST时;
h)使用表达式的地方。
*/
--38.关键字SOME、ALL的含义?
请写出代码示例?
/*
答:
SOME、ALL都是和比较运算符(>、>=、<、<=、!
=、<>、=)联用,
用于比较SOME、ALL字查询所返回的值。
*/
--示例:
查找年长(年龄在平均年龄之上)的学生的信息
SELECT*
FROMu_student
WHERE[AGE]>ALL(SELECTAVG(ISNULL([AGE],0))FROMu_student)
--39.关键字IN的含义?
请写出代码示例?
/*
答:
关键字IN表示在...里
*/
--示例:
查找姓名等于张三或李四的学生的记录
SELECT*
FROMu_student
WHERE[NAME]in('张三','李四')
--40.视图分为哪三类?
请写出代码示例?
/*
答:
单表视图:
数据只来源于一个表。
多表视图:
数据只来源于多个表。
嵌套视图:
数据只来源于视图。
*/
--示例:
嵌套视图
--创建学生信息视图(单表视图)
CREATEVIEWV_StudentInfo
AS
SELECT*FROMu_studentus
--创建学生姓名信息视图(嵌套视图)
CREATEVIEWV_StudentNameInfo
AS
SELECT[NAME]FROMV_StudentInfo
--41.视图的优缺点是什么?
/*
答:
视图优点:
1.简化查询操作
2.隐蔽敏感数据,提高安全性
3.定制数据
4.数据的查询和存储分离
视图缺点:
1.性能较低
2.更新不变:
SELECT语句中使用了HAVING、GROUPBY、TOP、DISTINCT、
计算列、聚合函数关键字后就不能更新
*/
--42.索引的作用是什么?
索引分为哪两类?
它们的区别是什么?
请写出代码示例?
/*
答:
索引的作用是用来优化查询,提高查询速度的。
索引分为聚集索引(簇索引)或非聚集索引(非簇索引)
区别:
1.聚集索引的页级页存放的是实际的数据而
非聚集索引得页级页存放的是索引信息,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL Server知识点全集 Server 知识点 全集