软件技术基础
第 13讲数据库设计基础和 SQL语言
计算机教学实验中心
第 2页
下一页
上一页
停止放映
2002年 10月 31日星期四
第 4章作业
作业,
1.第 4章的 6~8,17。
2,OS存储管理的对象与任务是什么?
? 常用的主存管理方法有哪几种?各自的特点是什么?
? OS设备管理包括哪些基本任务?
思考题,
1、第 4章的 1~3,12~14。
2,什么是实存储管理和虚存储管理?
? 主处理机与设备的信息交换有哪几种基本方法,各有何特
点?
? 什么是设备分配和驱动?
第 3页
下一页
上一页
停止放映
2002年 10月 31日星期四
上讲内容提示( 1):
? 一、关系模型的数学定义和关系代数
? 1.关系模型的数学定义:
? 域、元组、笛卡尔乘积、关系、属性、
关系模式,关系模型、关系数据库、
完整性约束(实体、参照、用户定义)
第 4页
下一页
上一页
停止放映
2002年 10月 31日星期四
上讲内容提示( 2):
? 2.数据库管理系统中的关系模型
关系的特点(表的特点)、
数据库 记录、字段、类型、值域
候选关键字、主关键字,外码, 数据类
型能体现数据结构的哪些特点 (逻辑关系、
存储方式、运算能力),字段类型
第 5页
下一页
上一页
停止放映
2002年 10月 31日星期四
上讲内容提示( 3):
? 3.关系代数
? 与、或、非、并、交、补、属于、不属
于、
? 包含、真包含
? 同类关系运算 (并、交、差、选择、投
影、联结、自然联结)
? 4.数据库中的关系运算
第 6页
下一页
上一页
停止放映
2002年 10月 31日星期四
上讲内容提示( 4):
? 二, 关系的规范化理论:
? 不好的数据库结构有操作异常 ( 冗余,
插入, 删除, 更新 )
? 数据依赖,函数依赖, 完全函数, 传递
函数依赖
? 范式
? 1NF,2NF,3NF
第 7页
下一页
上一页
停止放映
2002年 10月 31日星期四
一、数据库设计基础
第 8页
下一页
上一页
停止放映
2002年 10月 31日星期四
1.需求分析
主要结果是 系统分析说明书,数据流程图、数据字典
第 9页
下一页
上一页
停止放映
2002年 10月 31日星期四
数据流程图示例
第 10页
下一页
上一页
停止放映
2002年 10月 31日星期四
数据字典举例
第 11页
下一页
上一页
停止放映
2002年 10月 31日星期四
数据字典举例
第 12页
下一页
上一页
停止放映
2002年 10月 31日星期四
2。概念设计
? 概念设计的结果是 E-R图,概念设计独立
于数据库逻辑结构,独立于具体的数据
库管理系统。
? 根据需求分析得到的结果,画出各个部
分的局部 E-R图,表达出有哪些实体、实
体间的联系以及实体的属性。然后将各
个局部 E-R图合并在一起得到系统的全局
E-R图。
第 13页
下一页
上一页
停止放映
2002年 10月 31日星期四
概念设计( 2)
? 合并数据流图时注意消除 E-R图中的冲突:
? ( 1)属性冲突(整、实、字符)
? ( 2)命名冲突(名字不同)
? ( 3)结构冲突(对象、属性、)
第 14页
下一页
上一页
停止放映
2002年 10月 31日星期四
概念设计 E-R图示例
第 15页
下一页
上一页
停止放映
2002年 10月 31日星期四
3.逻辑设计
第 16页
下一页
上一页
停止放映
2002年 10月 31日星期四
逻辑结构设计步骤图示
第 17页
下一页
上一页
停止放映
2002年 10月 31日星期四
(1) E-R图向数据模型的转换
第 18页
下一页
上一页
停止放映
2002年 10月 31日星期四
(2) 数据模型的优化
(3)定义用户子模式
第 19页
下一页
上一页
停止放映
2002年 10月 31日星期四
4,物理设计
第 20页
下一页
上一页
停止放映
2002年 10月 31日星期四
5,数据库实施
第 21页
下一页
上一页
停止放映
2002年 10月 31日星期四
6.数据库的运行和维护
第 22页
下一页
上一页
停止放映
2002年 10月 31日星期四
数据库的安全性和完整性
? 安全性,数据和其他信息不能被有意或无意地破坏,
不能被未经授权的人员读取和修改。
? ( 1)用户身份标识和鉴别
? ( 2)存取权限控制策略
? ( 3)加密技术的使用
? 完整性,指数据的正确性和相容性,即合法拥护对数
据的增删改必须符合一定的语义。
? 基于列的完整性:如列的取值范围等
? 基于行的完整性:一行中各列之间的约束
? 基于关系的完整性:实体、参照和用户定义完整性
? 触发器:
第 23页
下一页
上一页
停止放映
2002年 10月 31日星期四
7.数据库设计的基本步骤
(大作业中库设计的基本要求 )
? 分析建立数据库的目的
? 确定数据库中的表
? 确定表中的字段
? 确定主关键字
? 确定表之间的关系
? 优化设计 (规范化 )
? 输入数据并新建其他 DB对象
第 24页
下一页
上一页
停止放映
2002年 10月 31日星期四
⑴ 分析建立数据库的目的
? 首先考虑,为什么要建立 DB及建立 DB
要完成的任务,。
? 这是 DB设计的第一步,也是 DB设计的
基础。
? 与 DB的最终用户进行交流,了解现行工
作的处理过程,讨论应保存及怎样保存
要处理的数据。
? 要尽量收集与当前处理有关的各种数据
表格。
第 25页
下一页
上一页
停止放映
2002年 10月 31日星期四
例案分析
? 建立数据库的目的:
例如,实现,教学管理,数据库应用。
? 功能要求:
? 实现,教师、学生、课程、学习成绩,
四个方面的综合管理
? 教师可以查看学生的 简况、成绩、课程
? 学生可以选择 教师、课程 和 查看成绩
第 26页
下一页
上一页
停止放映
2002年 10月 31日星期四
⑵ 确定数据库中的表
? 从确定的 DB所要解决的问题和收集的各种表格中,不
一定能够找出生成这些表格结构的线索。
? 因此,不要急于建立表,而 应先在纸上进行设计 。为了
能更合理地确定出 DB中应包含的表,应按下列原则对
信息进行分类,(设计原则):
? 表中不应包含重复信息,并且信息不应在表之间复制;
? 若每条信息只保存在一个表中,只需在一处进行更新,这样效
率高,同时也消除了包含不同信息的重复项的可能性;
? 每个表应该只包含关于一个主题的信息
可以独立于其他主题来维护每个主题的信息。例如,将教师和
学生的信息分开,这样当删除一个学生信息是不会影响教师信
息 。
第 27页
下一页
上一页
停止放映
2002年 10月 31日星期四
分析要建立哪些数据表
? 为使 DB的信息满足规范化要求,信息应按
不同主题分开,单独建表。这样应建立
,教师、学生、课程和成绩,四个表。
? 建立下列数据表:
? 学生简况表
? 教师授课表
? 课程名称表
? 学生成绩表
第 28页
下一页
上一页
停止放映
2002年 10月 31日星期四
⑶ 确定表中的字段
? 表确定后,就要确定表应该包含哪些字
段。在确定所需字段时,要注意 每个字
段包含的内容应该与表的主题相关,而
且应包含相关主题所需的全部信息 。
? 还要注意 不要包含需要推导或计算的数
据,一定要以最小逻辑部分作为字段来
保存信息。
第 29页
下一页
上一页
停止放映
2002年 10月 31日星期四
教师授课表
? 分析:
? 基本特征信息应包括:
姓名、性别、职称、学历、专业特长
? 其它特征信息:
工作时间、政治面貌、联系电话、课程编号、所属院系
? 综合分析:
? 为满足管理目标基本要求,选取下列字段:
教师序号、姓名、性别、职称、课程编号、电话
第 30页
下一页
上一页
停止放映
2002年 10月 31日星期四
学生简况表
? 分析:
? 基本特征信息应包括:
学号、姓名、性别、班级、出生日期
? 其它特征信息:
籍贯、政治面貌、宿舍、所属专业、特长
? 综合分析:
? 为满足管理目标基本要求,选取下列字段:
学号、姓名、性别、班级、出生日期、简历
第 31页
下一页
上一页
停止放映
2002年 10月 31日星期四
课程名称表
? 分析:
? 基本特征信息应包括:
课程编号、教师序号、课程名称
? 其它特征信息:
学分、课时、课程先决条件、课时
? 综合分析:
? 为满足管理目标基本要求,选取下列字段:
课程编号、课程名称、课时
第 32页
下一页
上一页
停止放映
2002年 10月 31日星期四
学生成绩表
? 分析:
? 基本特征信息应包括:
学号、课程编号、成绩
? 其它特征信息:
学分、教师序号、课程名称
? 综合分析:
? 为满足管理目标基本要求,选取下列字段:
学号、课程编号、成绩
第 33页
下一页
上一页
停止放映
2002年 10月 31日星期四
⑷ 确定主关键字
? 为保证在不同表中的 信息 发生 联系,每个
表都有一个能够 唯一确定 每条 记录 的字段
或字段组,该字段或字段组被称为主关键
字。
? 如果表中没有可作为主关键字的字段,可
在表中增加一个字段,该字段的值为序列
号,以此来标识不同记录。 (自动编号)
第 34页
下一页
上一页
停止放映
2002年 10月 31日星期四
例案中数据表的主关键字
? 根据上述确定表的字段分析:
? 学生简况表 的主关键字为, SNO”
? 教师授课表 的主关键字为, TID”
“TID”是人为加入的主关键字?
? 课程名称表 的主关键字为, CNO”
? 学生成绩表 的主关键字为, SNO”
和, CNO”
第 35页
下一页
上一页
停止放映
2002年 10月 31日星期四
⑸ 确定表之间的关系
? 在确定了 DB的表、表中的字段以及主关键字
之后,还需要确定表之间的关系。
? 在 DB中,可以存在一个以上的表,且表与表
之间存在着一定的关系。只有分析并建立起表
之间的关系,才能将表中的相关信息联系在一
起。
? 注:用工具栏中, 关系, 和, 显示表, 按钮实
现关系的确定。
实际上是:建立联结关系
第 36页
下一页
上一页
停止放映
2002年 10月 31日星期四
⑹ 优化设计
? 在设计完所需要的表、字段和关系之
后,用户还应该检查一下所做的设计,
找出设计中的不足加以改进。
? 实际上,现在改变 DB设计中的不足比
表中填满了数据以后再修改要容易得
多。
第 37页
下一页
上一页
停止放映
2002年 10月 31日星期四
优化设计案例分析
● 从以上设计中不难看出,教师库存在数据冗余。如果某教师讲授课
程多于一门,他的相关信息就要重复多次 (存在部分依赖),这
是在表设计中要尽量避免的。
●做如下分解:
? 将课程信息分离出来,形成“教师课程表”,为了形成联系,
在该表中增加“课程编号”字段。







































