SQL 语句2分析.docx
《SQL 语句2分析.docx》由会员分享,可在线阅读,更多相关《SQL 语句2分析.docx(31页珍藏版)》请在冰点文库上搜索。
SQL语句2分析
SQL语句
一:
数据库的操作
1.数据库建立语句
查询:
select*fromXX
纵向查询:
selectid,namefromXX
纵向待条件查询:
selectname,age,dzfromXXwhereid='1003'
改变语句:
更改姓名:
updateXXsetname='林逗比'wherename='林小青'
更改性别:
updateXXsetxb='男'wherename='林小青'
更改年龄:
updateXXsetage='30'wherename='林小青'
格式:
createdatabase数据库名creates
onprimary(name=逻辑数据名
filename='操作数据文件路径名和文件名',
size=4Mb,
maxsize=6Mb
filegrowth=5
)
logon(name=逻辑日志文件名,
filename='逻辑日志文件路径和文件名',
size=文件的大小
filegrowth=10
)
功能1.定义数据库名
功能2.定义数据文件名,其中onprimary定义主文档。
MDF
filename='操作数据文件路径名和文件名',size=文件大小
maxsize=最大文件空间
filegrowth=5文件的增长率
功能3:
定义日志文件
logon(name=逻辑日志文件名,日志文件名
filename='逻辑日志文件路径和文件名',日志文件的位置和名称
size=文件的大小)日志文件大小
例如:
创建学生管理系统数据库,主数据文件'd:
\ljg\xsglxt.mdf'文件大小4MB、最大空间6MB日志文件学生管理系统LOG大小3MB位置:
'd:
\ljg\xsglxtlog.ldf',
createdatabase学生管理系统
onprimary(name=学生管理系统,
filename='d:
\ljg\xsglxt.mdf',
size=4Mb,
maxsize=6Mb
)
logon(name=学生管理系统log,
filename='d:
\ljg\xsglxtlog.ldf',
size=3mb)
go
2.选择数据库(打开数据库)
格式:
use数据库
功能:
将数据库打开作为当前数据库
例如:
use学生管理系统
usemsdb
3.查看数据库中全部表信息
格式sp_help
4.查看指定数据库的详细信息
格式:
sp_help数据名
例如:
use学生管理系统
sp_helpstudent
5.查看数据库上的所有数据文件和日志文件
格式:
sp_helpfile
Go
6.查看当前数据库上的组文件
格式:
sp_helpfilegroup
7.数据库的改名
格式:
sp_rennameda老数据库名,新数据库名
例如:
sp_renamedb'学生管理系统','学生档案管理'
sp_helpfile
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实体完整性约束
用于定义主码,他能保证主码的惟一性和非空性,直接写在主码后
格式:
CONSTRAINT<约束名>primaryKEY<列,或列的组合>
例如:
CONSTRAINTBBprimaryKEY<学号,课程号>
(3)FOREIGNKEY外码和参照表约束
格式:
CONSTRAINT<约束名>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.)增加约束条件
altertablesc
addconstraintc1check(性别in(‘男’,’女’)
altertablesc
addconstraintc1primarykey(学号)
altertablesc
addconstraintc1foreignkey(学号)referencesstudent(学号)
(3.)增加新的列
altertablesc
addcccchar(4)
(4)更改列的数据类型
altertablesc
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
onstudent(学号desc,年龄asc)
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.插入子查询的结果
insertinto表名(属性1,属性2属性3,属性4,属性N)
子查询;
例如:
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.删除符合条件的记录
delete
fromstudent
where年龄=25
select*fromstudent
四:
数据查询
1.查询语句
格式:
SLECTALL/DESTINCT字段1,字段2,字段3,字段N
FROM表或视图图(可以多个,用逗号分割)
WHER条件
GROUPBY字段1【HAVING条件表达式】
ORDERBY字段ASC/DESC
功能:
根据WHERE条件,从FROM指定的表或视图中找出满足条件的元组(记录),再按SELECT的子段,选出记录的属性值形成结果表
2.单表查询字段的操作
例如:
1选择表中的若干列
select学号,姓名
fromstudent
例如2:
查看全部的列
select学号,姓名,性别,所在系
fromstudent
或
select**全部列
fromstudent
例如3:
查询计算值
select姓名,年龄,2010-年龄
fromstudent
例如4:
增加特殊说明
select姓名,年龄,'出生日期:
',2010-年龄
fromstudent
出生日期不是表的字段,只起说明作用
3.选择表中若干元组记录的操作
(1)取消取值重复的行
selectdistinct先行课
fromcourse
(2)查找满足条件的记录
A.比较操作
比较符号>,>=,<=,!
=,<>不等于,!
>不大于,!
<不小于
例如:
1.查找年龄大于等于20的所有学生
select*
fromstudent
where年龄>=20
2.查找年龄大于20的男同学
select*
fromstudent
where年龄>=20and性别='男'
3.查询年龄小于20学生的姓名、性别和学号
select姓名,年龄,性别
fromstudent
where年龄<20
4.select学号,课程号,成绩
fromsc
where成绩<>90
B。
确定范围
BetweenAND在两者之间
NOTBETWEENAND不在两者之间
BETWEEN是范围的低值
AND时范围的高值
例如1:
查询年龄在20到23之间的学生的姓名、所在系和年龄
select姓名,所在系,年龄
fromstudent
where年龄between20and23;
例如2:
查询成绩不在88到96之间的学生的学号、课程号和成绩
select学号,课程号,成绩
fromsc
where成绩notbetween88and96;
C、确定集合
In和notin用于查找属性值在或不在指定的集合中
例如1:
查找计算机、英语系,政治系的所有学生
select*
fromstudent
where所在系in('计算机','英语','政治')
例如2:
查找非计算机、英语系所有学生
select*
fromstudent
where所在系notin('计算机','英语')
D:
字符匹配(模糊查询)
LIKE用来进行字符串的匹配
格式:
NOTLIKE‘匹配的字符
功能:
查询指定属性列的值与《匹配的字符》相匹配的记录
匹配的字符可以是一个完整的字符串,也可以用通配符%和—
%:
代表任意长度的字符A%BA开头B结尾的字符串
__:
代表单个任意字符A_A开头的任意两个字符
例如1:
查找学号95001的学生
select*
fromstudent
where学号like'95001'
例如2:
查找姓刘的学生的学号,姓名,和年龄
select学号,姓名,年龄
fromstudent
where姓名like'刘%'
查找姓张的学生的学号,姓名,和年龄
select学号,姓名,年龄
fromstudent
where姓名like'张__'
例如3:
查找不姓张的学生的学号,姓名,和年龄
select学号,姓名,年龄
fromstudent
where姓名notlike'张__'
E:
多条件查询与或非查询
例如:
查询计算机系统年龄大于20的学生
select*
fromstudent
where所在系in('计算机')and年龄>=20
例如2:
查找计算机系、英语系的所有学生
select*
fromstudent
where所在系='计算机'or所在系='英语'
或
select*
fromstudent
where所在系='计算机'or所在系='英语'or年龄>=20
F:
几个特例
//查询前N行的记录
selecttop3*
fromstudent
selecttop5课程号,成绩
fromxk
//给字段起别名
selecttop3课程号as小命,成绩as小洞
fromxk
//查询结果中带有提示信息
selecttop3课程号as课号,'考试成绩:
',成绩
fromxk
//求每个人的总分,最高分,最低分,平均分
select学号,sum(成绩)as考试总分,max(成绩)as最高分,min(成绩)as最低分,avg(成绩)as平均分
fromxk
groupby学号
orderby考试总分desc,最高分asc
//模糊查询
select*fromstudent
//查询第二个字是立的姓名
select姓名,年龄,所在系
fromstudent
where姓名like'_立%'
//查询第二个字是小的姓名
select姓名,年龄,所在系
fromstudent
where姓名like'_小%'
//查询张的姓名
select姓名,年龄,所在系
fromstudent
where姓名like'张%'
//查询属性值为空的内容
insertintostudent(学号,姓名,年龄)values('1007','中国',20)
insertintostudent(学号,姓名,年龄)values('1008','泰国',20)
select*
fromstudent
where性别isnull
//查询属性值不为空的内容
select*
fromstudent
where性别isnotnull
4.ORDERBY排序
功能:
对查询的结果按照一个或多个属性列升序或降序排列
例如1:
查询选课表中的所有记录按成绩降序排列
select*
fromsc
orderby成绩desc
例如2:
查询选课表中选修3号课程的所有记录按成绩降序排列
select*
fromsc
where课程号='3'
orderby成绩desc
例如3:
查询选课表中的所有记录先按选课号升序排列再按成绩降序排列,
select*
fromsc
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(*)
fromstudent
例如2:
查询选修了课程的人数
select'选修了课程的人数',count(distinct学号)
fromsc
例如3:
计算选修3号课程的平均成绩
selectavg(成绩)
fromsc
where课程号in('3')
例如4:
计算95001学生的总成绩、平均成绩和最高分和最低分
selectsum(成绩),avg(成绩),max(成绩),min(成绩)
fromsc
where学号='95001'
6.groupby分组语句
功能:
按照某一列或多列的值分组,等值为一组。
分组后聚集函数将作用于每一个组,
例如:
查询各个课程号,及选修的人数
selectcount(学号),课程号
fromsc
groupby课程号
例如2:
查询每个学生的选修课程数
例如:
查询各个课程号,及选修的人数
select学号,count(课程号)
fromsc
groupby学号
例如3:
查询选修课程大于2门的学生的学号
select学号,count(课程号)
fromsc
groupby学号
havingcount(*)>2
HANING短语对分组后的结果,从中选择满足条件的组
//分组操作
select*fromstudent
//计算男女生的人数
selectcount(年龄)as人数
fromstudent
groupby性别
//计算每个系男女生的人数
selectcount(年龄)as人数
fromstudent
where所在系in('计算机','英语')
groupby性别
//求计算机系人数
selectcount(年龄)as人数
fromstudent
groupby所在系
having所在系='计算机'
7.使用compute来进行分组小计,或计算总计,并将结果显示在查询结果的下方
//计算成绩>80分的平均成绩
select*
fromxk
select*
fromxk
where成绩>80
computeavg(成绩)
computesum(成绩)
computecount(成绩)
computemax(成绩)
computemin(成绩)
8.使用computeby来进行分类汇总计,第一步:
对分类关键字先排序,第二步用compute表达式by分类关键字进行分类汇总
例:
//分类汇总计算每个人的总分
select学号,成绩
fromxk
orderby学号//排序
computesum(成绩)by学号//分类汇总
例:
//按性别计算年龄的总分
select性别,年龄
fromstudent
orderby性别
computesum(年龄)by性别
//计算每个系所有学生的平均年龄
select所在系,年龄
fromstudent
orderby所在系