数据库的基础.docx
《数据库的基础.docx》由会员分享,可在线阅读,更多相关《数据库的基础.docx(36页珍藏版)》请在冰豆网上搜索。
![数据库的基础.docx](https://file1.bdocx.com/fileroot1/2023-2/28/41bdb3e9-ed9b-4335-8322-713ea63d01bd/41bdb3e9-ed9b-4335-8322-713ea63d01bd1.gif)
数据库的基础
数据库的基础:
概念一,信息:
现实世界事物的存在方式或运动状态的反映。
概念二,数据:
是数据库中存储的基本对象,描述事物的符号记录。
概念三,数据库:
(存放数据的仓库,)长期存储在计算机内的有组织的、可共享的数据集合。
四大特点:
一:
数据库中的数据按一定的数据模型组织描述和存储;
二:
具有较小的冗余度;
三:
具有较高的数据独立性和易扩充性;
四:
为各种用户共享。
数据库的发展:
阶段一:
人工(手工)管理;
阶段二:
文件系统;
阶段三:
数据库系统。
数据(DB:
Database)
数据库系统(DBS)采用了数据库技术的计算机系统;
数据库管理系统(DBMS)位于用户和操作系统之间的一层数据库管理软件。
DBMS四大功能:
数据定义;数据操作(DML);数据库的运行管理;数据库的建立和维护。
信息世界的基本概念:
一:
实体(Entity):
是指客观存在并可以相互区别的事物。
实体可以是具体的人、事、物,也可以是抽象的概念和联系;
二:
(Attribute):
具有的某一特性称为实体的属性,一个实体有若干个属性来描述;
实体域实体之间的联系:
<一对一(1:
1)、一对多(1:
m)、多对多(m:
n)>
E-R图
实体:
矩形框
属性:
椭圆表示
联系:
直线表示
联系名:
菱形
三:
码(Key):
唯一标识实体的属性集成为码;
四:
域(Domain):
属性的取值范围称为该属性的域;
五:
实体型(EntityType):
具有相同属性的实体成为同型实体,用实体名及其属性名的集合来抽象和刻画同类实体,称为实体型;
六:
实体集(EntitySet):
同型的实体集合称为实体集。
实例:
学生选课管理系统
一:
确定实体
学生:
属性:
姓名、性别、学号、出生日期、籍贯;
课程:
属性:
学时、名称、学分、课程代码;
教材:
属性:
ISBN号(教材编号)、出版社、作者、单价、教材名。
数据库的系统体系结构
采用三级模式两级映射的结构
数据库的三级模式:
外模式:
子模式或用户模式,是模式的子集,一个数据库可以有多个外模式
模式:
逻辑结构……
内模式:
数据库只有一个内模式
两级映射:
外模式/模式映射
模式/内模式映射
关系数据库
关系模型:
数据结构、关系操作、关系的完整性
主关键字或主码:
pk
外部关键字或外码:
fk
主表和从表。
数据库的基本运算
增、删、改、查
select查询
create创建
table表
drop删除
alter修改
view视图
index索引
数据库文件的三种类型
主数据文件.MDF有且只有一个主数据文件
辅助数据文件.NDF
事务日志文件.LDF至少要有一个
数据库以命令形式建立:
createdatabasestudent1
onprimary
(
name='student1_data',
filename='c:
\shujuku\student1_data.mdf',
size=3MB,
filegrowth=20%)
logon
(
name='student1_log',
filename='C:
\shujuku\student1_log.ldf',
size=1MB,
filegrowth=10%)
collateChinese_PRC_CI_AS
例二:
createdatabaseBVTC_DB
onprimary
(
name='BVTB_DB_data',
filename='c:
\shujuku\BVTB_DB_data.mdf',
size=5MB,
maxsize=20MB,
filegrowth=20%)
logon
(
name='BVTC_DB_log',
filename='C:
\shujuku\BVTC_DB_log.ldf',
size=5MB,
filegrowth=10%)
collateChinese_PRC_CI_AS
例题:
createdatabasestudent
onprimary
(name=StuPri1_dat,
filename='E:
\SQLDATA\SPri1dat.mdf',
size=10,maxsize=50,filegrowth=15%
),
(name=StuPri2_dat,
filename='E:
\SQLDATA\SPri2dat.ndf',
size=10,maxsize=50,filegrowth=15%
),
(name=StuPri3_dat,
filename='E:
\SQLDATA\SPri3dat.ndf',
size=10,maxsize=50,filegrowth=15%
),
filegroupStuGroup1
(name=StuGrp1Fi1_dat,
filename='E:
\SQLDATA\SG1Fi1dt.ndf',
size=10,maxsize=50,filegrowth=5
),
(name=StuGrp1Fi2_dat,
filename='E:
\SQLDATA\SG1Fi2dt.ndf',
size=10,maxsize=50,filegrowth=5
),
(name=StuGrp1Fi3_dat,
filename='E:
\SQLDATA\SG1Fi3dt.ndf',
size=10,maxsize=50,filegrowth=5
),
filegroupStuGroup2
(name=StuGrp2Fi1_dat,
filename='E:
\SQLDATA\SG2Fi1dt.ndf',
size=10,maxsize=50,filegrowth=5
),
(name=StuGrp2Fi2_dat,
filename='E:
\SQLDATA\SG2Fi2dt.ndf',
size=10,maxsize=50,filegrowth=5
),
(name=StuGrp2Fi3_dat,
filename='E:
\SQLDATA\SG2Fi3dt.ndf',
size=10,maxsize=50,filegrowth=5
)
logon
(name=student_log,
filename='E:
\SQLDATA\student.ldf',
size=5MB,
maxsize=25MB,
filegrowth=5MB
)
go
1、打开数据库:
(代码)
usedatabase_name
usestudent1(文件名称)
go
2、查看数据库信息:
execsp_helpdb‘student’
3、修改数据库信息:
alterdatabasestudent1
(1)添加数据文件:
addfile
(2)添加日志文件:
addlogfile
(3)修改数据文件容量:
modifyfile
(4)删除数据库文件:
removefile
例:
为BVTC_DB数据库增加容量:
useBVTC_DB
go
alterdatabaseBVTC_DB
modifyfile
(
name=BVTC_DBdata
size=20MB
)
查看数据库选项:
execsp_dboption‘student1’(文件名称)
修改数据库选项:
execsp_dboption‘student1’,option_name,
例:
更改数据库‘teacher’名称为‘student’。
student
execsp_dboption’teacher’,’read_only’,false
go
execsp_renamedb‘teacher’,’student’
go
分离数据库:
sp_detach_db‘student’(文件名)
usemaster
sp_detach_db‘student’
附件数据库:
createdatabasedatabase_name
on(filename=’C:
\······’)
例:
将student数据库附加到SQLserver服务器中
usemaster
createdatabasestudent
on(filename=’D:
\student_data.mdf’)
forattach
删除数据库:
方法一:
dropdatabasestudent
方法二:
execsp_dbremovestudent
usemaster
go
dropdatabasestudent
go
分组代码:
filegroupstugroup1
代码建表:
usestudent
go
createtabledbo.zy
(
zydmchar(4)notnull,
zymcvarchar(20)notnull,
xbdmchar
(2)notnull
)
go
修改表的数据:
例
altertabledepartment
altercolumnxbmcvarchar(50)
notnull
创建约束:
(创建主键)
usestudent
go
createtablebanji
(
bjdmchar(9)constraintpk_bjdmprimarykey,(意为创建的约束条件“主键”:
创建主键)
bjmcvarchar(20)notnull,
zydmchar(4)notnull,
xbdmchar
(2)notnull,
bzvarchar(50)
)
表备份:
选中表,单击右键,选中“编写表脚本”,“CREATE到”,“新查询编辑器窗口”:
USE[student]
GO
/******Object:
Table[dbo].[Internet]ScriptDate:
09/11/201313:
41:
42******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
SETANSI_PADDINGON
GO
CREATETABLE[dbo].[Internetbenfen](添加蓝色区域代码)
(
[zydm][char](4)NOTNULL,
[zymc][varchar](20)NOTNULL,
[xbdm][char]
(2)NOTNULL
)ON[PRIMARY]
GO
SETANSI_PADDINGOFF
GO
用代码创建外键:
usestudent
go
createtablexuesheng
(
xhchar(12)constraintpk_xhprimarykey,
xmchar
(2),
csrpdatetime,
rxrpdatetime,
bjdmchar(9)constraintfk_bjdmreferencesbanji(bjdm)(意为创建外键:
外键必须是另一个表里的主键,意为若要实现外键约束,那么必须有两张表才能,并且一张表的主键会是另一张表的外键,那么才能够实现)
go
在已存在列表中添加行:
usestudent(表名)
go
insertbanjivalues('060501001','软件-2班','0501','05','')
查看表中数据:
usestudent
select*fromdbo.xuesheng(表名)
查看表结构:
executesp_helpxuesheng
在列表中添加一列:
altertablexuesheng
addjtdzvarchar(30)notnull
更改添加列的参数:
altertablexuesheng
altercolumnjtdzvarchar(50)null
删除表中的一列:
altertablexuesheng
dropcolumnjtdz
删除表:
droptabledbo.Internet(表名)
(注:
代码中绿色区域为表名及各列名)
在已建立好的表中建立数据信息:
insertbanji
values
('060101001','06级软件工程班','0101','01',''),
('060102002','06级网络技术班','0102','01',''),
('060201001','06级经济管理班','0201','02',''),
('060202002','06级会计专业班','0202','02',''),
('060301001','06级电子商务班','0301','03',''),
('060302001','06级信息管理班','0302','03',''),
('060401001','06级影视制作班','0401','04','')
char、varchar、datetime···型时使用单引号,int,smallint,tinyint···型时不使用单引号。
建立数据表,进入,输入列:
createtablexibu1
(
xbdmchar
(2)constraintpk_xbdm1primarykey,
xbmcvarchar(30)notnull,
xzrvarchar(8)
)
go
insertxibu1
(xbdm,xbmc,xzr)
selectxbdm,xbmc,xzr
fromxibu
使用update语句更新数据的语法格式:
Update表名
Set字段名=新值,字段名=新值
Where条件表达式
例:
update系部
set系主任=‘刘海军’
where系部代码=‘01’
updatedbo.xibu
setxzr='刘海军'(注意是否要加单引号)
wherexbdm='01'(意为更改的具体位置)
两张表格的同时更改,并使得两张表格中被要求的字段名值相等:
updaterenke
set
renke.ksz=jiaoxuejihua.ksz,renke.jsz=jiaoxuejihua.jsz
fromjiaoxuejihua
wherejiaoxuejihua.kch=renke.kch
andjiaoxuejihua.zydm=renke.zydm
andjiaoxuejihua.zyxj=renke.zyxj
使用delete语句删除数据:
Deletefrom表名
Where字段名=值
例:
deletezhuce
fromxuesheng
wherexuesheng.xh=zhuce.xh
andxuesheng.xm='张三'
andzhuce.kch='0001'
使用truncatetable清空表格(删除后不能恢复):
truncatetable表格名
查询课程表中的课程号和课程名称:
selectkch,kcmcfromkecheng
查询学生表中的‘男’:
select*fromxuesheng
wherexb=’男’
查看学生表中的姓名、性别、出生日期:
selectxmas姓名,xb性别,出生日期=csrqfrom学生
groupby:
对结果集进行分组。
having子句:
对结果再次按照条件进行筛选,通常与groupby子句一起使用。
orderby子句:
对结果进行排序
asc升序desc降序
知识点:
日期函数
year()年
month()月
data()日
getdata()获得当前的日期
例:
selectxm,YEAR(gate())-YEAR(csrq)as(可省略)名称fromxuesheng
selectxm,名称=YEAR(gate())-YEAR(csrq)fromxuesheng
选择表中的若干记录:
去掉重复行:
distinct
例4查询选修了课程的学生学号:
selectxhfromkczc
selectdistinctxhfromkczc
限制返回行数:
topn
topnpercent(百分比)
例5查询课程注册表中的前三条记录消息:
selecttop3*fromkczc
例6查询课程注册表中的前20%记录:
selecttop20percent*fromkczc
查询满足条件的元组:
where子句引导条件
常用的查询条件:
1、比较查询:
=><<>(不等于)!
=!
>!
2、确定范围:
between..and
notbetween..and
3、确定集合:
in
notin
4、字符匹配:
like
notlike
(1)%代表任意长度的字符
(2)_代表任意单个字符a_b
(3)[]代表方括号内列出的任意一个字符
(4)[^]代表不在方括号内列出的任意一个字符
5、空值:
isnull
notisnull
6、多重条件的判断:
andornot
例1:
查询年龄小于或等于35岁的教师信息。
select*fromjiaoshi
whereyear(getdate())-year(csrq)<=35
例2:
查询出生日期在1971年至1980年之间的教师编号,姓名和出生日期。
selectjsbh,xm,csrqfromjiaoshi
wherecsrqbetween‘1971-01-01’and‘1980-12-31’
例3:
查询计算机系,经济管理系的班级名称和班级代码。
selctbjmc,bjdmformbanji
wherexbdmin(‘01’,‘02’)
例4:
冲寻学生表中姓刘的学生信息。
select*fromxuesheng
wherexmlike‘刘%’
例5:
查询班级表中备注字段为空的班级信息。
select*frombanji
wherebzisnull
例6:
查询教师表中出生日期在1971年至1980年之间的女教师信息。
select*fromjiaoshi
wherecsrqbetween‘1971-01-01’and‘1980-12-31’andxb=‘女’
对查询的结果排序:
orderby
升序asc
降序desc
默认排序为:
升序
例7:
查询男教师的基本信息,按照年龄降序排序。
select*fromjiaoshi
wherexb=‘男’
orderbyyear(getdate)-year(csrq)desc
例8:
查询全体学生信息,查询结果按照所在的班级的班级代码降序排序,同一个班级按照学号升序排序。
select*fromxuesheng
orderbybjdmdesc,xhasc
对数据进行统计:
1、集合函数
count()记录个数
sum()求和
avg()求平均值
max()求最大值
min()求最小值
例9:
查询学生表中的学生总数
selectcount(*)as学生总数fromxuesheng
例10:
查询学生的平均年龄
selectavg(year(getdate)-year(csrg))
as平均年龄fromxuesheng
对结果进行分组:
groupby
having子句:
对分组的结果按照条件进行再次筛选
例11:
查询课程注册表中选课人数3人以上的各课程号和相应的选课人数
selectkch,jsbh,count(*)as选课人数
fromkczc
groupbyjsbh,kch
havingcount(*)>=3
orderbykch
使用compute子句进行分类汇总
例12:
查询所有学生所有成绩的总和:
select*fromkczc
orderbyxh
computesum(cj)
例13:
对每个学生的所有课程的成绩求和,并显示详细记录:
select*fromkczc
orderbyxh
computesum(cj)byxh
用查询结果生成新表:
into新表名
例14:
创建班级表的一个副本:
select*intobanjifubenfrombanji
go
slect*frombanjifubeng
多表查询:
多表连接查询;交叉连接查询;等值连接与非等值连接;外连接查询;复合连接条件查询。
连接查询:
从多过表中查询数据的查询。
多表连接查询:
例:
查询“08级电子商务班”的学生信息。
Select*from学生innerjoin班级
On学生.班级代码=班级.班级代码
Where班级.班级名称=“08级电子商务班”
交叉连接查询:
crossjoin
等值连接与非等值连接查询:
外连接:
outerjoin
1、左外连接:
leftjoin
2、右外连接:
rightjoin
3、内部连接:
innerjoin
4、全连接:
fulljoin
5、复合连接条件查询:
on
例:
查询成绩在75分以上的学生的学号、姓名、专业代码和专业学级,选修课的学期、课程号、成绩,任课教师的教师编号、姓名。
学生asA
课程注册表asB
教师asC
selectA.学号,A.姓名,B.专业代码,B.专业学级,B.学期,B.课程号,B.成绩,C.教师编号,C.姓名
from学生asAjoin课程注册asB
onA.学号=B.学号and成绩>75
join教师asC
onB.教师编号=C.教师编号
子查询:
父查询:
查询的嵌套:
查询:
select..from..where查询块
三种结构实现子查询:
(1)通过运算符in引入或者由运算符any或者all修改的比较运算符引入;
(2)通过没有修改的比较运算符引入;
(3)通过exists(存在)引入的存在性测试;
处理方式:
从里面到外面
最多嵌套32层。
子查询块必须用圆括号括起来。
1、带有in运算符的子查询:
子查询的结果是一个集合。
例、使用“系部”表和“班级”表,查询计算机系和经管系的班级信息。
Select*from班级
Where系部代码in(select系部代码from系部where系部名称=‘计算机系’and系部名称=‘经济管理系’)<蓝色部分为子查询>
例2、查询选修了课程名称为“数据库应用”的学生的学号和姓名。
select学号,姓名from