1、本章导读本章导读数据库的基本概念数据库的基本概念 1结构化查询语言结构化查询语言SQL语句语句 2MicroftAccess2000数据库创数据库创 建建 3本章导读:本章导读:数据库技术是数据库技术是ASP实现动态网页功能的物质基础。利用实现动态网页功能的物质基础。利用ASP开发小型项目开发小型项目时,时,Access往往是首选的数据库管理系统。往往是首选的数据库管理系统。SQL(Structure Query Language,结构化查询语言)是关系型数据库的通用查询语言,用于对结构化查询语言)是关系型数据库的通用查询语言,用于对数据库中的数据进行组织、管理和检索的工具。数据库中的数据进行
2、组织、管理和检索的工具。本章要点:本章要点:8.1 数据库概述数据库概述 v8.1.1 数据库的基本概念数据库的基本概念 v数据:是指存储在某一种媒体上能够被识别的物理符号。它包括两方面的内容:一是描述事务特性的数据内容,二是存储在某一种媒体上的数据形式。描述事务特性必须借助一定的符号,这些符号就是数据形式。数据形式多种多样,例如,某人的出生日期可以是2008-1-18,也可以是#2008-1-18#,或者是”2008年1月18日”等。8.1.1 数据库的基本概念数据库的基本概念v数据库管理系统:是用于管理数据库的计算机数据库管理系统:是用于管理数据库的计算机软件,是用户与数据库之间的接口。数
3、据库管软件,是用户与数据库之间的接口。数据库管理系统使用户能方便地定义和操作数据,维护理系统使用户能方便地定义和操作数据,维护数据的安全性和完整性,以及进行多用户的并数据的安全性和完整性,以及进行多用户的并发控制和数据库恢复。发控制和数据库恢复。v根据数据之间的关系,数据库管理系统可以分根据数据之间的关系,数据库管理系统可以分为:层次型、网状型和关系型。现在使用较多为:层次型、网状型和关系型。现在使用较多的是关系型数据库管理系统。与的是关系型数据库管理系统。与ASP搭配的数据搭配的数据库主要是库主要是SQL Server和和Access。8.1.1 数据库的基本概念数据库的基本概念v 关系型数
4、据库采用二维表的方式来描述数据与数据之间的关系,表关系型数据库采用二维表的方式来描述数据与数据之间的关系,表格的每一列都是一个属性,俗称字段;字段有字段名和字段值,字格的每一列都是一个属性,俗称字段;字段有字段名和字段值,字段名在一个表中不能重复。表格的每一行都表示一个实体或者两个段名在一个表中不能重复。表格的每一行都表示一个实体或者两个实体之间的联系,俗称记录;行列交叉位置称为值,值有数据类型、实体之间的联系,俗称记录;行列交叉位置称为值,值有数据类型、字节大小等相关属性。字节大小等相关属性。v 数据库系统:是指引进数据库技术的计算机系统,包括计算机硬件数据库系统:是指引进数据库技术的计算机
5、系统,包括计算机硬件系统、数据库管理系统、操作系统以及在它支持下建立起来的数据系统、数据库管理系统、操作系统以及在它支持下建立起来的数据库,应用程序、用户和维护人员的组成的一个整体。库,应用程序、用户和维护人员的组成的一个整体。v 数据库管理系统是数据库系统的核心软件。数据库管理系统是数据库系统的核心软件。8.2 数据库数据库SQL Server 2000简介简介简介v数据库数据库SQL Server 2000是创建面向大型联机事是创建面向大型联机事务处理,数据仓库和电子商务的一个新型平台。务处理,数据仓库和电子商务的一个新型平台。SQL Server 2000支持完全集成的支持完全集成的XM
6、L环境、分环境、分析服务中的新的数据开采特性,以及元数据服析服务中的新的数据开采特性,以及元数据服务器中增强的知识库技术。务器中增强的知识库技术。vSQL Server 2000的数据库能够被分散在一的数据库能够被分散在一组独立的数据库服务器上,以支持大规模组独立的数据库服务器上,以支持大规模web站点的访问需求和企业级的数据处理系统。站点的访问需求和企业级的数据处理系统。8.3 数据库Access简介v数据库数据库Access是一个桌面关系型数据库管理系统是一个桌面关系型数据库管理系统和应用程序生成器。和应用程序生成器。Access具有很强的数据处理具有很强的数据处理功能,人们可以利用它来解
7、决大量数据的管理功能,人们可以利用它来解决大量数据的管理功能。功能。vAccess数据库是由二维表组成。它使用标准的数据库是由二维表组成。它使用标准的SQL作为它的数据库访问语言。作为网站后台作为它的数据库访问语言。作为网站后台数据库的选择之一,数据库的选择之一,Access具有简单易用,快捷具有简单易用,快捷方便的特点。本书主要以方便的特点。本书主要以Access作为数据库平台。作为数据库平台。8.3.1 建立数据库建立数据库8.3.2 建立查询建立查询 8.3.1 建立数据库建立数据库可以通过可以通过AccessAccess管理界面方管理界面方便地创建便地创建AccessAccess数据库
8、和数据库和数据库表,主要步骤如下:数据库表,主要步骤如下:启动启动AccessAccess程序,首次出程序,首次出现新建和打开数据库窗口,现新建和打开数据库窗口,如图如图8-18-1所示的【新建数所示的【新建数据库】对话框;据库】对话框;8.3.1 建立数据库建立数据库在当前对话框中选择“空Access数据库”单选按钮,并单击【确定】按钮,弹出如图8-2所示的【文件新建数据库】对话框,在当前窗口选择一个存储位置,并为数据库文件命名jxgl,最后单击【创建】按钮,弹出数据库设计器,如图8-3所示的【jxgl:数据库】对话框;8.3.1 建立数据库建立数据库 在当前对话框中双击在当前对话框中双击“
9、设计器创建表设计器创建表”,弹出,弹出表设计器如图表设计器如图8-48-4所示的所示的【表【表1 1:表】对话框,设:表】对话框,设置相关字段名和数据类型置相关字段名和数据类型等,单击菜单【文件等,单击菜单【文件保保存】命令,弹出如图存】命令,弹出如图8-58-5所示的【另存为】对话框,所示的【另存为】对话框,输入表名称输入表名称“xsxxxsxx”,再再单击【确定】按钮;返回单击【确定】按钮;返回表设计器;即如图表设计器;即如图8-4 8-4 所所示的【表示的【表1 1:表】对话框。:表】对话框。8.3.1 建立数据库建立数据库单击当前窗口中的右上角单击当前窗口中的右上角的关闭按钮,回到主界
10、面的关闭按钮,回到主界面如图如图8-68-6所示的【所示的【jxgl:jxgl:数数据库】对话框;在当前据库】对话框;在当前对话框中双击对话框中双击xsxxxsxx,打开打开记录输入如图记录输入如图8-78-7所示的所示的【xsxxxsxx表】输入记录对话表】输入记录对话框,输入数据。框,输入数据。8.3.1 建立数据库建立数据库8.3.1 建立数据库建立数据库根据上述步骤依次建立课程根据上述步骤依次建立课程表表kckc和选课表和选课表xxxx,如图如图8-8-8 8和图和图8-98-9所示。所示。8.3.2 建立查询集合v 首先,回到数据库的主窗口,首先,回到数据库的主窗口,在左边对象列表中
11、选择在左边对象列表中选择“查查询询”,如图,如图8-108-10所示的【所示的【jxgl:jxgl:数据库】对话框,在右边双数据库】对话框,在右边双击击“在设计视图中创建查询在设计视图中创建查询”,弹出查询设计器窗口,如图弹出查询设计器窗口,如图8-8-1111所示;所示;8.3.2 建立查询集合v 其次选择对象表,如选择表其次选择对象表,如选择表xsxxxsxx,单击【添加】单击【添加】按钮,将表按钮,将表xsxxxsxx加入查询设计器窗口,然后单加入查询设计器窗口,然后单击【关闭】按钮,如图击【关闭】按钮,如图8-128-12所示,在本窗口中,所示,在本窗口中,可以进行可视化查询设计,从中
12、选择查询的字可以进行可视化查询设计,从中选择查询的字段,如字段段,如字段“籍贯籍贯”字段,双击即可。字段,双击即可。8.3.2 建立查询集合v 最后单击【查询】最后单击【查询】【运【运行】,则查询结果以表格行】,则查询结果以表格形式出现,如图形式出现,如图8-138-13所示。所示。v 以上操作也可以通过以上操作也可以通过SQLSQL语句完成。在查询设计器语句完成。在查询设计器窗口中单击【关闭】按钮,窗口中单击【关闭】按钮,然 后 单 击 右 键,选 择然 后 单 击 右 键,选 择“SQLSQL视图视图”,弹出如图,弹出如图8-148-14所示的【查询所示的【查询2 2:选:选择查询】对话框
13、,输入查择查询】对话框,输入查询语句询语句select select 籍贯籍贯 from from xsxxxsxx也可。也可。8.4 8.4 SQLSQL语言简介语言简介 v SQLSQL(Structure Query LanguageStructure Query Language,结构化查询语言)结构化查询语言)是一种被关系型数据库产品广泛使用的标准结构化查询是一种被关系型数据库产品广泛使用的标准结构化查询语言。主要用于对数据库中的数据进行组织、管理和检语言。主要用于对数据库中的数据进行组织、管理和检索。各种关系型数据库都支持索。各种关系型数据库都支持SQLSQL指令。指令。SQLSQ
14、L语句是一种语句是一种类似于英语的语句,很容易理解,大多数语句都直述其类似于英语的语句,很容易理解,大多数语句都直述其意,读起来像自然语言一样明了。意,读起来像自然语言一样明了。v SQLSQL语言是非过程化的语言(第四代语言),不像语言是非过程化的语言(第四代语言),不像C C、CobolCobol、FortranFortran等那样是完整的计算机语言,确切地说,等那样是完整的计算机语言,确切地说,SQLSQL是一种数据库子语言,是一种数据库子语言,SQLSQL可以被嵌入到另一种语言可以被嵌入到另一种语言中,从而使其具有数据库功能。学好中,从而使其具有数据库功能。学好SQLSQL语言对语言对
15、ASPASP编程编程是非常重要的。是非常重要的。8.4 8.4 SQLSQL语言简介语言简介结合v SQLSQL语句分为语句分为4 4类:类:v DDLDDL数据定义语言:用于定义、修改或者删除数据库对象,如数据定义语言:用于定义、修改或者删除数据库对象,如createcreate、dropdrop、alteralter;v DQLDQL数据查询语言:用于对数据进行查询数据查询语言:用于对数据进行查询,如如selectselect;v DMLDML数据操纵语言:用于访问、建立或者操纵在数据库中已经数据操纵语言:用于访问、建立或者操纵在数据库中已经存在数据存在数据,如如insertinsert、
16、updateupdate、deletedelete;v DCLDCL数据控制语言:管理对数据库对象的访问权限和回收,如数据控制语言:管理对数据库对象的访问权限和回收,如表表grantgrant、revokerevoke。v 8.4.1 基本基本SQL语句语句 v 8.4.2 Select语句语句 v 8.4.3 insert语句语句 v 8.4.4 delete语句语句 v 8.4.5 update语句语句 8.4.1 基本基本SQL语句语句 v 基本基本SQLSQL语句包括语句包括DQLDQL和和DMLDML。也就是最常用的四大基本操作:也就是最常用的四大基本操作:查询(查询(selects
17、elect)、)、插入(插入(insertinsert)、)、删除(删除(deletedelete)、)、更新更新(updateupdate)。)。8.4.2 Select语句语句v select语句是语句是SQL中功能最强大也是最复杂的语句,它负中功能最强大也是最复杂的语句,它负责从数据库中检索数据。它的基本形式由责从数据库中检索数据。它的基本形式由SelectFrom-Where查询块组成,多个查询块可以被嵌套执行,查询块组成,多个查询块可以被嵌套执行,select-SQL的语法基本结构如下:的语法基本结构如下:select all|distinct|toppercent*|字段名列表字段
18、名列表from left|right|inner|full join on where group by havingorder by asc|desc 8.4.2 Select语句语句v 功能:完成各种查询任务。功能:完成各种查询任务。v 说明:说明:v select:查询的命令;查询的命令;v all|distinct|toppercent:all表示输出所有满足表示输出所有满足条件的记录;条件的记录;distinct表示去掉重复的记录,只输出第一表示去掉重复的记录,只输出第一次出现的记录,即重复的记录不重复输出;次出现的记录,即重复的记录不重复输出;toppercent表示在满足条件的记
19、录中选择前若干条记录输表示在满足条件的记录中选择前若干条记录输出,其中出,其中percent表示所占百分比;表示所占百分比;v *|字段名列表:查询输出的字段内容,字段名列表:查询输出的字段内容,“*”表示所表示所有字段;有字段;v :用于统计和计算;:用于统计和计算;v from:查询的数据来源哪些表和查:查询的数据来源哪些表和查询视图询视图8.4.2 Select语句语句集合v left|right|inner|full join on:进行多表查询的联接方式及联接条件;:进行多表查询的联接方式及联接条件;v where:设置查询的条件,过滤不需要:设置查询的条件,过滤不需要的记录行。的记
20、录行。where子句包以下几类条件运算符号:子句包以下几类条件运算符号:v 比较运算符:比较运算符:、=、=、=、;v 范围运算符:范围运算符:not in、not betweenand、is not null;v 逻辑运算符:逻辑运算符:not、and、or;v 模式匹配运算符:模式匹配运算符:not like,模式匹配运算符可以使模式匹配运算符可以使用一些通配符,不同数据库的通配符可能不一样,如用一些通配符,不同数据库的通配符可能不一样,如SQL Server中,使用中,使用“%”匹配任意长度的字符串,使匹配任意长度的字符串,使用用“_”匹配一个未知的字符。在匹配一个未知的字符。在Acce
21、ss中,常用的通配中,常用的通配符及其意义如表符及其意义如表8-1所示:所示:8.4.2 Select语句语句集合通配符说 明 示 例*匹配任意长度的字符串wh*可以找到what,white,why等,ASP语句恢复使用“%”?匹配1个长度的字符串b?ll可以找到ball,bill等,ASP语句恢复使用“_”匹配 指定字符中的一个baell可以找到ball,bell但找不到bill!匹配不在之内的字符b!aell能找到bill和bull,但不找ball和bell-匹配某个范围内一个字符ba-cd可以找到bad,bbd和bcd#匹配任意单个数字字符1#3可以找到103,113,123表表8-1
22、子字段取值及其含义子字段取值及其含义8.4.2 Select语句语句集合vgroup by having:group bygroup by用于对查询结果进行分组,进行用于对查询结果进行分组,进行分类汇总,不可以在子查询中使用该子句;分类汇总,不可以在子查询中使用该子句;havinghaving必须跟在必须跟在group bygroup by后面,用于限定分组后面,用于限定分组的条件;的条件;vorder by asc|desc:对查询结对查询结果输出进行排序,不可以在子查询中使用该子果输出进行排序,不可以在子查询中使用该子句,句,asc|desc表示升降序,缺省时为升序。表示升降序,缺省时为升
23、序。8.4.2.1 简单查询简介简单查询是由selectfrom和where短语构成的基本语句。从xsxx表中检索所有籍贯;select 籍贯 from xsxx从 xsxx检索所有不同籍贯;select distinct 籍贯 from xsxx检索表中所有记录;select*from kc检索入学成绩高于600分的记录;select*from xsxx where 入学成绩600检索哪些籍贯的学生有男生;select distinct 籍贯 from xsxx where 性别=男检索工商管理或信息管理专业学习,并且入学成绩低于600分的学生学号;select 学号 from xsxx w
24、here 入学成绩600 600 and xsxx.and xsxx.学号学号=xx.xx.学号学号;v找出男生所选修的课程代号及其姓名;找出男生所选修的课程代号及其姓名;vselect select 姓名姓名,性别性别,课程代号课程代号 from xsxx,xx from xsxx,xx where where 性别性别=男男 and xsxx.and xsxx.学号学号=xx.xx.学号学号;8.4.2.3 嵌套查询 嵌套查询是基于多个表的查询,与联接查询的区别,查询的结果来自一个表,而查询的条件却涉及多个表。找出选修课的成绩为85分的学生;select 姓名 from xsxx wher
25、e 学号 in(select 学号 from xx where 成绩=85);查询所有选修课的成绩都高于80分的学生的信息;select*from xsxx where 学号 not in(select 学号 from xx where 成绩=80)and 学号 in(select 学号 from xx);注意:查询所有选修课的成绩都高于80分的学生信息,并且这些学生至少选了一门课,所以加上and 学号 in(select 学号 from xx);找出和王同学同年出生的所有学生,输出他们的姓名,性别和出生日期;select 姓名,性别,出生日期 from xsxxwhere year(出生日期
26、)=(select year(出生日期)from xsxx where 姓名=王同学);8.4.2.4 特殊的运算符号 v not in:不在之中v not betweenand:不在之间v not like:不与匹配v is not null:是否空值v 检索入学成绩在550分到590分之间的学生信息;v select*from xsxx where 入学成绩 between 550 and 590;v 找出籍贯不在湖北的全部学生的学号、姓名和籍贯信息;v select 学号,姓名,籍贯v from xsxxv where not 籍贯=湖北;v 找出选修课成绩不在80分到90分之间的全部选
27、修信息;v select*from xx where 成绩 not between 80 and 90;v 找出“学生”表里专业中含有“管”字的学生信息;v select*from xsxx where 专业 like*管*;v 找出尚未确定选课老师的课程情况;v select*from kc where 教师 is null;8.4.2.5 查询结果排序 v格式:格式:order byorder by 1 asc|descasc|descv功能:将结果排序。功能:将结果排序。v按入学成绩的升序检索男生的学号、姓名、按入学成绩的升序检索男生的学号、姓名、性别和入学成绩信息;性别和入学成绩信息;
28、vselect select 学号学号,姓名姓名,性别性别,入学成绩入学成绩from from xsxx where xsxx where 性别性别=男男 order by order by 入学成绩入学成绩;v先按学生的性别排序,再按出生年月排序,先按学生的性别排序,再按出生年月排序,并输出全部学生信息;并输出全部学生信息;vselect select*from xsxx order by from xsxx order by 性别性别,出生日出生日期期;8.4.2.6 聚合函数查询方法v 集合函数在信息管理系统中经常使用,功能是进行一些基本的统计集合函数在信息管理系统中经常使用,功能是进行
29、一些基本的统计和计算,聚合函数有和计算,聚合函数有5 5个,这些函数如表个,这些函数如表8-28-2所示。所示。名 称说 明sum()计算出某个字段的总和avg()计算出某个字段的平均值Count()计算出返回记录的行数max()计算出某个字段的最大值min()计算出某个字段的最小值表8-2 SQL聚合函数8.4.2.6 聚合函数查询方法v 求入学成绩的总分数;v select sum(入学成绩)from xsxx;v 求王同学和潘同学选修课程成绩的总和;v select sum(成绩)from xxv where 学号 in(select 学号 from xsxx where 姓名=王同学
30、or 姓名=潘同学);v 求选修课程代号为01的平均成绩;v select avg(成绩)from xx where 课程代号=01;v 求选修了课程的教师人数;v select count(教师)from kc;v 求出入学成绩最高的学生;v select max(入学成绩)as 最高分 from xsxx;v 求出选修课成绩最小的学生;v select min(成绩)as 最低分 from xx;8.4.2.7 分组查询 v格式:格式:group bygroup by havinghavingv说明:指定输出分组和分组的条件。说明:指定输出分组和分组的条件。v求每门选修课程课的平均成绩;求
31、每门选修课程课的平均成绩;vselect select 课程代号课程代号,avg(avg(成绩成绩)from xx group from xx group by by 课程代号课程代号;v求至少有求至少有3 3个学生选修的课程的平均成绩;个学生选修的课程的平均成绩;vselect 课程代号课程代号,count(*),avg(成绩成绩)from xx group by 课程代号课程代号 having count(*)=3;8.4.2.8 超联接查询 v 格式:selectfrom inner|left|right|full|join on wherev 功能:根据联接条件对和进行内部联接,或左联
32、接,或右联接,完全联接。v 说明:v inner join:内部联接,只有满足条件的记录才出现在查询结果中;v 例:查询学生姓名的同时查询对应的选修成绩。v select xsxx.姓名,xx.成绩 from xsxx inner join xx on xsxx.学号=xx.学号;v left join:左联接,以为依据,显示与之关联的数据记录;v right join:右联接,以为依据,显示与之关联的数据记录;v full join:完全联接,先以为依据,显示与之关联的数据记录,再以为依据,显示与之关联的数据记录,去掉重复出现的记录行。8.4.3 insert语句语句 v ASPASP网页向
33、数据库添加记录的方法主要分为两种:一种网页向数据库添加记录的方法主要分为两种:一种使用使用recordsetrecordset对象的(记录对象)的对象的(记录对象)的addnewaddnew方法;另方法;另一种是直接执行一种是直接执行SQLSQL插入语句插入语句insertinsert命令。命令。insertinsert语句语句可给数据库中的某一个表添加一条或多条新记录。可给数据库中的某一个表添加一条或多条新记录。v 单记录格式:单记录格式:insert into insert into valuesvalues v 多记录格式:多记录格式:insert into insert into se
34、lect select from from v 往选修表里掺入记录往选修表里掺入记录(02301,05,90)(02301,05,90);v insert into xx(insert into xx(学号学号,课程代号课程代号,成绩成绩)values(02501,05,90)values(02501,05,90)v 选修课选修课“离散数学离散数学”老师尚未确定,往老师尚未确定,往“课程课程”表追表追加记录加记录(11,(11,离散数学离散数学,null)null);v insert into kc(课程代号课程代号,课程名称课程名称,教师教师)values(11,离散数学离散数学,null)
35、8.4.4 delete语句语句 v 格式:格式:delete from delete from where where v 功能:可删除表或视图中的一条或多条记录。功能:可删除表或视图中的一条或多条记录。v 说明:如果不指定条件,则删除全记录。说明:如果不指定条件,则删除全记录。v 删除删除“选修选修”课程代号为课程代号为0707的记录;的记录;v delete from kc where delete from kc where 课程代号课程代号=07=078.4.5 update语句语句 v 格式:格式:update update set set=1 where where v 功能:用
36、功能:用 n的值替换的值替换 n的值。的值。v 说明:如果不指定条件,则更新全记录。说明:如果不指定条件,则更新全记录。v 给给“课程课程”表里的课程名称表里的课程名称“aspasp程序设计程序设计”添加一添加一个教师个教师“叶老师叶老师”;v update kc set 教师教师=叶老师叶老师 where 课程名称课程名称=ASP程序设计程序设计8.5 8.5 本章小结本章小结 Response对象提供了对象提供了9个属性,下面详细介绍如下。个属性,下面详细介绍如下。1设置是否缓冲页输出设置是否缓冲页输出 格式:格式:response.buffer=true|false 说明:所谓缓冲就是将
37、服务器脚本处理结果暂时写入服说明:所谓缓冲就是将服务器脚本处理结果暂时写入服务器的缓冲区,直到处理完毕或是调用了务器的缓冲区,直到处理完毕或是调用了flush或或end方法,才将数据输出到客户端。使用时注意以下几点:方法,才将数据输出到客户端。使用时注意以下几点:windows xp中的中的response.buffer默认值是默认值是true;位置位于位置位于命令后命令后的第一行,任何主页或脚本输出后,更改的第一行,任何主页或脚本输出后,更改response.buffer属性值都会出错;属性值都会出错;运行长脚本时,可能给人延迟的感觉。运行长脚本时,可能给人延迟的感觉。8.5 本章小结本章从
38、实用角度介绍数据库的基本概念,主要讲解数据库本章从实用角度介绍数据库的基本概念,主要讲解数据库管理系统管理系统Microsoft Access 2000Microsoft Access 2000的基本操作,并对结的基本操作,并对结构化查询语言构化查询语言SQLSQL进行重点讲解。进行重点讲解。SQLSQL语言是用来处理与数据库记录内容有关的操作(查询、语言是用来处理与数据库记录内容有关的操作(查询、插入、删除、更新)。插入、删除、更新)。ASPASP的的ADOADO对象通过对象通过SQLSQL语句实现语句实现对后台数据的操作。对后台数据的操作。一个真正的、完整的站点是离不开数据库的,因为实际应一个真正的、完整的站点是离不开数据库的,因为实际应用中,需要保存的数据很多,而且这些数据之间往往还用中,需要保存的数据很多,而且这些数据之间往往还有关联,利用数据库来管理这些数据,可以很方便的查有关联,利用数据库来管理这些数据,可以很方便的查询和更新。学好数据库的基本理论和相关知识对于熟练询和更新。学好数据库的基本理论和相关知识对于熟练驾驭驾驭ASPASP数据库编程是必要的,希望读者掌握数据相关数据库编程是必要的,希望读者掌握数据相关知识,尤其是知识,尤其是SQLSQL语句的要领。语句的要领。