文档内容
~ 2 0 2 4 年 教 师 资 格 证 ~
《信息技术》
数 据 库 技 术 3 / 3
讲师:钮弘俊
更多干货关注 粉笔教师教育 粉笔教师P234
(三)数据操纵
1.插入数据-【格式】 【实例】
【例4-1】向学生表 S 中添加一条学生记录
INSERT INTO <表名> [(<列名1>[ ,<列名2>,…])] (11001,冯明,男,计算机,18)
VALUES (<值列表>)
*************************************************
INSERT INTO S
说明:
VALUES('11001','冯明','男','计算机',18)
①列名省略时,值列表必须是所有属性的数据。
②列名不省时,值列表必须与列名一一匹配。
*************************************************
③值列表为多个时,中间用逗号隔开,若是字符数据需
要加引号。P235
(三)数据操纵
1.插入数据-【格式】 【实例】
【例4-2】向学生表 S 中添加一条学生记录
INSERT INTO <表名> [(<列名1>[ ,<列名2>,…])] (11002,陈月,女)
VALUES (<值列表>) *************************************************
INSERT INTO S (SNo,SN,Sex)
说明:
VALUES('11002','陈月','女')
①列名省略时,值列表必须是所有属性的数据。
②列名不省时,值列表必须与列名一一匹配。
*************************************************
③值列表为多个时,中间用逗号隔开,若是字符数据需
要加引号。书上无
试题巩固
(2021上·高中)某关系数据库中的一个表结构为S(SN,CN,Grade),其中SN为学生名,
CN为课程名,二者均为字符型;Grade为成绩,数值型,取值范围为0~100。若要把“张
小庆的数学成绩90分”插入S中,则可以用( )。
A.ADD INTO S VALUES('张小庆','数学',90)
B.INSERT INTO S VALUES('张小庆','数学',90)
C.ADD INTO S VALUES('张小庆','数学','90')
D.INSERT INTO S VALUES('张小庆','数学','90')
INSERT INTO <表名> [(<列名1>[ ,<列名2>,…])]
VALUES (<值列表>)P235
(三)数据操纵
2.修改数据-【格式】 【实例】
【例5-1】将学生“冯明”转入自动化系。
UPDATE <表名>
SET <列名1>=<数据1>[,<列名2>=<数据2>,…]
UPDATE S
[WHERE <条件>]
SET Dept='自动化'
WHERE SN='冯明'
说明:
①where后面指定修改的条件
【例5-2】将所有学生的年龄增加1岁。
②where子句省略时,表示修改表中所有列的值
UPDATE S
SET Age=Age+1书上无
试题巩固
(单选)在“专业信息”表中, 将专业名称的值“软件工程”修改为“软件工程技术”,下列
SQL 语句正确的是( )。
A. REPLACE 专业信息 SET 专业名称 =" 软件工程技术 " WHERE 专业名称 =" 软件工程 "
B. UPDATE 专业信息 SET 专业名称 =" 软件工程技术 " WHERE 专业名称 =" 软件工程"
C. REPLACE 专业信息 SET 专业名称 WITH" 软件工程技术 " WHERE 专业名称 = 软件工程
D. UPDATE 专业信息 SET 专业名称 WITH" 软件工程技术 " WHERE 专业名称 = 软件工程
UPDATE <表名>
SET <列名1>=<数据1>[,<列名2>=<数据2>,…]
[WHERE <条件>]P235
(三)数据操纵
3.删除数据-【格式】 【实例】
【例6-1】删除学生“冯明”的记录。
DELETE FROM <表名>
[WHERE <条件>] DELETE FROM S
WHERE SN= '冯明'
说明:
①where后面指定删除记录的条件
【例6-2】删除学生表 S 的所有记录。
②where子句省略时,表示删除表中所有记录
DELETE FROM SP236
(四)单表查询
【格式】 【说明】
SELECT [ALL|DISTINCT] <列名> [ AS <列别名>]
①DISTINCT 代表在结果中,去除重复值
FROM <表名>
②若查询全部列,<列名>可以用*代替
[WHERE <条件1>]
③可以通过AS给列名和表起别名
[GROUP BY <列名1> [HAVING <条件2>] ]
④GROUP BY进行分组,HAVING根据条件进行分组
[ORDER BY <列名2> [ASC|DESC]]
⑤ORDER BY进行排序;ASC升序(可省)、DESC
降序P236
(四)单表查询
1.无条件查询【格式】 【实例】
【例7-1】从学生表S中查询所有学生的学号、姓名和性
别。
SELECT [ALL|DISTINCT] <列名> [ AS <列别名>]
*************************************************
FROM <表名>
SELECT SNo,SN,Sex
FROM S
*************************************************
说明:
①DISTINCT 代表在结果中,去除重复值
②若查询全部列,<列名>可以用*代替
③可以通过AS给列名和表起别名P237
(四)单表查询
1.无条件查询【格式】 【实例】
【例7-2】从学生表S中查询所有学生信息。
*************************************************
SELECT *
SELECT [ALL|DISTINCT] <列名> [ AS <列别名>]
FROM <表名> FROM S
*************************************************
说明:
①DISTINCT 代表在结果中,去除重复值
②若查询全部列,<列名>可以用*代替
③可以通过AS给列名和表起别名P238
(四)单表查询
2.条件查询【格式】 (1)比较查询【实例】
【例8-1】从选课表 SC 中查询成绩大于80的学生选课
SELECT [ALL|DISTINCT] <列名> [ AS <列别名>]
信息。
FROM <表名>
WHERE <条件1> *************************************************
SELECT *
说明:
FROM SC
①若查询全部列,<列名>可以用*代替
WHERE Grade>80
②查询条件及运算符对应表格
*************************************************
查询条件 运 算 符
比较 >,<,=,>=,<=,<>
多重条件 AND,OR,NOT
BETWEEN AND,
确定范围
NOT BETWEEN AND
确定集合 IN,NOT IN
字符匹配 LIKE,NOT LIKE
空值 IS NULL,IS NOT NULLP238
(四)单表查询
2.条件查询【格式】 (2)多重条件查询【实例】
【例8-2】从选课表 SC 中查询选修了课程“C0201”
SELECT [ALL|DISTINCT] <列名> [ AS <列别名>]
并且
FROM <表名>
WHERE <条件1> 成绩高于80分的学生的学号与成绩。
*************************************************
说明:
SELECT SNo, Grade
①若查询全部列,<列名>可以用*代替
FROM SC
②查询条件及运算符对应表格
WHERE CNo='C0201' AND Grade>80
查询条件 运 算 符
*************************************************
比较 >,<,=,>=,<=,<>
多重条件 AND,OR,NOT
BETWEEN AND,
确定范围
NOT BETWEEN AND
确定集合 IN,NOT IN
字符匹配 LIKE,NOT LIKE
空值 IS NULL,IS NOT NULLP238
(四)单表查询
2.条件查询【格式】 (3)确定范围查询【实例】
【例8-3】从学生表 S 中查询年龄在[16,19]之间的学生
SELECT [ALL|DISTINCT] <列名> [ AS <列别名>]
学号、姓名和年龄。
FROM <表名>
WHERE <条件1> *************************************************
SELECT SNo, SN, Age
说明:
FROM S
①若查询全部列,<列名>可以用*代替
WHERE Age BETWEEN 16 AND 19
②查询条件及运算符对应表格
*************************************************
查询条件 运 算 符
比较 >,<,=,>=,<=,<>
多重条件 AND,OR,NOT
BETWEEN AND,
确定范围
NOT BETWEEN AND
确定集合 IN,NOT IN
字符匹配 LIKE,NOT LIKE
空值 IS NULL,IS NOT NULLP239
(四)单表查询
2.条件查询【格式】 (4)确定集合查询【实例】
【例8-4】从选课表 SC 中查询选修了课程“C0204”
SELECT [ALL|DISTINCT] <列名> [ AS <列别名>]
或“D0101”的学生的选课信息 。
FROM <表名>
WHERE <条件1> *************************************************
SELECT *
说明:
FROM SC
①若查询全部列,<列名>可以用*代替
WHERE CNo IN ('C0204','D0101')
②查询条件及运算符对应表格
*************************************************
查询条件 运 算 符
比较 >,<,=,>=,<=,<>
多重条件 AND,OR,NOT
BETWEEN AND,
确定范围
NOT BETWEEN AND
确定集合 IN,NOT IN
字符匹配 LIKE,NOT LIKE
空值 IS NULL,IS NOT NULLP239
(四)单表查询
2.条件查询【格式】 (5)字符匹配查询【实例】
【例8-5】从课程表C中查询课号以“C”开头的所有
SELECT [ALL|DISTINCT] <列名> [ AS <列别名>]
课号及课程名 。
FROM <表名>
WHERE <条件1> *************************************************
SELECT Cno, CN
说明:
FROM C
①若查询全部列,<列名>可以用*代替
WHERE CNo like 'C*'
②查询条件及运算符对应表格
*************************************************
查询条件 运 算 符
比较 >,<,=,>=,<=,<>
多重条件 AND,OR,NOT
BETWEEN AND,
确定范围
NOT BETWEEN AND
确定集合 IN,NOT IN
字符匹配 LIKE,NOT LIKE
空值 IS NULL,IS NOT NULLP240
(四)单表查询
2.条件查询-【格式】 (6)空值查询【实例】
【例8-6】从选课表 SC中查询考试成绩有效(有数值)
SELECT [ALL|DISTINCT] <列名> [ AS <列别名>]
的学生选课信息 。
FROM <表名>
WHERE <条件1> *************************************************
SELECT *
说明:
FROM SC
①若查询全部列,<列名>可以用*代替
WHERE Grade IS NOT NULL
②查询条件及运算符对应表格
*************************************************
查询条件 运 算 符
比较 >,<,=,>=,<=,<>
多重条件 AND,OR,NOT
BETWEEN AND,
确定范围
NOT BETWEEN AND
确定集合 IN,NOT IN
字符匹配 LIKE,NOT LIKE
空值 IS NULL,IS NOT NULL书上无
试题巩固
1.(单选)某老师对“张伟”的所有信息进行查询,数据库是 mysql,数据表名称是
canbao_table,以下查询语句正确的是( )。
A. select * canbao_table where name=" 张伟 "
B. select from canbao_table where name=" 张伟 "
C. select * canbao_table in name=" 张伟 "
D. select * from canbao_table where name=" 张伟 "P240
(四)单表查询
3.聚集函数【格式】 【实例】
【例9】从学生表 S 中查询计算机系学生的人数以及这些
SELECT [ALL|DISTINCT] <列名> [ AS <列别名>]
学生年龄的总和及平均值 。
FROM <表名>
WHERE <条件1> *************************************************
SELECT COUNT(*), SUM(Age), AVG(Age)
说明:
FROM S
①可以通过AS给列名和表起别名
WHERE Dept='计算机';
②函数及功能对应表格
*************************************************
函数名称 功 能
SELECT COUNT(*) AS 个数, SUM(Age) AS 年龄和,
AVG(列名) 计算列值平均值
AVG(Age) AS 平均年龄
SUM(列名) 计算列值的总和
FROM S
MAX(列名) 求列值中的最大值
WHERE Dept='计算机';
MIN(列名) 求列值中的最小值
*************************************************
COUNT(*) 统计元组个数P241
(四)单表查询
4.分组查询【格式】 【实例】
SELECT [ALL|DISTINCT] <列名> [ AS <列别名>] 【例10-1】统计不同性别的学生人数 。
FROM <表名>
*************************************************
[ WHERE <条件1> ]
SELECT Sex, COUNT(*) AS 人数
GROUP BY <列名1>
FROM S
[ HAVING <条件2> ]
GROUP BY Sex
说明:
*************************************************
①GROUP BY进行分组
②分组之前有条件进行过滤,用WHERE
③分组之后有条件进行过滤,用HAVINGP241
(四)单表查询
4.分组查询【格式】 【实例】
SELECT [ALL|DISTINCT] <列名> [ AS <列别名>] 【例10-2】查询至少有2名男同学所在的系名 。
FROM <表名>
*************************************************
[ WHERE <条件1> ]
SELECT Dept
GROUP BY <列名1>
FROM S
[ HAVING <条件2> ]
WHERE Sex='男'
说明:
GROUP BY Dept
①GROUP BY进行分组
HAVING Count(*)>=2
②分组之前有条件进行过滤,用WHERE
*************************************************
③分组之后有条件进行过滤,用HAVINGP373
试题巩固
(2021下·高中)SQL 的查询语句“SELECT 所属部门 ,SUM( 工资 ) FROM 员工数据
库 GROUP BY 所属部门 ”的含义为( )。
A. 把员工数据库按照所属部门分组后,计算每个部门的平均工资
B. 把员工数据库按照所属部门分组后,计算每个部门的工资总和
C. 把员工数据库按按照属部门排序后,计算每个部门的平均工资
D. 把员工数据库按照所属部门排序后,计算每个部门的工资总和P242
(四)单表查询
5.排序查询【格式】 【实例】
【例11】从学生表S中查询学生的学号、姓名和年龄,并
SELECT [ALL|DISTINCT] <列名> [ AS <列别名>]
按年龄降序排列 。
FROM <表名>
*************************************************
[WHERE <条件1>]
SELECT SNo, SN, Age
ORDER BY <列名2> [ASC|DESC]
FROM S
ORDER BY Age DESC;
说明:
*************************************************
• ORDER BY进行排序;
• ASC升序(可省)、DESC降序P242
(五)多表查询
1.使用单表查询的SQL命令-【格式】 查询【实例】
【例12-1】查询学生冯明的学号、姓名、课号和成绩 。
SELECT [ALL|DISTINCT] <列名> [ AS <列别名>]
*************************************************
FROM <表名1> ,<表名2>
SELECT S.SNo, SN, CNo, Grade
[WHERE <条件1>]
FROM S, SC
[GROUP BY <列名1> [HAVING <条件2>] ]
[ORDER BY <列名2> [ASC|DESC]] WHERE S.SNO=SC.SNO AND SN='冯明'
*************************************************
说明:
①FROM子句,需要连接多个表
②SELECT后列名,如果两个表中均有,需要指明表名
③WHERE子句,需要指明两表建立联系的条件P243
(五)多表查询
2.使用JOIN子句-【格式】 查询【实例】
【例12-2】查询学生冯明的学号、姓名、课号和成绩 。
SELECT [ALL|DISTINCT] <列名> [ AS <列别名>]
FROM <表名1> INNER JOIN <表名2> *************************************************
ON <连接条件>
SELECT S.SNo, SN, CNo, Grade
[WHERE <条件1>]
FROM S INNER JOIN SC
[GROUP BY <列名1> [HAVING <条件2>] ]
ON S.SNO=SC.SNO
[ORDER BY <列名2> [ASC|DESC] ]
WHERE SN='冯明'
说明:
*************************************************
①两表之间用INNER JOIN进行连接
②两表建立连接的条件,使用ON子句第六节 关系数据的设计P244
一、设计基础
(一)设计步骤
设计步骤 主要功能
准确了解和分析用户的需求 ,是基础环节
需求分析
对用户需求进行归纳与抽象,并形成概念模型
概念结构设计
将概念模型转化成数据库管理系统所支持的逻辑模型
逻辑结构设计
为逻辑模型选取合适的物理结构(即物理模型)
物理结构设计
用数据库语言和宿主语言,建立数据库,编写与调试应用程序
数据库实施
投入运行并不断对其进行评估、调整
数据库运行和维护1.基于E-R模型的数据库设计方法
P245
(二)设计方法
1.基于 E-R 模型的数据库设计方法 学生表
学号 姓名 性别 系别
-- -- -- --
课程表
课程编号 课程名称 学分
-- -- --
选课表
学号 课程编号 成绩
-- -- --P245
(二)设计方法
2.基于3NF的数据库设计方法
Ø单一关系模式 → 投影 → 若干关系模式
学号 姓名 性别 系别 课程编号 课程名称 学分 成绩
-- -- -- -- -- -- -- --
学生表 课程表 选课表
学号 姓名 性别 系别 课程编号 课程名称 学分 学号 课程编号 成绩
-- -- -- -- -- -- -- -- -- --P245
二、函数依赖
(一)定义
Ø设关系模式 R(U),U 是属性集,X 和 Y 是 U 的子集。
ØX确定Y,Y依赖于X,记作 X Y 。X 为决定因子,Y 为依赖因子。
Ø当 Y 不依赖于 X 时,记作 X ↛ Y;
→
Ø当 X Y 且 Y X时,则记作 X Y。
→ → ↔
学生(学号、身份证号、姓名、身高、年龄)P246
(二)推理规则
ØIR1(自反规则):如果 X ⊇ Y,那么 X → Y。
ØIR2(增广规则):{X → Y}|=XZ → YZ。
ØIR3(传递规则):{X → Y,Y → Z}|=X → Z。
ØIR4(分解规则或投影规则):{X → YZ}|=X → Y。
ØIR 5(合并规则或加法规则):{X → Y,X → Z}|=X → YZ。
ØIR 6(伪传递规则):{X → Y,WY → Z}|=WX → Z。P246
(三)类型
1.完全函数依赖
ØX Y,且对于 X 的任何一个真子集 X' ,都有 X' ↛ Y,记为X Y
f
→
【例】关系模式S1(SNo,SN,Sex,Age,CNo,CN,Grade)中
(SNo,CNo) Grade
f
SNo SN Sex Age CNo CN Grade
11001 冯明 男 18 C0201 数据库原理及应用 85
11001 冯明 男 18 C0204 计算机网络 80
11002 陈月 女 19 C0302 算法设计与分析 65
12001 褚共 男 18 C0201 数据库原理及应用 70
12001 褚共 男 18 D0101 信息安全基础 76P246
(三)类型
2.部分函数依赖
ØX Y,且对于 X 的某一个真子集 X ' ,有 X ' Y,记为X Y
p
→ →
【例】关系模式S1(SNo,SN,Sex,Age,CNo,CN,Grade)中
(SNo,CNo) SN
p
SNo SN Sex Age CNo CN Grade
11001 冯明 男 18 C0201 数据库原理及应用 85
11001 冯明 男 18 C0204 计算机网络 80
11002 陈月 女 19 C0302 算法设计与分析 65
12001 褚共 男 18 C0201 数据库原理及应用 70
12001 褚共 男 18 D0101 信息安全基础 76P246
(三)类型
3.传递函数依赖
ØX Y, Y Z,且X不包含Y,Y不包含Z,Y ↛ X则X Z,记为X Z
→ → →
【例】关系模式 学生(学号,姓名,系别,系主任)中
学号 系主任
SNo SN 系别 系主任
11001 冯明 计算机系 张三
11002 陈月 计算机系 张三
12001 褚共 自动化系 李四书上无
试题巩固
(2021上·高中)下列关于函数依赖的描述中,不正确的是( )。
A.若A→B,A→C,则A→BC
B.若A→C,则AB→C
C.若A→B,DB→C,则DA→C
D.若AB→C,则A→C,B→CP246
(四)~(五)
【例1】设有 R(A,B,C,D),它的函数依赖集
F={D → B,B → D,AD → B,AC → D},求 R
的候选码。P247
(四)~(五)
【例2】设有 R(A,B,C,D),它的函数依赖集
F={AB → C,D → B,C → A,C→D},求 R 的候
选码书上无
试题巩固
(2023 上 · 高中)设有关系模式 R(A,B,C,D,E),R 的函数依赖集:F={A → B,
E →D,BC →D,CD →A}。R 的候选码为( )。
A. AE
B. BE
C. CE
D. DEP248
三、范式
5种范式的包含关系:5NF ⊂ 4NF ⊂ BCNF ⊂ 3NF ⊂ 2NF ⊂ 1NF
u
(一)第一范式 1NF
Ø如果关系模式 R 的所有属性均为原子属性(不可再分),则称 R 属于第一范式。最起码条件
Sal
TNo TN Sex Prof TNo TN Sex Prof Basic Bonus
Basic Bonus
01001 赵乾 女 讲师 6000 500 01001 赵乾 女 讲师 6000 500
01002 钱坤 男 讲师 6000 1000 01002 钱坤 男 讲师 6000 1000
01003 孙震 女 副教授 7000 1200 01003 孙震 女 副教授 7000 1200
02011 李离 女 教授 8000 800 02011 李离 女 教授 8000 800
02013 周巽 男 教授 8000 2000 02013 周巽 男 教授 8000 2000P248
三、范式
(二)第二范式 2NF
Ø如果关系模式 R ∈ 1NF,且每个非主属性都完全依赖于 R 的主码/候选码,则称 R 属于第二范式
【例】将关系模式 选课(学号,课程号,姓名,成绩)规范化为 2NF
①主键:学号和课程号
②依赖关系:(学号,课程号)→ 姓名;(学号,课程号)→ 成绩
③调整:学生(学号,姓名) 选课(学号,课程号,成绩)P249
三、范式
(三)第三范式 3NF
Ø如果关系模式 R ∈ 2NF,且每个非主属性都不传递依赖于 R 的主码/候选码,则称 R 属于第三范
式
【例】将关系模式学生(学号,姓名,系别,系主任)规范化为 3NF
①主键:学号
②依赖关系:学号 → 姓名;学号 → 系别;学号 → 系主任
③调整:学生(学号,姓名,系别) 系管理( 系别 , 系主任 )P249
三、范式
(四)BC范式 BCNF
Ø如果关系模式 R ∈ 3NF,且不存在主属性对非主属性的函数依赖,则称 R 属于 BC范式,简称
BCNF
【例】假设该学校中每名教师只讲授一门课程,但一门课程可由多个教师讲授。
要求:将关系模式 学生(学号,课程号,教师,成绩)规范化为 BCNF
①主键:学号和课程号
②依赖关系:(学号,课程号)→ 教师;(学号,课程号)→ 成绩
③调整:学生(学号,课程号,成绩) 授课(教师,课程号)书上无
试题巩固
(2021下·高中)关系模式R(A,B,C,D,E),根据语义有如下函数依赖集:
F={A→C,BC→D,CD→A,AB→E}。关系模式R的规范化程度最高达到( )。
A.1NF
B.2NF
C.3NF
D.BCNF下
节
内
容