首页 > 代码库 > 数据库原理概论
数据库原理概论
第一章
1.数据库的四个基本概念
(1)数据(Data): 数据是信息的符号化表示
(2)数据库(Database/DB) ?长期存储在计算机内的有组织的、可共享的大量 数据的集合。
(3)数据库管理系统(Database Management System/DBMS):组织、存储、维护和获取数 据库中数据的软件系统,是介于数据库用户和操作系统之间的数据管理软件。(sql sever,mysql,Oracle;MongoDB)
(4)数据库系统(Database System/DBS): 在计算机系统中引入数据库后的系统,
包括: 1. 数据库、数据库管理系统、各种开发工具 2.数据库应用系统、计算机硬件及其他软件 3. 数据库管理员DBA (Database Administrator)、用户
2.数据管理技术的三个阶段 ?人工管理阶段 (数据不保存,不共享)文件系统阶段 (长期保存共享性差,不安全)?数据库系统阶段。
3.数据结构化:不仅能反映数据本身,而且还能反映数据之间的联系
数据独立性(数据与应用程序之间相互依赖程度) :包括逻辑独立性(它改变了也不改变用户程序)和物理独立性(它改变了也不改变应用程序);
4.三级模式:内模式(物理模式)、模式(逻辑模式)、外模式(用户模式);
二级映像:模式/内模式映像(物理独立性);外模式/模式(逻辑模式)
5.模型: 对客观事物进行模拟和抽象的工具
数据模型:对客观世界中的数据特征进行抽象的工具,包括:
概念模型:按用户的观点来对数据和信息建模,用于数据库设计,包括层次模型、网状模型、关系模型、面向对象模型等。
逻辑模型:按计算机系统的观点对数据建模,用于DBMS 实现。
物理模型:在磁盘或磁带上的存储方式和存取方法
6.数据模型三要素:数据结构,数据操作,数据完整性约束(? 实体完整性 ? 参照完整性 ? 用户定义的完整性 )。
7. 码(Key):唯一标识实体的属性集
域(Domain):属性的取值范围
实体型(Entity Type):用实体名和属性名来抽象和描述实体的框架
实体集(Entity Set):同一类型实体的集合
联系(Relationship):一对一,一对多,多对多
第二章
关系代数:并(∪) ? 交(∩) ? 差(-) ? 笛卡尔积(×) 专门的关系运算 ? 选择(σ) ? 投影(Π) ? 连接( ?) ? 除(÷)
(并(∪) ? 交(∩)笛卡尔积(×) 选择(σ) ? 投影(Π)不能被推导出)
例1:查询所有学生的学号、姓名及其选修的课程的课号、 课名与成绩。
∏??????????????.??????,??????????,????????????.??????,??????????,?????????? ((?????????????? ? ????) ? ????????????))
??????????????.?????? = ????.?????? ????.?????? = ????????????.??????
例2:查询与刘晨在同一个系的学生的学号与姓名。
Π??2.??????,??2.??????????(????1.??????????=′刘晨′???2.??????????≠′刘晨′(?????????????? ?Student)
??1.?????????? = ??2.??????????
例3:查询同时选修了1号课程和3号课程的学生的学号。
Π??????, ??????(????) ÷ Π??????(????????=1???????=3(????????????) )
例4:查询同时选修了所有课程的学生的姓名。
Π??????????(Π??????, ??????(????) ÷ Π??????(????????????) ? ??????????????)
例5:至少选修了刘晨所选全部课程的学生信息。
(Π??????, ?????? ???? ÷ Π?????? ????????????=′刘晨′ ?????????????? ? ???? ) ? ??????????????
例6:查询没有被所有学生选修的课程的课名。
Π??????????((Π?????? ???????????? -Π??????, ?????? ???? ÷ Π?????? ?????????????? ) ? ????????????)
第三章SQL
建立Student表
CREATE TABLE Student(Sno char(9) PRIMARY KEY,Sname varchar(20) UNIQUE,Ssex char(2) NOT NULL,Sage smallint CHECK(Sage>15 and Sage<30),Sdept char(20));
建立课程表Course
CREATE TABLE Course(Cno char(10) PRIMARY KEY,Cname varchar(40),Cpno char(10),Ccredit smallint,FOREIGN KEY(Cpno) REFERENCES Course(Cno)//Cpno为外码,被参照表为Course,被参照列是Cno);
向Student 表中增加“民族(Snation)”列,6位字符。
ALTER TABLE Student ADD Snation varchar(6);
将 Snation 列的数据类型改为 varchar,8位字符。
ALTER TABLE Student ALTER COLUMN Snation varchar(8);
删除 Snation 列。
ALTER TABLE Student DROP COLUMN Snation
删除Student 表
DROP TABLE Student;
注意:若基本表被其他基本表中的外键约束所引用,则在此外键约束被删 除之前,基本表无法被删除。
查询全体学生的学号、姓名和出生年份并使用别名。
SELECT Sno, Sname, 2016-Sage AS SyearFROM Student
查询所有系名
SELECT DISTINCT Sdept FROM Student
字符串匹配通配符
? %(百分号):表示零个、一个或多个任意字符。
? _(下划线):表示任意单个字符。
? [](方括号):表示指定范围([a-f])或集合([abcdef])中的 任意单个字符。 ?
[^]:表示不属于集合([abcdef])中的任意 单个字符。
? [\]:转义字符,用于去掉一些特殊字符的特定含义,使其被作为普通字符看待,如用“\%”表示字符%,用“\_”表示字符_。
查询所有姓名最后一个字为“晨”字的学生的信息。
SELECT * FROM Student WHERE Sname LIKE ‘%晨’;
查询所有姓名最后一个字为“晨”字,且姓名为两个字的学生的信息。
SELECT * FROM Student WHERE Sname LIKE ‘_晨’;
查询所有叫“张小民”或“张大民”的学生的信息。
SELECT * FROM Student WHERE Sname LIKE ‘张[小大]民’;
查询学号从95001 至95005 及95007 与95009的学生的信息
SELECT * FROM StudentWHERE Sno LIKE ‘9500[1-579]’;
注意 <> 为不等于,升序:ASC;降序:DESC
查询全体学生信息,查询结果按所在系的系升序排列,同 一系中的学生按年龄降序排列。
SELECT * FROM Student ORDER BY Sdept ASC, Sage DESC
聚集函数 计数 ?COUNT() 求和 ? SUM() 求平均值 ? AVG() 求最大最小值 ? MAX() ? MIN()
查询选修了课程的学生的人数
SELECT COUNT(DISTINCT Sno) FROM SC
查询选修了3 门以上课程的学生的学号。
SELECT SnoFROM SCGROUP BY Sno HAVING COUNT(*) >= 3
WHERE: ?用于在基本表或视图中选择满足条件的元组。
HAVING: ?用于在 GROUP BY 子句分的组中选择满足条件的 组。
数据库原理概论