数据库原理概论

 

第一章

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)

);
View Code

 

建立课程表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

);
View Code

 

向Student 表中增加“民族(Snation)”列,6位字符。

ALTER TABLE Student ADD Snation varchar(6);
View Code

 

 

将 Snation 列的数据类型改为 varchar,8位字符。

ALTER TABLE Student ALTER COLUMN Snation varchar(8);
View Code

 

删除 Snation 列。

ALTER TABLE Student DROP COLUMN Snation 
View Code

 

删除Student 表

DROP TABLE Student; 
View Code

 

注意:若基本表被其他基本表中的外键约束所引用,则在此外键约束被删 除之前,基本表无法被删除。

 查询全体学生的学号、姓名和出生年份并使用别名。 

SELECT Sno, Sname, 2016-Sage AS Syear
FROM Student
View Code

 

查询所有系名

SELECT DISTINCT Sdept FROM Student
View Code

 

 字符串匹配通配符

▫ %(百分号):表示零个、一个或多个任意字符。

▫ _(下划线):表示任意单个字符。

▫ [](方括号):表示指定范围([a-f])或集合([abcdef])中的 任意单个字符。 ▫

[^]:表示不属于集合([abcdef])中的任意 单个字符。

▫ [\]:转义字符,用于去掉一些特殊字符的特定含义,使其被作为普通字符看待,如用“\%”表示字符%,用“\_”表示字符_。 

 查询所有姓名最后一个字为“晨”字的学生的信息。

SELECT * FROM Student WHERE Sname LIKE%晨’;
View Code

 

查询所有姓名最后一个字为“晨”字,且姓名为两个字的学生的信息。

SELECT * FROM Student WHERE Sname LIKE ‘_晨’; 
View Code

 

 

查询所有叫“张小民”或“张大民”的学生的信息。

SELECT * FROM Student WHERE Sname LIKE ‘张[小大]民’;
View Code

 

 查询学号从95001 至95005 及95007 与95009的学生的信息

SELECT * 
FROM Student
WHERE Sno LIKE9500[1-579]’;
View Code

 

注意 <> 为不等于,升序:ASC;降序:DESC

查询全体学生信息,查询结果按所在系的系升序排列,同 一系中的学生按年龄降序排列。 

SELECT * FROM Student ORDER BY Sdept ASC, Sage DESC
View Code

聚集函数 计数 ▫COUNT()  求和 ▫ SUM()  求平均值 ▫ AVG()  求最大最小值 ▫ MAX() ▫ MIN() 

查询选修了课程的学生的人数

SELECT COUNT(DISTINCT Sno) 
FROM SC
View Code

查询选修了3 门以上课程的学生的学号。 

SELECT Sno
FROM SC
GROUP BY Sno 
HAVING COUNT(*) >= 3 
View Code

 WHERE: ▫用于在基本表或视图中选择满足条件的元组。

HAVING: ▫用于在 GROUP BY 子句分的组中选择满足条件的 组。 

 

posted @ 2016-09-17 14:42  王家小西  阅读(1108)  评论(0编辑  收藏  举报