SQL 语句2分析Word格式文档下载.docx
《SQL 语句2分析Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《SQL 语句2分析Word格式文档下载.docx(31页珍藏版)》请在冰点文库上搜索。
例如:
创建学生管理系统数据库,主数据文件'
d:
\ljg\xsglxt.mdf'
文件大小4MB、最大空间6MB日志文件学生管理系统LOG大小3MB位置:
'
\ljg\xsglxtlog.ldf'
createdatabase学生管理系统
onprimary(name=学生管理系统,
logon(name=学生管理系统log,
size=3mb)
go
2.选择数据库(打开数据库)
格式:
use数据库
功能:
将数据库打开作为当前数据库
use学生管理系统
usemsdb
3.查看数据库中全部表信息
格式sp_help
4.查看指定数据库的详细信息
sp_help数据名
例如:
sp_helpstudent
5.查看数据库上的所有数据文件和日志文件
sp_helpfile
Go
6.查看当前数据库上的组文件
sp_helpfilegroup
7.数据库的改名
sp_rennameda老数据库名,新数据库名
例如:
sp_renamedb'
学生管理系统'
'
学生档案管理'
8.删除数据库
dropdatabase数据库名
删除指定数据库(当前数据库不能删除)
dropdatabase学生管理系统
二:
数据表的操作
1.数据表的定义
createtable数据表名
(
列名1数据类型(宽度)char(9)列级完整性约束条件
列名2数据类型(宽度)char(9)列级完整性约束条件
列名3数据类型(宽度)char(9)列级完整性约束条件
列名N数据类型(宽度)char(9)列级完整性约束条件
表级完整性约束条件)
建立表的结构,设置列级完整性约束条件,表级完整性约束条件
说明:
1.列级完整性条件是针对属性值设置的限制条件,包括
(1)NOTNULL或NULL
NOTNULL,不容许字段为空,NULL:
容许字段为空
字段为空的含义是该属性的值不详、含糊、或无意义
对于关系的主属性必须限定为NOTNULL,以满足实体完整性,其他可以为NULL
(2)唯一性约束条件unique
不容许该列中出现重复的属性值
(3)默认值约束条件DEFAULT
DEFAUTL<
约束名>
〈默认值〉FOR《列名》
DEFAULTC120FOR年龄
(4)检查约束条件CHECK
他通过约束条件表达式设置列值应该满足的条件
CONSTRAINT<
约束名>
CHECK<
约束条件>
列级约束条件只约束一个列,如果涉及多个列就是表级约束条件
2.表级约束条件涉及关系中多个列的限制,包括
(1)惟一性约束条件UNIQUE
要求列的值不能有重复的使用
(2)primaryKEY实体完整性约束
用于定义主码,他能保证主码的惟一性和非空性,直接写在主码后
primaryKEY<
列,或列的组合>
CONSTRAINTBBprimaryKEY<
学号,课程号>
(3)FOREIGNKEY外码和参照表约束
FOREIGNKEY<
外码>
REFERENCES<
被参照表>
(《与外码对应的主码》)
CONSTRAINTC6FOREIGNKEY(学号)
REFERENCES学生(学号)
2.查看表的详细信息(属性的信息)
Sp_help表名
1.createtablestudent(学号char(5)notnullunique,惟一不为空
姓名char(20)notnull,
年龄smallint,
性别char
(2),
所在系char(20),
constraintc3check(性别in('
'
女'
)))对性别的约束
查看表达信息sp_helpstudent
例如2:
createtablecourse(课程号char(5)primarykey,
课程名char(20),
先行课char(5))
sp_helpcourse
例如3:
createtablesc(学号char(5),
课程号char(5),
成绩smallint,
constraintc4check(成绩between0and100),
constraintc5primarykey(学号,课程号),
constraintc6foreignkey(学号)referencesstudent(学号),
constraintc7foreignkey(课程号)referencescourse(课程号))
3.修改表的结构
(1.)删除约束条件
altertablesc
dropc5
(2.)增加约束条件
addconstraintc1check(性别in(‘男’,’女’)
addconstraintc1primarykey(学号)
addconstraintc1foreignkey(学号)referencesstudent(学号)
(3.)增加新的列
addcccchar(4)
(4)更改列的数据类型
altercolumncccsmallint
4.删除表
DROPTABALE<
表名
〉RESTRICT/CASCADE
删除指定的表
RESTRICT选项删除有条件的
若删除的表不能被其他的表引用(CHECKFOREIGKEY),不能有试图,等,如果有这些依赖这个表则不能删除。
CASCADE:
没有限制的删除,删除时相关的依赖对象都被删除。
droptablesc
droptablecourse
5.建立索引
create【unique】【CLUSTERED】index索引文件名
onstudent(学号desc,年龄asc)
在指定的表上建立索引,
Unique惟一索引
CLUSTERED聚簇索引:
索引顺序与表的物理顺序一致。
DESC降序ASC升序
1建立惟一索引
createuniqueindexaaaa
on(关于)student(学号desc,年龄asc)
2建立聚簇索引
createclusteredindexbbbb
6.删除索引
DROPINDEX<
表名。
索引文件名〉
dropindexstudent.bbbb
删除时要先指定表名然后时索引名
三:
数据更新
1.插入数据
insertinto表名(属性1,属性2属性3,属性4,属性N)
values(常量1,'
常量2'
常量3'
常量4'
常量N'
向指定的表中插入一条记录
常量为字符时要加单引号,数值数据不加单引号
1.insertintostudent(学号,姓名,年龄,性别,所在系)
values(95001,'
李勇'
20,'
计算机'
2.insertintosc(学号,课程号,成绩)
values('
95004'
3'
96)
2.插入子查询的结果
子查询;
createtableage(avg_agesmallint)
insertintoage(avg_age)
selectavg(年龄)
fromstudent
3.修改数据
update数据库
set列名=值
where条件'
更改某一个值或某一列值
1更改某一个值
select*fromstudent
updatestudent
set年龄=25
where姓名='
刘晨'
2更改某一列的值为一个值
select*fromage
updateage
setavg_age=40
4.删除数据
DELETE
from数据表
WHERE条件
功能:
删除数据表中符合条件的记录
1.删除AGE表中的所有记录
delete
fromage
select*fromage
2.删除符合条件的记录
fromstudent
where年龄=25
四:
数据查询
1.查询语句
SLECTALL/DESTINCT字段1,字段2,字段3,字段N
FROM表或视图图(可以多个,用逗号分割)
WHER条件
GROUPBY字段1【HAVING条件表达式】
ORDERBY字段ASC/DESC
根据WHERE条件,从FROM指定的表或视图中找出满足条件的元组(记录),再按SELECT的子段,选出记录的属性值形成结果表
2.单表查询字段的操作
1选择表中的若干列
select学号,姓名
fromstudent
查看全部的列
select学号,姓名,性别,所在系
或
select**全部列
fromstudent
查询计算值
select姓名,年龄,2010-年龄
例如4:
增加特殊说明
select姓名,年龄,'
出生日期:
2010-年龄
出生日期不是表的字段,只起说明作用
3.选择表中若干元组记录的操作
(1)取消取值重复的行
selectdistinct先行课
fromcourse
(2)查找满足条件的记录
A.比较操作
比较符号>
>
=,<
=,!
=,<
>
不等于,!
不大于,!
<
不小于
1.查找年龄大于等于20的所有学生
select*
where年龄>
=20
2.查找年龄大于20的男同学
select*
=20and性别='
3.查询年龄小于20学生的姓名、性别和学号
select姓名,年龄,性别
where年龄<
20
4.select学号,课程号,成绩
fromsc
where成绩<
90
B。
确定范围
BetweenAND在两者之间
NOTBETWEENAND不在两者之间
BETWEEN是范围的低值
AND时范围的高值
例如1:
查询年龄在20到23之间的学生的姓名、所在系和年龄
select姓名,所在系,年龄
where年龄between20and23;
例如2:
查询成绩不在88到96之间的学生的学号、课程号和成绩
select学号,课程号,成绩
fromsc
where成绩notbetween88and96;
C、确定集合
In和notin用于查找属性值在或不在指定的集合中
查找计算机、英语系,政治系的所有学生
where所在系in('
英语'
政治'
查找非计算机、英语系所有学生
where所在系notin('
D:
字符匹配(模糊查询)
LIKE用来进行字符串的匹配
NOTLIKE‘匹配的字符
查询指定属性列的值与《匹配的字符》相匹配的记录
匹配的字符可以是一个完整的字符串,也可以用通配符%和—
%:
代表任意长度的字符A%BA开头B结尾的字符串
__:
代表单个任意字符A_A开头的任意两个字符
例如1:
查找学号95001的学生
where学号like'
95001'
查找姓刘的学生的学号,姓名,和年龄
select学号,姓名,年龄
where姓名like'
刘%'
查找姓张的学生的学号,姓名,和年龄
select学号,姓名,年龄
张__'
查找不姓张的学生的学号,姓名,和年龄
where姓名notlike'
E:
多条件查询与或非查询
例如:
查询计算机系统年龄大于20的学生
select*
where所在系in('
)and年龄>
例如2:
查找计算机系、英语系的所有学生
where所在系='
or所在系='
或
select*
or年龄>
F:
几个特例
//查询前N行的记录
selecttop3*
selecttop5课程号,成绩
fromxk
//给字段起别名
selecttop3课程号as小命,成绩as小洞
//查询结果中带有提示信息
selecttop3课程号as课号,'
考试成绩:
成绩
//求每个人的总分,最高分,最低分,平均分
select学号,sum(成绩)as考试总分,max(成绩)as最高分,min(成绩)as最低分,avg(成绩)as平均分
groupby学号
orderby考试总分desc,最高分asc
//模糊查询
//查询第二个字是立的姓名
select姓名,年龄,所在系
where姓名like'
_立%'
//查询第二个字是小的姓名
_小%'
//查询张的姓名
张%'
//查询属性值为空的内容
insertintostudent(学号,姓名,年龄)values('
1007'
中国'
20)
1008'
泰国'
where性别isnull
//查询属性值不为空的内容
where性别isnotnull
4.ORDERBY排序
对查询的结果按照一个或多个属性列升序或降序排列
查询选课表中的所有记录按成绩降序排列
orderby成绩desc
查询选课表中选修3号课程的所有记录按成绩降序排列
where课程号='
orderby成绩desc
查询选课表中的所有记录先按选课号升序排列再按成绩降序排列,
orderby课程号,成绩desc
5.聚集函数的使用
1).SQL的聚集函数及功能
Count(distinct/all*):
统计记录的个数
Count(distinct/all)列名:
统计一列中值的个数
Sum(distinct/all)列名:
计算一列值的总和
Avg(distinct/all)列名:
计算一列值的平均
Max(distinct/all)列名:
计算一列值的最大值
Min(distinct/all)列名:
计算一列值的最小值
distinct:
计算时取消指定列中重复的值
/all:
计算所有的值
查询学生总人数
Select'
学生人数'
count(*)
查询选修了课程的人数
select'
选修了课程的人数'
count(distinct学号)
例如3:
计算选修3号课程的平均成绩
selectavg(成绩)
where课程号in('
例如4:
计算95001学生的总成绩、平均成绩和最高分和最低分
selectsum(成绩),avg(成绩),max(成绩),min(成绩)
where学号='
6.groupby分组语句
按照某一列或多列的值分组,等值为一组。
分组后聚集函数将作用于每一个组,
查询各个课程号,及选修的人数
selectcount(学号),课程号
groupby课程号
查询每个学生的选修课程数
select学号,count(课程号)
groupby学号
查询选修课程大于2门的学生的学号
select学号,count(课程号)
havingcount(*)>
2
HANING短语对分组后的结果,从中选择满足条件的组
//分组操作
//计算男女生的人数
selectcount(年龄)as人数
groupby性别
//计算每个系男女生的人数
where所在系in('
//求计算机系人数
selectcount(年龄)as人数
groupby所在系
having所在系='
7.使用compute来进行分组小计,或计算总计,并将结果显示在查询结果的下方
//计算成绩>
80分的平均成绩
where成绩>
80
computeavg(成绩)
computesum(成绩)
computecount(成绩)
computemax(成绩)
computemin(成绩)
8.使用computeby来进行分类汇总计,第一步:
对分类关键字先排序,第二步用compute表达式by分类关键字进行分类汇总
例:
//分类汇总计算每个人的总分
select学号,成绩
orderby学号//排序
computesum(成绩)by学号//分类汇总
//按性别计算年龄的总分
select性别,年龄
orderby性别
computesum(年龄)by性别
//计算每个系所有学生的平均年龄
select所在系,年龄
orderby所在系