称 + 课程






教师授课表 教师简况表 教师授课表
第 38页
下一页
上一页
停止放映
2002年 10月 31日星期四
优化后的数据表间的联系
学生情况表
教师简况表
课程名称表
学生成绩表
CNO
返回
SNO CNO
教师授课表
TID
第 39页
下一页
上一页
停止放映
2002年 10月 31日星期四
优化后的数据表
? 最后得到的数据表共 5个:
? 教师简况表
教师序号、姓名、性别、职称、电话
? 学生简况表
学号、姓名、性别、班级、出生日期、简历
? 课程名称表
课程编号、课程名称、课时
? 学生成绩表
学号、课程编号、分数
? 教师授课表
课程编号、教师序号
第 40页
下一页
上一页
停止放映
2002年 10月 31日星期四
数据表结构设计 (创建前的表设计 1)
? 数据表共 5个:
? –教师简况表
? 中文名称 字段名 类型 长度 规则 定义 备注
? 教师序号 TNO C 7 关键字 ( 主键 )
? 姓名, TNAME C 8
? 性别, TSEX C 2
? 职称, TTITLE C 8 建立查询字段
? 电话 TTEL C 7
? –学生简况表
? 学号, SNO C 8 关键字 ( 主键 )
? 姓名, SNAME C 8
? 性别, SSEX C 2 建立查询字段
? 班级, SCLASS C 10
? 出生日期, SBIRTHDAYD 1
? 简历 SRESUME M
第 41页
下一页
上一页
停止放映
2002年 10月 31日星期四
数据表结构设计 (创建前的表设计 2)
? –课程名称表
? 中文名称 字段名 类型 长度 规则 定义 备注
? 课程编号, CNO C 8 关键字 ( 主键 )
? 课程名称, CNAME C 20
? 课时 CTIMES N 3
? –学生成绩表
? 学号, SNO C 8
? 课程编号, CNO C 8 建立查询字段
? 分数 SCORE N 3
? –教师授课表
?
? 课程编号, CNO C 8 建立查询字段
? 教师序号 TNO C 7
第 42页
下一页
上一页
停止放映
2002年 10月 31日星期四
二、关系数据库标准语言 SQL
? 1。 SQL概述
? ( 1)发展
? SQL语言,1974年有 Boyce 和 Chamberlin
提出
? 1975-1979年 IBM在 System R关系数据库系
统原型中实现
? 1986年 10月 ANSI标准 SQL-86
? 1989年 ISO标准 SQL-89
? 1992年 ISO SQL-92标准
第 43页
下一页
上一页
停止放映
2002年 10月 31日星期四
Structured Query language(SQL)
? Data Defination Language(DDL)
? Data Manipulation Language(DML)
? Data Control Language(DCL)
第 44页
下一页
上一页
停止放映
2002年 10月 31日星期四
( 2) SQL特点
? 综合统一,集数据定义语言( DDL)、
数据操纵语言( DML)和数据控制语言
DCL于一体,综合管理功能于一身。
? 高度非过程化,用户只需提出, 做什
么,,而不需指明, 怎么做, 。
? 面向集合的操作方式,用户查询、修改、
的数据不是一条记录,而是记录的集合。
第 45页
下一页
上一页
停止放映
2002年 10月 31日星期四
SQL特点( 2)
? 以同一语法结构提供两种使用方式,用户可以
从键盘使用 SQL命令,也可以将 SQL语句嵌入
其他高级语言中。 (PHP VC示例 )
? 语言简洁、易于使用,语句很少,
数据定义,CTEATE DROP ALTER
数据操纵,INSERT UPDATE DELETE
数据查询,SELECT
数据控制,GRANT REVOTE
可以对基本表和视图进行查询
第 46页
下一页
上一页
停止放映
2002年 10月 31日星期四
ASP读取 Access数据库 -连接
? <%
? set adocon=server.CreateObject("ADODB.Connection")
? adocon.open "provider=Microsoft.JET.OLEDB.4.0; Data Source
=h:\dvweb\test\test1.mdb ;Mode=ReadWrite|Share Deny
None;Persist Security Info=False"
? my_sql2="Select * from dvproduction order by pname"
? set rs=adocon.execute(my_sql2)
? %>
第 47页
下一页
上一页
停止放映
2002年 10月 31日星期四
ASP读取 Access数据库 -显示
? <form action="test_insert.asp method="POST">
? <!--webbot bot="SaveResults" U-File="fpweb:///_private/form_results.txt"
? S-Format="TEXT/CSV" S-Label-Fields="TRUE" -->
? 编 &nbsp;&nbsp;&nbsp; 号,作品名称班 &nbsp;&nbsp;&nbsp; 级,学
&nbsp;&nbsp;&nbsp; 号姓 &nbsp;&nbsp;&nbsp; 名连接地址
? <p><input type="text" name="T1" size="20" value="<%=rs("pno")%>">
? <%do while not rs.eof%>
? <input type="text" name="T2" size="20" value="<%=rs("pname")%>">
? <input type="text" name="T3" size="20" value="<%=rs("class")%>">
? <input type="text" name="T4" size="20" value="<%=rs("sno")%>">
? <input type="text" name="T5" size="20" value="<%=rs("sname")%>">
? <input type="text" name="T6" size="20" value="<%=rs("plink")%>">
? <input type="hide" name="T7" size="20" value="<%=rs("plink")%>">
? </p>
? <%rs.movenext%>
? <%loop%>
第 48页
下一页
上一页
停止放映
2002年 10月 31日星期四
ASP读取 Access数据库 -关闭
? <p><input type="submit" value="提交 " name="B1"><input
type="reset" value="全部重写 " name="B2"></p>
? </form>
? </table>
? <%
? rs.close
? adocon.Close
? %>
第 49页
下一页
上一页
停止放映
2002年 10月 31日星期四
ASP读取 Access数据库 -建立表
? <%
? set adocon=server.CreateObject("ADODB.Connection")
? adocon.open "provider=Microsoft.JET.OLEDB.4.0; Data
Source=h:\dvweb\test\test1.mdb ;Mode=ReadWrite|Share Deny None;Persist
Security Info=False"
? Set rs=Server.CreateObject("ADODB.RecordSet")
? adocon.execute("create table dvp2(pno char(10))")
? my_sql1="INSERT INTO dvproduction(pno,pname) VALUES('007','qqq')"
? set rs=adocon.execute(my_sql1)
? my_sql2="Select * from dvproduction"
? set rs=adocon.execute(my_sql2)
? %>
第 50页
下一页
上一页
停止放映
2002年 10月 31日星期四
VB读取 Aeecss数据库示例
? Dim strdbname As String
? Dim strrsname As String
? Dim intrecs As Integer
? Dim strfilter As String
? my_str = "这是 VB读取数据库的示例 "
? strdbname = "d:\test1.mdb"
? strrsname = "select * from t1 where class='计算机 01' order by
score asc"
? Set db = DBEngine.OpenDatabase(strdbname)
? db.Execute ("insert into t1 values('计算机 01','04003006','管理学
',40)")
第 51页
下一页
上一页
停止放映
2002年 10月 31日星期四
VB读取 Aeecss数据库示例 (2)
? Set rs = db.OpenRecordset(strrsname,dbOpenDynaset)
? strrsname = "select * from t1 where score>=60 order by
score desc"
? Set rs2 = db.OpenRecordset(strrsname,dbOpenDynaset)
第 52页
下一页
上一页
停止放映
2002年 10月 31日星期四
2.数据定义
? SQL的数据定义语句
? 操作对象 创建 删除 修改
? 表 CREATE TABLE DROP TABLE ALTER TABLE
? 视图 CREATE VIEW DROP VIEW
? 索引 CREATE INDEX DROP INDEX
第 53页
下一页
上一页
停止放映
2002年 10月 31日星期四
(1)建立与修改基本表
语法:
CREATE TABLE tbl_name
[(create_definition,...)] [table_options]
[select_statement]
第 54页
下一页
上一页
停止放映
2002年 10月 31日星期四
SQL举例使用的数据库设计
? 学生成绩表, scores
? 班级 class char(8)
? 学号 sno char(8) 主键
? 姓名 sname char(10) 主键
? 课程号 cno char(4) 外码
? 分数 score int
? 课程管理表, courses
? 课程编号 cno char(4) 主键
? 课程名称 cname char(10)
? 学时数 chours int
? 学分 credit int
第 55页
下一页
上一页
停止放映
2002年 10月 31日星期四
创建表举例
? 建立表 scores 主键 (sno,cno)
? CREATE TABLE scores(class char(8),sno
char(8),sname char(10),cno char(4),score
int,sdate date,CONSTRAINT scno
PRIMARY KEY(sno,cno))
? 建立表 courses 主键 (cno)
? CREATE TABLE courses (cno char(4)
primary key,cname char(10),chours
int,credit int )
第 56页
下一页
上一页
停止放映
2002年 10月 31日星期四
(2)修改基本表
? ALTER TABLE table_name
ADD newcol type constraint
MODIFY|ALTER col_name type
DROP constraint
DROP COLUMN col_name
第 57页
下一页
上一页
停止放映
2002年 10月 31日星期四
修改基本表举例( 1)
? 增加两个字段 sex,meno1
? ALTER TABLE scores add column sex
char(2),memo1 char(20)
? 修改字段长度,
? ALTER TABLE scores alter column sname
char(8)
? 修改字段类型
? ALTER TABLE scores alter column sname int
第 58页
下一页
上一页
停止放映
2002年 10月 31日星期四
修改基本表举例( 2)
? ALTER TABLE scores alter column sname
char(8) NULL
? ALTER TABLE scores alter column score int
NULL
? ALTER TABLE scores alter column sdate date
NULL
? ALTER TABLE scores alter column sex char(2)
NULL
? ALTER TABLE scores alter column memo1
char(30) NULL
第 59页
下一页
上一页
停止放映
2002年 10月 31日星期四
修改基本表举例( 3)
? 改回原状
? ALTER TABLE scores ALTER COLUMN sname
char(10)
? 删除字段
? ALTER TABLE scores DROP COLUMN
sex,memo1
? 增加外码 (建立两个表之间的联系 \联结 )
? ALTER TABLE scores add CONSTRAINT
foreign_cno FOREIGN KEY(cno)
REFERENCES courses(cno)
第 60页
下一页
上一页
停止放映
2002年 10月 31日星期四
(3)建立索引
? CREATE [UNIQUE][CLUSTER] INDEX
Index_name ON table_name(col1
[ASC|DESC],… )
? 建立索引 举例
? CREATE INDEX c_name on
courses(cname ASC)
第 61页
下一页
上一页
停止放映
2002年 10月 31日星期四
删除基本表与索引
? DROP TABLE table_name
? DROP INDEX index_name
? 举例
? 删除表
? DROP TABLE courses
? 删除索引
? DROP INDEX c_name ON courses
第 62页
下一页
上一页
停止放映
2002年 10月 31日星期四
3.数据操纵
? 可以使用 INSERT语句在表建好的表中存储数据,
其基本格式是:
INSERT [INTO] table_name
[(column_list)]VALUES (value1,
value2,…,.)
? 上述格式表示,一次可以插入多个数据字段。
第 63页
下一页
上一页
停止放映
2002年 10月 31日星期四
(1)数据录入
? 如果要用一个现成表的数据建立一个新
表,则可以用下列格式完成:
? INSERT [INTO] tbl_name [(col_name,...)]
SELECT,..
? INSERT语句里的 SELECT子句不能包含
ORDER BY子句。如果 tbl_name后面没有跟
col_name,所有的字段值必须在 VALUES()
表中或由 SELECT提供。任何没有明确给出
值的字段都将被置为其默认值
第 64页
下一页
上一页
停止放映
2002年 10月 31日星期四
插入数据举例( 1)
? 向表中插入数据
? INSERT INTO courses VALUES("1011","软件基础
",48,3)
? INSERT INTO courses(cno,cname,chours,credit)
VALUES("1012","计算机网络 ",32,2)
? INSERT INTO courses(cname,cno,chours,credit)
VALUES("数据库原理 ","1013",64,4)
? INSERT INTO courses(cname,cno,chours,credit)
VALUES("数据库原理 ","1014",64,4)
第 65页
下一页
上一页
停止放映
2002年 10月 31日星期四
插入数据举例( 2)
? INSERT INTO scores(class,sno,sname,cno,score,sdate)
VALUES("管工 01","00094001","张家口 ","1012",90,2002-12-12)
? INSERT INTO scores(class,sno,sname,cno,score,sdate)
VALUES("管工 01","00094002","张网页 ","1012",92,2002-12-12)
? INSERT INTO scores(class,sno,sname,cno,score,sdate)
VALUES("管工 02","00094012","李逵 ","1012",50,2002-12-12)
第 66页
下一页
上一页
停止放映
2002年 10月 31日星期四
(2)数据更新
? 更新数据库中现存的数据,需要用到 UPDATE
语句,其的格式如下:
UPDATE tbl_name SET
col_name1=expr1,col_name2=expr2,...
[WHERE condition]
SET子句指出需要修改的字段并给出正确的值;
WHERE子句是可选的,用来选择需要更新的记录。
如果没有 WHERE子句,则表示表中所有的记录将被
全部更新。
第 67页
下一页
上一页
停止放映
2002年 10月 31日星期四
数据更新举例
? 更新数据
? UPDATE courses SET cname="数据结构
" WHERE cno="1014" and chours=64
? UPDATE courses SET
chours=48,credit=3 WHERE cname="计
算机网络 "
第 68页
下一页
上一页
停止放映
2002年 10月 31日星期四
(3)删除记录
? DELETE语句
? 删除数据库中整个记录或者多个记录 。
? 不能仅仅删除记录中的某一列 。
? 不影响表的结构和属性 。
? 语法如下:
DELETE FROM table_name [WHERE
condition]
第 69页
下一页
上一页
停止放映
2002年 10月 31日星期四
? 删除标题表中所有的行:
Delete From scores
? 删除数据满足条件的行
? DELETE FROM courses WHERE credit=3 and
cname=“软件基础,
? DELETE FROM sample WHERE
id>1000;
? DELETE FROM sample WHERE
id>1000 AND value<100;
删除记录举例( 1)
第 70页
下一页
上一页
停止放映
2002年 10月 31日星期四
4.数据查询
? SELECT用来从表中检索数据记录 。
? 语法
SELECT [ALL/DISTINCT] fields-list
FROM table_names_list
[WHERE condition AND | OR condition… ]
[GROUP BY column,[,column…]]
[HAVING conditions]
[ORDER BY column [ASC | DESC],column [ASC |
DESC]]
第 71页
下一页
上一页
停止放映
2002年 10月 31日星期四
查询说明
参数 描述
ALL 表示表中所有行都将被返回, 包括重复的行 (它
是缺省的, 不用显式写出 )
DISTINC
T
只有不重复的行被返回 。 这个子句在每个
SELECT子句中只可使用一次
FROM 给出 SELECT 语句中指定的域是从哪个表中获
取的
WHERE 给出从表中选取记录的条件
GROUP
BY
查询返回的行将按照某一个列或某几个列的值
分组
HAVING 给出结果集中每个组必须满足的条件 。 该子句
只和 GROUPBY子句联合使用
ORDER
BY
将查询结果根据某个域或某几个域的值按照升
序 ( ASC) 或者降序 ( DESC) 排列
第 72页
下一页
上一页
停止放映
2002年 10月 31日星期四
查询举例( 1)
? 查询
? SELECT * FROM courses
? SELECT * FROM courses where credit>=3
? SELECT
class,sno,sname,cname,score,chours,credit
FROM scores,courses
? (注意,这是笛卡尔乘积 )
第 73页
下一页
上一页
停止放映
2002年 10月 31日星期四
查询举例 (自然联结 )( 2)
? SELECT
class,sno,sname,cname,score,chours,credit
FROM scores,courses where
courses.cno=scores.cno (自然联结 )
? 使用 JOIN
? SELECT courses.cno,courses.cname,
scores.sno,scores.sname,scores.score
FROM courses INNER JOIN scores ON
courses.cno = scores.cno
第 74页
下一页
上一页
停止放映
2002年 10月 31日星期四
查询举例( 3)
? SELECT Count(scores.sno) AS sno之
Count,avg(score) AS 表达式 1 FROM
scores;
第 75页
下一页
上一页
停止放映
2002年 10月 31日星期四
查询举例( 4)
? SELECT scores.class,Count(scores.sno)
AS sno之 Count,Count(scores.sname)
AS sname之 Count,Avg(scores.score)
AS score之 Avg FROM scores GROUP
BY scores.class ORDER BY scores.class,
Count(scores.sno) DESC;
第 76页
下一页
上一页
停止放映
2002年 10月 31日星期四
查询举例( 5)
? 查找姓张的人的信息
? SELECT
class,sno,sname,cname,score,chours,cr
edit FROM scores,courses where
courses.cno=scores.cno and sname like
“张 *”
? SELECT * FROM scores WHERE score
BETWEEN 60 and 100
第 77页
下一页
上一页
停止放映
2002年 10月 31日星期四
除使用 LIKE外,还可以使用 IN
BETWEEN 等关键字
? In关键字
? 用来判断一个表达式的值是否等于一组值中
的任何一个。
? 这组值必须用逗号分隔。
Select Author_ID,Author_Name From Author
Where Author_Name IN (“Sam Adams”,
“Maria Phillips”) Order By Author_Name
第 78页
下一页
上一页
停止放映
2002年 10月 31日星期四
可以在 WHERE子句中使用的关键字
关键字 含义
IN 判断值是否在所给的范围内
NOT IN 判断值是否不在所给的范围内
LIKE 判断值是否与一个给定的值相似
NOT LIKE 判断值是否与一个给定的值不相似
IS NULL 判断值是否为空
IS NOT NULL 判断值是否不为空
AND 判断是否满足 AND两边所给的条件
OR 判断是否满足 OR 两边所给的条件中的一个
BETWEEN 判断值是否在所给的值之间
NOT BETWEEN 判断值是否不在所给的值之间
第 79页
下一页
上一页
停止放映
2002年 10月 31日星期四
带限制条件的检索
? LIKE关键字
? 检索以某个特殊的字符开始或是满足某个特
定的通配符模式的值。
通配符 匹配内容
_/? 匹配单个字符
[] 任何在给定范围内的单个字符
[^] 任何不在给定范围内的单个字符
% 任何值 (ACCESS中用, *” )
第 80页
下一页
上一页
停止放映
2002年 10月 31日星期四
带限制条件的检索(续)
? 使用下列语句来检索出第一个名字是三个字母
并且以字母 ‘ S’开头的作者的记录 。
Select * From Author
Where Author_Name LIKE,S--“
Author_ID Author_Name Phone_No
A002 SamAdams (61)345-1247
第 81页
下一页
上一页
停止放映
2002年 10月 31日星期四
带限制条件的检索(续)
? 使用下列语句从标题表中检索出标题以
字母 ‘ V’开头的书的详细信息,
Select * From Title Where Title LIKE
“V%“
Title Year Pub_ID Book_No
Visual Basic 6.0 –
Superbible
1984 326 0-0014307-6-
S
第 82页
下一页
上一页
停止放映
2002年 10月 31日星期四
带限制条件的检索(续)
? 使用下列语句从标题表中检索出标题不
以字母 ‘ V’开头的书的信息:
Select * From Title Where Title LIKE
“[^V]%“
Title Year Pub_ID Book_No
Learn Oracle 8.0 in 25
Days
1988 908 0-0014313-7-8
World’s Greatest
Chefs’SecretRecipe
1990 12 0-0111985-2-6
7 Keys to Learning
VisualFoxPro
1989 41 0-0111298-1-6
ABeginner’s Guide to
Basic
1992 456 0-1112334-2-3
第 83页
下一页
上一页
停止放映
2002年 10月 31日星期四
带限制条件的检索(续)
? 如下在 WHERE 子 句 中 使用 关 键 字 IS
NULL检索表中空值:
Select Author_ID,Author_Name From
Author Where Phone_No IS NULL
Author_ID Author_Name
A004 Maria Phillips
第 84页
下一页
上一页
停止放映
2002年 10月 31日星期四
带限制条件的检索(续)
? 关键字 BETWEEN
? 罗列出值在给定范围内的行。
? 列出在 1980和 1990年 ( 注意包括这两个年份 )
之间出版的图书:
Select *From Title Where Year BETWEEN 1980 AND 1990
Title Year Pub_ID Book_No
Visual Basic6.0 – Superbible 1984 326 0-0014307-6-S
LearnOracle 8.0 in25 Days 1988 908 0-0014313-7-8
World’s Greatest Chefs’ Secret
Recipe
1990 12 0-0111985-2-6
7 Keys to Learning Visual
FoxPro
1989 41 0-0111298-1-6
第 85页
下一页
上一页
停止放映
2002年 10月 31日星期四
带限制条件的检索(续)
? 关键字 NOT IN,NOT LIKE,NOT
BETWEEN和 IS NOT NULL的用法相应地
与关键字 IN,LIKE,BETWEEN和 IS
NULL相反。
第 86页
下一页
上一页
停止放映
2002年 10月 31日星期四
作业
P194
1,思考题,1,2,3,4,5、
2,作业, 15
p221
1,思考题,7.1,7.3,7.4
2、作业题,7.5
P247
? 写出 7-(2),(4),(6),(8)的 SQL查询语句
? 实验、课件、大作业相关要求,
? http://202.117.35.70/~studyhard/