笔记
主要摘自 数据库系统概论(第6版) - 王珊 杜小勇 陈红 编著
数据(data)
描述事物的符号记录。是数据库中存储的基本对象。
数据的含义称为数据的语义,数据与其语义是不可分的。
数据库(database,DB)
是长期存储在计算机内有组织、可共享的大量数据的集合。(按一定的格式存放数据的仓库)
数据库管理系统
包含 数据定义功能(数据定义语言(data definition language,DDL))、数据组织、存储和管理功能、数据操纵功能(数据操纵语言(data manipulation languageDML))、数据库的事务管理和运行管理功能、数据库的建立和维护功能 的,位于用户与操作系统之间的数据管理软件。
数据库系统database system,DBS)
指由 数据库、数据库管理系统(及其应用开发工具)、应用系统和数据库管理员(database administrator,DBA)组成的存储、管理、处理和维护数据的系统
数据建模(data modeling)
把现实世界中的具体事物抽象、组织为某一数据库管理系统支持的数据模型,这个过程称为数据建模(data modeling)。
概念模型
用于信息世界的建模,是现实世界到机器世界的一个中间层次。
关系模型
建立在严格的数学概念基础之上,由一组关系组成,每个关系的数据结构是一张规范化的二维表。
- 关系(relation):一个关系对应通常说的一张二维表。
- 元组(tuple):表中的一行即为一个元组。
- 属性:表中的一列即为一个属性,每列的名称即为属性名。
- 码:又称为码键或键,是表中的某一个属性或一组属性,其值可以唯一确定一个元组。
- 域(domain):域表示某一属性的取值范围。
- 分量(component):元组中的一个属性值。
- 关系模式:对关系的描述,一般表示为:关系名(属性1,属性2,·,属性n)。
关系模型要求关系必须是规范化(normalization)的。关系的每一个分量必须是一个不可分的数据项。
优点:
- 关系模型建立在严格的数学概念基础上。
- 关系模型的概念单一。
- 关系模型的存取路径对用户隐蔽。
缺点:
- 存取路径对用户是隐蔽的,其查询效率往往不如层次模型和网状模型。
- 为了提高性能,关系数据库管理系统必须对用户的查询请求进行优化,因此增加了开发关系数据库管理系统的难度。
数据库系统的三级模式结构
模式、外模式和内模式 三级模式结构。
这三级模间提供了两级映像: 外模式/模式映像和模式/内模式映像。这两级映像保证了数据库系统中的数据能够具有较强的逻辑独立性和物理独立性
SQL 语句记录
一、查询
单体查询: select a from b
多重查询: select a,b from c
全部查询: select * from b
简单的单体转换: a, b AS c
1.查询全体学生的学号和姓名
1 | select sno,sname |
2.查询全体学生的详细信息
1 | SELECT * FROM student; |
3.查询全部学生的 “ 姓名 ” 及其 “ 出生年 ” 两列
1 | SELECT Sname, (2024 - Sage) AS BirthYear FROM Student; |
二、消除取值重复(distinct)
消除取值重复: select distinct a from b
4.查询选修了课程的学生学号
1 | SELECT DISTINCT Sno FROM SC; |
三、满足条件(WHERE)
指定条件: select a from b where c …
大小比较: select a,b from c where d </> …
确定范围: select a,b,c from d where c BETWEEN … AND …
in 和 not in 确定集合: select a,b from c where d IN (‘m’, ‘n’)
字符匹配: select … from … where … (not) like …
5.查询计算机系( IS )全体学生名单
1 | SELECT Sname FROM Student WHERE Sdept = 'IS'; |
6.查询全体 20 岁以下的学生姓名和年龄
1 | SELECT Sname, Sage FROM Student WHERE Sage < 20; |
7.查询所有在 20 到 23 岁(含 20 和 23 )的学生姓名、系别和年龄
1 | SELECT Sname, Sdept, Sage FROM Student WHERE Sage BETWEEN 20 AND 23; |
8.查询 IS 系和 CS 系的全体学生姓名和性别
1 | SELECT Sname, Ssex FROM Student WHERE Sdept IN ('IS', 'CS'); |
9.查询既不属于 IS 系,也不属于 MA 系的学生姓名和年龄
1 | SELECT Sname, Sage FROM Student WHERE Sdept NOT IN ('IS', 'MA'); |
10.查询所有姓李的学生姓名和性别
1 | SELECT Sname, Ssex FROM Student WHERE Sname LIKE '李%'; |
11.查询所有 “2002” 年入学的学生学号、姓名和系别
1 | SELECT Sno, Sname, Sdept FROM Student WHERE Sno LIKE '2002%'; |
12.查询所有不姓 “ 刘 ” 的学生信息
1 | SELECT * FROM Student WHERE Sname NOT LIKE '刘%'; |
13.查询名称含有 “ 数据 ” 的课程号、课程名及学分
1 | SELECT Cno, Cname, Ccredit FROM Course WHERE Cname LIKE '%数据%'; |
14.查询没有先修课的课程号和课程名。
1 | SELECT Cno, Cname FROM Course WHERE Cpno IS NULL; |
15.查询所有有成绩的学生学号、课程号及成绩
1 | SELECT Sno, Cno, Grade FROM SC WHERE Grade IS NOT NULL; |
四、查询结果排序(order by)
select a,b from c where d … order by b …
16.查询选修了 3 号课程的学生学号和成绩,结果按成绩降序排列。
1 | SELECT Sno, Grade FROM SC WHERE Cno = '3' ORDER BY Grade DESC; |
五、聚集函数(count、sum、avg、max、min)
聚集函数有count 、 sum 、 avg 、 max 、 min
count(列1),功能:计算列1的个数,行数。如果加distinct ,计算列1的不同值的个数。
sum(列1),功能是对列1的值进行求和。累加。条件是列1的属性为可累加的。
avg(列1),对列1的值进行求平均数。
Max,min,avg和sum具有共同的条件,列可计算。
17.查询学生总数
1 | SELECT COUNT(*) AS TotalStudents FROM Student; |
18.查询所有课程的总学分
1 | SELECT SUM(Ccredit) AS TotalCredits FROM Course; |
19.查询全体学生平均年龄
1 | SELECT AVG(Sage) AS AverageAge FROM Student; |
20.查询 1 号课程的最高分
1 | SELECT MAX(Grade) AS HighestScore FROM SC WHERE Cno = '1'; |
六、分组统计(group by)
21.查询男女学生各有多少人
1 | SELECT Ssex, COUNT(*) AS StudentCount FROM Student GROUP BY Ssex; |
22.查询每个课程的课程号和平均分。
1 | SELECT Cno, AVG(Grade) AS AverageGrade FROM SC GROUP BY Cno; |
23.查询选修了3门课程以上(含3门)的学生学号和选修课程数。
1 | SELECT Sno, COUNT(Cno) AS CourseCount FROM SC GROUP BY Sno HAVING COUNT(Cno) >= 3; |
24.查询选修了2门课程以上(含2门,但不含1号课程),学生学号和选修课程数。
1 | SELECT Sno, COUNT(Cno) AS CourseCount FROM SC WHERE Cno != '1' GROUP BY Sno HAVING COUNT(Cno) >= 2; |
25.查询不及格门数2门以上的学生学号。
1 | SELECT Sno |
26.查询有2名以上(含2名)学生选修了的课程号和选修人数。
1 | SELECT Cno, COUNT(Sno) AS StudentCount FROM SC GROUP BY Cno HAVING COUNT(Sno) >= 2; |