数据库的基础.docx
- 文档编号:11378153
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:36
- 大小:29.03KB
数据库的基础.docx
《数据库的基础.docx》由会员分享,可在线阅读,更多相关《数据库的基础.docx(36页珍藏版)》请在冰豆网上搜索。
数据库的基础
数据库的基础:
概念一,信息:
现实世界事物的存在方式或运动状态的反映。
概念二,数据:
是数据库中存储的基本对象,描述事物的符号记录。
概念三,数据库:
(存放数据的仓库,)长期存储在计算机内的有组织的、可共享的数据集合。
四大特点:
一:
数据库中的数据按一定的数据模型组织描述和存储;
二:
具有较小的冗余度;
三:
具有较高的数据独立性和易扩充性;
四:
为各种用户共享。
数据库的发展:
阶段一:
人工(手工)管理;
阶段二:
文件系统;
阶段三:
数据库系统。
数据(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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 基础