第八讲 数据库基础
- 数据库的基础知识
- 关系型数据库
- 关系型数据库的分类
- Access 数据库简介
- SQL Server 数据库简介
- SQL 结构化查询语句
1. 数据库基础知识
1. 数据库:
所谓数据库( Database )是指一组排列成易于处理或读取的相关信息,它是由一个或多个表对象组成的集合。这有些类似于 Excel 的工作簿和工作表。
2. 数据库管理系统:
数据库管理系统( DataBase Management System, 简称 DBMS )是指在操作系统支持下为数据库建立、使用和维护而配置的系统软件。
3. 数据库应用程序:
数据库应用程序是指用 VB 、 FoxPro 等开发工具设计的、实现某种特定功能的应用程序。如学生成绩管理系统、工资管理系统、物资管理系统等等。它利用数据库管理系统提供的各种手段访问一个或多个数据库,实现其特定的功能。
4. 数据库系统:
数据库系统是由计算机硬件、操作系统、数据库管理系统以及在其他对象支持下建立起来的数据库、数据库应用程序、用户和维护人员等组成的一个整体。
2. 关系型数据库
关系型数据库是根据表、记录和字段之间的关系进行数据组织和访问的一种数据库,它通过若干个表( Table )来存储数据,并通过关系( Relation )将这些表联系在一起。
近几年来,关系型数据库已成为数据库设计事实上的标准,这不仅因为关系模型本省具有强大的功能,而且还由于它提供了称为结构化查询语言 Structure Query Language ( SQL )的标准接口,该接口允许以一致的和可以理解的方法来一起使用多种数据库工具和产品。
在一个关系型数据库中可以包含若干张表,每张表又由若干记录组成,记录由若干字段组成。表与表之间通过关系连接。
关系
医生编号 | 姓名 | 职称 | 科室编号 | 专长 |
01104 | 李博 | 主任医师 | 01 | 牙科 |
01106 | 刘晓 | 副主任医师 | 01 |
|
01020 | 王林 | 副主任医师 | 01 |
|
02100 | 李颦 | 医师 | 02 |
|
03002 | 王西平 | 主任医师 | 03 |
|
04005 | 吴星智 | 副主任医师 | 04 |
|
06007 | 李可茹 | 主任医师 | 06 |
|
序号 | 日期 | 患者病例号 | 医生编号 | 诊断结果 |
1 | 2001-10-1 | 200212002 | 01104 | 牙龈炎 |
2 | 2002-1-9 | 200306007 | 01104 | 智齿 |
3 | 2002-11-3 | 200307006 | 01020 | 牙周炎 |
4 | 2003-6-3 | 200212002 | 02100 | 皮炎 |
5 | 2003-10-7 | 200306007 | 01020 | 牙龈炎 |
常用术语一
l 关系
一个关系就是一张二维表,每个关系有一个关系名。在计算机里,一个关系可以存储为一个数据库文件的表,例如,医生表或患者表。
l 元组
表中的行称为元组。一行是一个元组,对应表中的一个记录
l 属性
表中的列称为属性,每一列有一个属性名,对应数据表中的一个字段,例如医生编号、姓名、职称等字段。
l 域
属性的取值范围,即不同元组对同一个属性的取值所限定的范围。例如,在 “ 患者 ” 表 “ 女 ” 或 “ 男 ” 是性别的取值范围,对应 “ 性别 ” 字段的一个域
l 关键字(主键)
属性或属性组合,其值能够唯一地标识一个元组。比如, “ 医生 ” 表中的 “ 医生编号 ” 字段, “ 患者 ” 表中的 “ 患者病历号 ” 都唯一地表示一名医生、一名患者,那么它们都可以作为记录的关键字。
l 外键
在关系 A 中存在一个属性,不是关系的主属性,但与另一个关系 B 的主键对应,则称其为关系 A 的外键。比如学生关系中院系代码属性,与院系关系的主键 “ 院系代码 ” 对应,所以是学生关系的外键。
l 索引
为了更快地访问数据,大多数数据库都是用关键字对表进行索引。也就是按关键字对数据库进行排序,并建立一张索引表 ,每个索引输入项指向该记录在数据库中的行。类似于书籍的目录,章节内容指向所在的页码,而并不直接在目录中放置内容。
3. 关系型数据库的分类
关系型数据库一般可分为两类:
l 一类是桌面数据库,如 Access 、 Paradox 、 FoxPro 和 dBase 等
l 桌面数据库主要用于小型的、单机的数据库应用程序,不需要网络和服务器,实现起来比较方便,是初学者常用的数据库类型。
l 另一类是客户 / 服务器 (Client/Server) 数据库,如 SQL Server 、 Oracle 、 Sybase 等。
l 客户 / 服务器数据库 (C/S) 主要应用于大型的、多用户的数据库管理系统。其数据库应用程序分为两部分:一部分驻留在客户机上,用于向用户提供信息及操作界面。另一部分驻留在服务器中,主要用来实现对数据库的操作、进行具体的计算,并将结果发送回客户机。这对客户机档次较低的情况尤为适合。
关系型数据的设计规则
l 数据库表的特征
- 表中不能再包含表
课程名 | 学时数 | |
讲课 | 上机 | |
计算机基础 | 65 | 15 |
C 语言 | 70 | 20 |
课程名 | 讲课学时 | 上机学时 |
计算机基础 | 65 | 15 |
C 语言 | 70 | 20 |
- 在同一个关系中不能 出现相同的属性名。
- 关系中不允许 有完全相同的元组。
- 在一个关系中元组的次序无关紧要 。
- 在一个关系中列的次序无关紧要 。
数据完整性约束
l 实体完整性
l 表中的主键不能为空
l 参照完整性
l 若一个表中含有外键,则外键要么为空,要么为另一个表的主键,不能自创外键。
l 用户定义完整性
l 反映某一具体应用所涉及的数据必须满足的语义要求。
4. ACCESS 数据库简介
Access 数据库管理系统是 Microsoft Office 套件的重要组成部分, Access2008 是最新版本,可在 Windows 环境下运行。 Access 适用于小型商务活动,用以存贮和管理商务活动所需要的数据。
Access 数据库由六种对象组成,它们是表、查询、窗体、报表、宏和模块。
l 表 (Table)
l 查询 (Query)
l 窗体 (Form)
l 报表 (Report)
l 宏 (Macro)
l 模块 (Module)
5. SQL Server 数据库简介
SQL Server 2000 C/S 设计处理示意图
SQL Server 数据库概述
l SQL Server 2000 的版本
l 企业版( Enterprise Edition )
l 标准版( Standard Edition )
l 个人版( Personal Edition )
l 开发者版( Developer Edition )
l SQL Server 2000 工具和实用程序
l 企业管理器
l 服务管理器
l 查询分析器
l 事件探查器
6. SQL 结构化查询语句
SQL 是 Structured Query Language (结构化查询语言)的缩写。 SQL 是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出 “ 做什么 ” 的命令,具体 “ 怎么做 ” 是无需使用者考虑的。 SQL 功能强大、简单易学、使用方便,已经成为数据库操作的基础,并且现在几乎所有的数据库均支持 SQL 。
SQL 基本语句
1. SELECT 语句(使用最频繁)
一般格式:
SELECT[ALL/DISTINCT ] *| < 字段列表 >
FROM < 表名 >
[WHERE< 条件表达式 >]
[GROUP BY < 字段 >]
[HAVING < 条件表达式 >]
[ORDER BY< 列名 >{[ASC|DESC]}];
其中:
<>: 表示在实际的语句中要采用实际的内容进行替代
[ ]: 表示可以根据需要进行选择,也可以不选
| : 表示多项选项只能选其中之一
{ }: 表示必选项
对数据进行统计
l 用户经常需要对结果集进行统计,例如求和、平均值、最大值、最小值、个数等,这些统计可以通过集合函数、 COMPUTE 子句、 GROUP BY 子句来实现。
l 查询 “ 教师 ” 表中教师总数
SELECT COUNT(*) AS 教师总数 FROM 教师 // 新生成教师总数表
l 查询 “ 课程注册 ” 表中课程选课人数 4 人以上的各个课程号和相应的选课人数。
SELECT 课程号 , COUNT(*) AS 选课人数
FROM 课程注册
GROUP BY 课程号 ;同一个课程号分组
HAVING COUNT(*)>=4 ;用到聚集函数 count 后必须用 having 做条件
l 创建 “ 课程注册 ” 表的一个副本。
SELECT * INTO 课程注册副本 FROM 课程注册
SELECT * FROM 课程注册副本
带有比较运算符的子查询
l 使用 “ 教师 ” 表,查询与 “ 王钢 ” 同在一个系的教师基本信息。
SELECT 教师编号 , 姓名 , 性别 , 学历 , 职务 , 职称
FROM 教师 WHERE 系部代码 =
( SELECT 系部代码 FROM 教师 WHERE 姓名 =’ 王钢 ’ )
插入语句 INSERT
语法格式:
INSERT [INTO] table_name [column_list ] VALUES (data_values )
最简单的 INSERT 语句
INSERT 专业
( 专业代码 , 专业名称 , 系部代码 )
VALUES
('0103',' 电子商务 ','01')
INSERT INTO 课程 1
( 课程号 , 课程名 , 学分 )
SELECT 课程号 , 课程名 , 学分
FROM 课程
数据的修改 UPDATE
语法格式:
UPDATE table_name
SET {column_name ={expression | DEFAULT | NULL ]}[ , …n]
[FROM{<table_source >}[, … n]] [WHERE<search_condition >]
UPDATE 教学计划 SET 开课学期 =2 WHERE 专业代码 =’0101’
数据的删除 DELETE
l 语法格式:
DELETE table_name [FROM{ <table_source >}[, … n]]
[WHERE {<search_condition >}]