数据库概论
数据库系统概述
数据库管理系统(DBMS)是位于用户和操作系统之间的一层数据管理软件。
数据库系统(DBS)是由数据库、数据库管理系统、应用程序和数据库管理人员(DBA)组成的存储、管理、处理和维护数据的系统。
两层数据模型
逻辑模型(从软件管理角度组织数据)由数据结构、数据操作、数据的完整性约束三部分组成。
物理模型(从硬件存储角度组织数据)
概念模型
一对一联系
一对多联系
多对多联系
- 数据库系统的三级模式结构:模式、外模式、内模式。
- 数据库系统的两级映像:外模式/模式、模式/内模式映像。
SQL Server Mangement2008简单使用及查询基本操作
-
连接到服务器
-
新建查询 create database db_StuInfoMangement 执行!use db_StuInfoMangement
-
create table tb_Student
( Sno CHAR (10) PRIMARY KEY,
Sname CHAR(20) UNIQUE,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
建表成功! -
数据库->db_StuInfoMangement->表->系统表->dbo.tb_Student;
-
增加一列数据 alter table tb_Student ADD Sphone CHAR(10) ;
-
dbo.tb_Student->右键编辑前两百行(自己输入数据)
- 查询所有select * from student;
查询计算机系(cs)的学生的姓名、年龄。
select sname, sage from student where sdept = ‘ cs ‘
- 查询选修了01号课程的学生的学号和成绩。
select sno, grade from sc where cno = ‘01‘
- 查询成绩在70到80分之间的学生的学号、课程号和成绩。
select sno, cno, grade from tb_student where grade between 70 and 80
- 查询计算机系(cs)年龄在18到20之间且性别为‘男‘的学生的姓名、年龄。
select sname, sage from student where sdept = ‘cs‘ and ssex=‘男‘ and sage between 18 and 20
- 查询9512101号学生的修课情况。
select * from sc where sno = ‘9512101‘
- 查询01号课程成绩最高的分数。
select max(grade) as max_grade from sc where cno = ‘01‘
- 查询学生都修了哪些课程,要求列出课程号。
select distinct cno from sc
- 查询学生的最大的年龄和最小的年龄
select max(ssag) as 最大年龄, min(ssag) as 最小年龄 from student
*查询修了02号课程的所有学生的平均成绩、最高成绩和最低成绩。
select avg(grade) 平均成绩, max(grade) 最高成绩, min(grade) 最低成绩
from sc where cno = ‘02‘
- 统计每个系的学生人数。
select sdept,count(*) 学生人数 from student group by sdept
- 统计每门课程的修课人数和考试最高分。
select cno 课程号, count(*) 修课人数, max(grade) 最高分 from sc group by cno
- 统计每个学生的选课门数,并按选课门数的递增顺序显示结果。
select sno, count(cno) 选课门数 from sc group by sno order by 选课门数
- 统计各系修课的学生总数和考试的平均成绩
select sdept, count(distinct sc.sno), avg(grade)
from student , sc
where student.sno = sc.sno
group by sdept
- 查询选课门数超过2门的学生的平均成绩和选课门数。
select sno, sum(grade) 总成绩, avg(grade) 平均成绩, count() 选课门数
from sc
group by sno having count() > 2
- 列出总成绩超过200分的学生,要求列出学号、总成绩。
select sno, sum(grade) 总成绩
from sc
group by sno having sum(grade) > 200
- 查询选修了02号课程的学生的姓名和所在系。
select sname, sdept
from Student , SC
where Student.Sno = SC.Sno and cno = ‘02‘
- 查询成绩80分以上的学生的姓名、课程号和成绩,并按成绩的降序排列结果。
select sname, cno, grade
from student , sc
where Student.Sno = SC.Sno and grade > 80
order by grade desc
- 在表中填加数据
insert into student values(‘200215121‘,‘李勇‘,‘男‘,20,‘CS‘);
insert into student values(‘200215122‘,‘刘晨‘,‘女‘,19,‘CS‘);
insert into student values(‘200215123‘,‘王敏‘,‘女‘,18,‘MA‘);
insert into student values(‘200215125‘,‘张立‘,‘男‘,19,‘IS‘);
go
- 向course表中添加数据并更新
insert into course values(‘1‘, ‘数据库‘, NULL,4);
insert into course values(‘2‘, ‘数学‘, NULL,2);
insert into course values(‘3‘, ‘信息系统‘, NULL,4);
insert into course values(‘4‘, ‘操作系统‘, NULL,3);
insert into course values(‘5‘, ‘数据结构‘, NULL,4);
insert into course values(‘6‘, ‘数据处理‘, NULL, 2);
insert into course values(‘7‘, ‘PASCAL语言‘, NULL,4);
go
update Course set Cpno = ‘5‘ where Cno = ‘1‘;
update Course set Cpno = ‘1‘ where Cno = ‘3‘;
update Course set Cpno = ‘6‘ where Cno = ‘4‘;
update Course set Cpno = ‘7‘ where Cno = ‘5‘;
update Course set Cpno = ‘6‘ where Cno = ‘7‘;
/为表Course添加数据/
go
第一、第二、第三范式
- 第一范式(无重复的列)
定义:数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。如果实体中的某个属性有多个值时,必须拆分为不同的属性
通俗解释:一个字段只存储一项信息
- 第二范式(属性完全依赖于主键)
定义:满足第一范式前提,当存在多个主键的时候,才会发生不符合第二范式的情况。比如有两个主键,不能存在这样的属性,它只依赖于其中一个主键,这就是不符合第二范式
通俗解释:任意一个字段都只依赖表中的同一个字段 ,第二范式规定非主属性的所有元素必须直接和主属性相关
- 第三范式(属性不能传递依赖于主属性)
定义:满足第二范式前提,如果某一属性依赖于其他非主键属性,而其他非主键属性又依赖于主键,那么这个属性就是间接依赖于主键,这被称作传递依赖于主属性。
通俗理解:一张表最多只存2层同类型信息
- 函数依赖 定义:设R(U)是属性集U上的关系模式,X,Y是U的子集。若对于R(U)的任意一个可能的关系r,r不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数确定Y或Y函数依赖于X,记作X->Y。若函数Y不函数依赖于X,则记作X-/->Y。
- 平凡依赖 定义:若X->Y,且Y是X的子集(对任一关系模式,平凡函数依赖必然成立),就是平凡函数依赖。
- 非平凡依赖 定义:若X->Y,但Y不是X的子集,就是非平凡函数依赖。
- 完全函数依赖 定义:在R(U)中,如果X->Y。并且对于X的任何一个真子集X‘,都有X‘-/->Y,则称Y对X有完全函数依赖,记作X->Y(箭头上有个大写F)。
- 部分函数依赖 定义:若X->Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作X->Y(箭头上有个大写P)。
- 传递函数依赖 定义:在R(U)中,如果X->Y(Y不是X的子集),Y-/->X,Y->Z,Z是Y的子集,则称Z对X传递函数依赖。记为X->Z(箭头上是汉字 “传递”)
- 直接函数依赖 定义:在R(U)中,如果X->Y,Y不是X的子集,Y->Z,Z是Y的子集,则称Z对X传递函数依赖。记为X->Z(箭头上是汉字 “直接”)
参照完整性
- 在create table 语句中用foreign key短语定义哪些列为外码
- 用references短语指明这些外码参照哪些表的主码
- 指明外码后参照完整性规则自动生效
- 参照完整性检查和违约处理
create table sc
(Sno varchar(10) not null,
Cno varchar(10) not null,
Grade smallint,
Primary key(Sno,Cno)
foreign key(Sno) References S(Sno)
on delete cascade
on update set null,
foreign key(Cno) References S(Cno)
on delete no action
on update cascade
); - 用户定义的完整性实现
create table student
(Sno varchar2(10) not null,
Sname varchar2(10) unique,
Ssex varchar2(10) check(Ssex=‘男‘ or Ssex=‘女‘),
Sbirth date,
College varchar2(40),
PRIMARY KEY(Sno)
);
当学生性别是‘男’时,名字不能以Ms.开头
create table student
(Sno varchar2(10) not null,
Sname varchar2(10) unique,
Ssex varchar2(10) check(Ssex IN(‘男‘,‘女’)),
Sbirth date,
College varchar2(40),
check(Ssex=‘女‘ or Sname not like ‘MS.%‘)
); - 建立学生登记表S
- 完整性约束命名子句
![](https://img2020.cnblogs.com/blog/2047558/202005/2047558-20200527174404277-185012049
传统集合运算
- 并、差、交
R和S满足的条件: - 具有相同的目n
- 相应的属性取自同一个域
R U S 仍为n目关系,由属于R或属于S的元组组成
R - S 仍为n目关系,由属于R或不属于S的元组组成
R ∩ S 仍为n目关系,由属于R又属于S的元组组成
- 广义笛卡尔积
R:n目关系,k1个元组
s:n目关系,k2个元组
列:(n+m)列的元组的集合 - 元组的前n列是关系R的一个元组
- 后m列是关系s的一个元组
行:k1*k2个元组
选择、投影、连接
选择
选择操作时在关系R中选择满足给定条件的诸元组,其表示形式为:
σf(R)={ t|t∈R∧F(t)=‘真’}
投影:从关系R中选择出若干属性列组成新的关系。(从列的角度出发)记作
连接:
R?S={tr⌒ts |tr∈R∧ts∈S∧tr[B]=ts[B]}
等值连接:
θ为“=”时的连接称为等值连接,从关系R和S的笛卡尔积中选取属性组A和B之相等的元组
自然连接:
- 首先要求两个关系进行比较的分量必须是同名的属性组;
- 最后,在等值连接的结果中去掉重复的属性列。
关系R和S在所有公共属性(common attribute)上的等接(Equijoin)。但在得到的结果中公共属性只保留一次,其余删除。
R?S={tr⌒ts |tr∈R∧ts∈S∧tr[B]=ts[B]}
外连接
除法运算
除法运算是二目运算