chap5 查询和视图
VFP第四章查询、视图

Full Join:指定将所有满足和不满足条件的记 录都包含在查询结果中。
❖[字段名]用来设置联接两的字段或表达式. 注: 此外建立联接的字段不一定是表中的索引,除备 注字段和通用字段外,可在任意字段间建立联接.
❖建立视图或查询步骤: ❖第一步:打开数据库,在数据库
中空白处点右键→选择新建本地 视图→选择建立视图需要的表。 如果是查询的话,第一步为:文 件-新建-查询 ❖第二步:选择需要输出的字段 ❖第三步:筛选字段:对于积分 <=1500这个条件分三个地方输
❖第四步:排序: ❖第五步:分组
❖第六步:结果是否发送到另外一 个表中
drop view 删除视图
打开、关闭视图(同表的命令):
USE 视图名 &打开一个视图 USE IN 视图名 &&关闭一个不 在当前工作区的视图 use &&关闭当前工作区的表或视图
例:根据“歌手”表建立视图myview,视图中含有“歌 手号”左边第一位是“1”的所有记录,正确的SQL 语句是()
A.CREATE VIEW myview AS SELECT * FROM 歌 手 WHERE LEFT(歌手号,1)=‘1’
B.CREATE VIEW myview AS SELECT * FROM 歌 手 WHERE LIKE(“1”,歌手号)
C.CREATE VIEW myview SELECT * FROM 歌手 WHERE LEFT(歌手号,1)=‘1’
7.视图的分类:本地视图,远程视图,带 参数视图.
如果题目只给两个空,就填本地视图,远 程视图,
若给三个空,三个都填 . 8:查询有“查询去向”,视图无查询去向
VFP基础教程-创建查询和视图

5.1 创建查询1. 查询的概念查询:就是向一个数据库发出检索信息的请求,从中提取符合特定条件的记录。
查询文件:即保存实现查询的SELECT-SQL命令的文件。
查询文件保存时,系统自动给出扩展名.qpr;查询被运行后,系统还会生成一个编译后的查询文件,扩展名为 .qpx。
查询结果:通过运行查询文件得到的一个基于表和视图的动态的数据集合。
查询结果可以用不同的形式来保存。
查询中的数据是只读的。
查询的数据源:可以是一张或多张相关的自由表、数据库表、视图。
2. 用查询设计器创建查询基本步骤:打开查询设计器→ 添加创建查询所基于的数据表→定义输出内容→设置联接、筛选、排序、分组条件→ 选择查询结果的输出形式→保存查询文件→运行查询。
(1)打开查询设计器方法1:从文件菜单或工具栏上单击新建→查询→新建文件→进入查询设计器方法2:当所用到的数据表已在项目中时,从项目管理器窗口中单击数据→ 查询→新建→ 新建查询→进入查询设计器方法3:从命令窗口中输入命令:create query 查询文件名& 创建新查询modify query 查询文件名& 修改已存在的查询(2) 定义查询的输出内容单击字段选项卡→从可用字段列表框中单击所需字段(当输出的列不是直接来源于表中的字段时,单击函数和表达式框边的… 按钮,打开表达式生成器,构造出所需的表达式)→单击添加按钮→所需字段自动出现在选定字段框中。
(3) 设置查询的筛选条件筛选条件决定将哪些记录显示出来。
在筛选框中构造筛选条件表达式时,要注意在实例框中输入不同数据类型时的格式:1) 字符串可以不带引号(当与源表中的字段名相同时才用引号);2) 日期型数值要用{ }括起来;3) 逻辑型数据两侧要带 .号,如 .T.,.F.(4) 设置查询结果的排序依据排序决定查询输出结果中记录显示的顺序。
设置方法:单击排序依据→ 从选定字段框选中字段→选择升序或降序→单击添加。
视图和查询的区别

视图和查询的区别1:什么是视图2:视图和查询的区别3:视图的优点4:如何创建和管理视图5:如何通过视图修改基本表的数据6:如何通过视图实现数据的安全性A:什么是视图:视图(view):从一个或几个基本表中根据用户需要而做成一个虚表1:视图是虚表,它在存储时只存储视图的定义,而没有存储对应的数据2:视图只在刚刚打开的一瞬间,通过定义从基表中搜集数据,并展现给用户B:视图与查询的区别:视图和查询都是用由sql语句组成,这是他们相同的地方,但是视图和查询有着本质区别: 它们的区别在于:1:存储上的区别:视图存储为数据库设计的一部分,而查询则不是.2:更新限制的要求不一样要注意:因为视图来自于表,所以通过视图可以间接对表进行更新,我们也可以通过update语句对表进行更新,但是对视图和查询更新限制是不同的,以下我们会知道虽然通过视图可以间接更新表但是有很多限制.3:排序结果:通过sql语句,可以对一个表进行排序,而视图则不行.比如:创建一个含有order by子句的视图,看一下可以成功吗?C:视图的优点:为什么有了表还要引入视图呢?这是因为视图具有以下几个优点: 1:能分割数据,简化观点可以通过select和where来定义视图,从而可以分割数据基表中某些对于用户不关心的数据,使用户把注意力集中到所关心的数据列.进一步简化浏览数据工作.2:为数据提供一定的逻辑独立性如果为某一个基表定义一个视图,即使以后基本表的内容的发生改变了也不会影响“视图定义”所得到的数据3:提供自动的安全保护功能视图能像基本表一样授予或撤消访问许可权.4:视图可以间接对表进行更新,因此视图的更新就是表的更新D:视图的创建和管理视图的创建1:通过sql语句格式:create view 视图名 as select 语句试一试:分别创建关于一个表或多个表的视图[因为视图可以来自于多表]2:通过企业管理器说明:1:在完成视图的创立之后,就可以像使用基本表一样来使用视图2:在创建视图时,并非所有的select子查询都可用如:compute和compute by,order by[除非与top一起连用]3:但在查询时,依然都可以用在创建时禁用的select子查询4:在视图创建时,必须为没有标题列指定标题[思考:能否不用select 语句来创建一个视图]视图的删除:1:通过sql语句:drop view 视图名2:通过企业管理器说明:与删除表不同的是,删除视图后只是删除了视图了定义,并没有删除表中的数据.[查看相关性]修改视图的定义1:通过企业管理器2:通过sql语句:格式:alter view 视图名 as 新的select语句浏览视图信息 sp_helptext 视图名 [查看视图创建的语句]E:如何通过视图修改基本表的数据.1:在视图上使用insert语句通过视图插入数据与直接在表中插入数据一样,但视图毕竟不是基本表.因此在进行数据插入时还是有一定的限制1:如果视图上没有包括基本表中属性为not null[不能为空]的列,那么插入操作会因为那些列是null值而失败.2:如果某些列因为某些规则或约束的限制而不能直接接受从视图插入的列时,插入会失败3:如果在视图中包含了使用统计函数的结果,或是包含计算列,则插入操作会失败4:不能在使用了distinct语句的视图中插入值5:不能在使用了group by语句的视图中插入值2:使用update更新视图中的数据1:更新视图与更新表格一样,但是在视图中使用了多个基本表连接的情况下,每次更新操作只能更新来自基本表的一个数据列例如:创建以下视图:create view del asselect 职工号,姓名,部门名称,负责人 from work1,部门where work1.部门编号=部门.部门编号如果再执行下面的语句时:update del set 职工号=\'001\',部门名称=\'wenda\' where 职工号=\'01\'[出现错误]只能够改成:update del set 职工号=\'001\' where 职工号=\'01\' update del set 部门名称=\'wenda\' where 职工号=\'01\' 2:不能在使用了distinct语句的视图中更新值3:不能在使用了group by语句的视图中更新值3:使用delete删除视图中数据.通过视图删除数据最终体现为从基本表中删除数据格式:delete 视图名 [where 条件]说明:当视图由两个以上的基表构成时,不允许删除视图的数据例如:建一个视图kkcreate view kk asselect 职工号,姓名,性别,部门名称from work1,部门where work1.部门编号=部门.部门编号 [试着去删除]使用with check option的视图如果不了解视图定义内容,则常常会发生向视图中输入不符合视图定义的数据的情况.比如:create view xm asselect * from work where 性别=\'男\'完全可以插入insert xm values(\'001\',\'女\',23,\'2400\'....)尽管从意义上来说是不合理的,但是上述语句是正确的.为了防止这种情况的发生,可以使用with check option子句来对插入的或更改的数据进行限制.比如:create view xm asselect * from work where 性别=\'男\' with check option使用schemabinding的视图[使用绑定到构架]我们知道视图是依赖于表,如果在一个表中创建一个视图,今后如果这个表被删除了,则这个视图将不可再用了.为了防止用户删除一个有视图在引用的表,可以在创建视图的时候加上schemabinding关键字.比如:create view 基本工资 with SCHEMABINDINGas select 姓名,性别,基本工资 from dbo.work说明:1:不能使用“*”来创建此类型的视图2:创建此类型的视图时,一定要加上dbo.表名.3:如果在某个表中定义了此类视图,则用户将不能对表的结构进行修改,否则会删除这些绑定4:如果用户对表的结构进行列改名,则会删除绑定而且视图不可用.5:如果用户对表的结构进行列的类型或者大小修改,则会删除绑定但视图可用,此时用户可以删除视图所引用的表.使用with encryption对视图进行加密为了保护创建视图定义的原代码,可以对视图进行加密.比如:create view kk with encryptionas select * from work where 职称=\'经理\'用sp_helptext来查看一下.或用企业管理器查看一下.说明:如果应用此项用户将无法设计视图F:使用视图加强数据的安全一般通过使用视图共有三种途径加强数据的安全性A:对不同用户授予不同的使用权.B:通过使用select子句限制用户对某些底层基表的列的访问C:通过使用where子句限制用户对某些底层基表的行的访问对不同用户授予不同的权限。
ch5 数据库系统概念(第6版)第五章高级SQL

SQL:1999 还支持大量的命令式结构,例如
存储过程
存储过程的优点:
使用存储过程可以减少网络流量 增强代码的重用性和共享性 使用存储过程可以加快系统运行速度 使用存储过程保证安全性
存储过程的创建
写SQL语句 测试SQL语句 如得到所需结果,则创建结果 执行过程
触发器
触发器
触发器 是一条语句,当对数据库做修改时,它自动被系 统执行. 要设置触发器机制,必须满足: 指明什么条件下触发器被执行. 指明触发器执行的动作是什么. SQL-92 标准并不包括触发器,但是许多DB系统支持触发 器。 触发器于SQL:1999被引进到SQL标准 , 但是更早就通过非 标准语法被大部分数据库所支持.
SQL允许用if-then-else语句,for和while循环,等等 ,来定义过程.
存储过程
可以在数据库中存储过程 然后通过call语句来执行 允许外部应用程序对数据库进行操作,而无需了解内 部细节
面向对象方面将在22章介绍 (基于对象的数据库)*
函数和过程
SQL:1999 支持函数和过程
过程结构*
注意: 大部分数据库系统对下列标准语法实现了自 己的变种 复合语句: begin … end, While 和 repeat 语句:
end while
repeat
set n = n + 1
Visual FoxPro VF 第7章 查询与视图(1)

• 注意:视图与查询最大的区别:视图是可 更新的,而查询不可以; • 查询有“查询去向”功能,可视图没有。
• 05-4考题: • 19、在Visual FoxPro中,关于查询和视图的正确描述 是______。 • A、查询是一个预先定义好的SQL SELECT语句 文件 • B、视图是一个预先定义好的SQL SELECT语句 文件 • C、查询和视图是同一种文件,只是名称不同 • D、查询和视图都是一个存储数据的表 • 30、在Visual FoxPro中,以下关于视图描述中错误的 是______。 • A、通过视图可以对表进行查询 • B、通过视图可以对表进行更新 • C、视图是一个虚表 • D、视图就是一种查询
• 33、删除视图myview的命令是______。 • A、DELETE myview VIEW • B、DELETE myview • C、DROP myview VIEW • D、DROP VIEW myview • 07-4考题: • 15、在Visual FoxPro中,以下关于查询的描述正 确的是______。 • A、不能用自由表建立查询 • B、只能用自由表建立查询 • C、不能用数据库表建立查询 • D、可以用数据库表和自由表建立查询
• 2、视图
• 如:CREATE VIEW e_w AS SELECT 职 工号,仓库号 FROM 职工
– 视图是一个定定的虚拟表,可以是本地的、远程的 或带参数的。 – 视图可引用一个或多个表,或引用其他视图。 – 视图是可更新的。 – 在关系数据库中,视图也称作窗口,即视图是操作 表的窗口,可以把它看作是从表中派生出来的虚表 (依赖于表,不独立存在)。 – 视图是数据库中的一个特有功能,只有在包含视图 的数据库打开时,才能使用视图。 – 视图一经建立就基本可以像基本表一样使用,适用 于基本表的命令基本都可以用于视图。 – 视图的建立:
ue5 chatactormovement 使用

ue5 chatactormovement 使用一、概述本篇文章将向您介绍如何在UE5中使用ChatActor movement,包括其基本概念、使用方法和示例。
ChatActor是一种特殊的Actor,用于处理游戏中的聊天系统。
通过使用Movement组件,您可以控制ChatActor的移动和交互。
二、基本概念1. ChatActor:UE5中的ChatActor是一种特殊的Actor,用于处理游戏中的聊天系统。
它具有自己的生命体和行为集,可以与其他Actor进行交互。
2. Movement组件:Movement组件是所有Actor的必备组件,用于控制其移动和交互。
在ChatActor中,Movement组件负责控制其移动速度、跳跃高度等行为。
三、使用方法1. 创建ChatActor:首先,您需要在场景中创建一个ChatActor。
您可以使用内容创建工具或编辑器手动创建,也可以在代码中创建。
2. 添加Movement组件:一旦您创建了ChatActor,您需要将其添加Movement组件。
这可以通过在ChatActor上右键单击并选择“添加组件”来完成。
选择Movement组件并确认添加。
3. 设置移动速度:您可以通过在Movement组件中设置移动速度来控制ChatActor的移动。
移动速度可以通过“Move Speed”属性进行调整。
4. 设置跳跃高度:如果您希望ChatActor能够跳跃,您需要设置适当的跳跃高度。
您可以通过在Movement组件中设置“Jump Height”属性来实现这一点。
5. 控制交互:您可以使用Movement组件的其他属性来控制ChatActor与其他Actor的交互。
例如,您可以使用“Collision Mode”属性来设置ChatActor与其他物体的碰撞行为。
四、示例代码以下是一个简单的示例代码,展示如何在UE5中使用ChatActor movement:```c++// 创建ChatActorCHAT_ACTOR_CREATE_FUNC(MyChatActor){// 创建并初始化ChatActor// ...// 添加Movement组件chatActor->AddComponent(movementComponent);// 设置移动速度和跳跃高度movementComponent->MoveSpeed = 2.0f;movementComponent->JumpHeight = 0.5f;// 设置其他交互属性movementComponent->CollisionMode = COLLISION_NONE; // ChatActor不与其他物体碰撞}```在上述代码中,我们创建了一个名为MyChatActor的ChatActor,并为其添加了Movement组件。
数据库__VFP6第4章查询与视图

图4-15 查询设计器界面
(3)查询参数的设置 第一节 查询 ①确定输出的字段。在图4-15中的“可用字段”列表框中显示了上部窗 口中表的所有字段名称,通过“添加”或“全部添加”将“可用字段” 中所选择的字段移到“选定字段”列表框中。在本例中,B_xsxx表中除 szbj、xsjg、xspy等三个字段不选外其余全选,B_bjxx表中选择bjmc, B_dqxx表中选择dqmc ②设置联接条件 ③查询结果的排序。如果需要对查询的结果按一定的顺序排列,则可以 选择“排序依据”选项卡,以决定排序的依据。该选项卡如图4-16所示 。
第一节
图4-2 查询向导步骤之2 查询 查询向导步骤之2
第一节 查询 (4)步骤2:关联表
通常查询向导会自动查找两个表之间相匹配的字段 并显示在第二步的两个列表框中, 并显示在第二步的两个列表框中 , 如果这种关系正是 所需要的, 可以直接单击“ 添加” 按钮。 所需要的 , 可以直接单击 “ 添加 ” 按钮 。 如果在表之 间没有相匹配的字段, 就需要手工建立, 间没有相匹配的字段 , 就需要手工建立 , 只要分别在 两个下拉列表框中选取相应的字段即可。 两个下拉列表框中选取相应的字段即可。
图4-16 排序依据选项卡
第一节 查询 ④查询条件的设置。在“筛选”选项卡中可以设定查询的
条件,例如可以查询所有男同学的情况。“筛选”选项卡 如图4-17。
图4-17 筛选选项卡
⑤其他查询参数的设置 查询参数主要包括以上四项,其 他还有“分组依据”和“杂项”两个选项。
(4)查询结果的去向 第一节 查询
在查询设计的过程中,为了查看查询的结果, 可以随时单击“运行”按钮,VFP就会在屏幕上显 示查询的结果记录。在默认情况下,查询的结果直 接输出到屏幕上而且是不保存的。如果想改变查询 结果的去向,可以单击“查询设计器”工具栏中的 “查询去向”按钮,在图4-18所示的查询去向对话 框中选择不同的查询去向。
sql 高级用法

sql 高级用法SQL(Structured Query Language)是一种用于与关系型数据库进行交互的查询语言。
除了基本的增删改查操作外,SQL还有一些高级用法,用于更复杂的数据处理和查询。
1.数据库连接:在SQL中,可以通过使用连接语句(JOIN)将两个或多个表中的数据连接起来,根据共同的字段值进行数据匹配和组合查询。
2.子查询:子查询是嵌套在主查询语句中的查询,可以在一个查询中嵌套另一个查询,以便更灵活地操作数据。
子查询可以用于过滤数据、计算聚合函数结果或为主查询提供需要的数据。
3.视图:视图是基于一个或多个表的查询结果构建的虚拟表。
视图可以被当作普通表来使用,并且可以对其进行查询、插入、更新和删除操作,同时更新视图会同时更新真实表的数据。
4.窗口函数:窗口函数是一种用于在查询结果集中执行计算的函数。
它们允许在一个查询语句中对分组的行进行排序、过滤和聚合,而无需将查询拆分为多个步骤。
5.存储过程和函数:存储过程和函数是一系列预先编写的SQL语句的集合,它们被存储在数据库中并可以在需要时调用。
存储过程和函数可以帮助简化复杂的业务逻辑和数据处理流程,并提高数据库的性能。
6.事务处理:事务是一组SQL语句的逻辑单元,可以确保数据库操作的一致性和完整性。
通过将一系列操作封装在一个事务中,可以在遇到错误或其他异常情况时进行回滚或提交。
7.索引优化:索引是一种数据结构,用于加快数据库的查询速度。
通过在表中创建索引,并使用适当的索引算法,可以使查询更快速地定位到所需的数据。
8.触发器:触发器是一种特殊的存储过程,它在表中的数据发生更改时自动执行。
触发器可以用于在数据插入、更新或删除时自动执行一系列操作,以实现数据的一致性和完整性。
除了上述提到的高级用法,SQL还具有其他一些功能和特性,如数据备份和恢复、权限管理、数据类型转换等。
根据不同的数据库管理系统,SQL的具体高级用法可能会有所不同,因此在实际应用中需要根据具体的数据库系统进行查询和了解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2) 视图的修改、重命名与删除
11
5.3 SELECT-SQL语句 语句
1. SQL(Structured Query Language,结构 ( 结构 化查询语言)是美国国家标准局ANSI确认 化查询语言)是美国国家标准局 确认 的关系数据库语言的标准。 的关系数据库语言的标准。 2. VFP支持 支持SQL。 支持 。 3. 一个 一个SQL命令可以代替多个 命令可以代替多个VFP命令。 命令。 命令可以代替多个 命令 4. 在VFP中,应尽可能采用 中 应尽可能采用SQL命令来代替 命令来代替 一般的VFP命令。 一般的 命令。 命令
FROM子句 子句 定义 指定数据源表 数据源 确定源表间的联接 …JOIN…ON…子句 子句 筛选源表记录 指定输出字段 指定输出类型 定义 结果 定义记录的分组 指定结果顺序 筛选结果记录 14 指定结果的范围 WHERE子句 子句 字段、函数和表达式的列表或* 字段、函数和表达式的列表或 INTO子句和 子句 子句和TO子句 子句和 GROUP BY子句 子句 ORDER BY子句 子句 HAVING子句 子句 TOP nExpr[PERCENT]
2
3. 创建单表查询
1) 方法
a. “项目管理器”:数据 查询 新建 新建查询 b. 文件 新建 查询设计器 查询 新建文件 c. CREATE QUERY :输入SELECT-SQL命令
2) 有关概念
a. b. c. d. “字段”:用于确定查询要输出的字段或表达式 “筛选”:用于确定查询条件 “排序依据”:用于指定查询结果的记录顺序 “分组”:用于生成分组查询,把具有相同字段值的 记录分为一组,合并为查询结果中的一条记录
7
5. 交叉表查询
1) 交叉表查询就是以是电子表格形式显示数据的 查询。 2) 使用“交叉表向导”建立交叉表查询。 3) 可在“查询设计器”中修改。
8
5.2 视图的创建和使用
1. 视图与查询的区别: 视图与查询的区别:
1) 查询得到的是一组只读型的检索结果。而视图 可以从表中提取一组记录,改变这些记录的值, 并把更新结果送回到源表中。 2) 查询保存为一个可执行的.qpr程序文件,而视 图保存在数据库中(没有单独的文件),是数 据库的组成部分,与库表具有类似的性质。
12
5. VFP支持的 支持的SQL命令 支持的 命令
1) 2) 3) 4) 5) 6) 7) SELECT-SQL ALTER TABLE-SQL CREATE TABLE-SQL CREATE CURSOR-SQL DELETE-SQL INSERT-SQL UPDATESQL命令主要组成部分 命令主要组成部分
第5章 查询和视图 章
1
5.1 查询的创建和使用
1. 查询的意义
1) 简化从一个或多个表中检索或收集数据的过程
2. 查询的本质
1) 查询的结果是一个基于表和视图的动态的数据 集合 2) 查询保存为一个扩展名为.QPR的文件。文件中 保存的是实现查询的SELECT-SQL命令,而非查 询的结果 3) 查询必须基于确定的数据源,可以是一个或多 个数据库表、自由表或视图
指定有无重复记录 ALL/DISTINCT
7. 创建查询实例 查询教师表中除外语系和中文系外各个系 科教师的人数、工资总额和平均工资,并 按平均工资从高到低排列。查询输出中, 一个系科只有一个记录,每个记录必须包 括系名、系人数、工资总额和平均工资四 个列。
15
a. 如果表之间已存在永久关系,则作为默认联接条件, 否则系统打开“联接条件”对话框,并以表的同名 字段作为默认联接条件。 b. 已存在于查询中的表或视图,可拖动一个表中的字 段到另一个中建立联接
6
4) 联接的类型 联接类型 内 联 接 ( Inner Join Join) 左 联 接 ( Left Outer Join) 右 联 接 ( Right Outer Join) 完 全 联 接 ( Full Join) 说明 两个表中仅满足联接条件的记录。 表中条件左边的所有记录与右边的满 足条件的记录。 表中条件右边的所有记录与左边的满 足条件的记录。 所有记录。
3
3) 有关分组的补充
a. 在分组基础上对查询结果进行筛选,可使用“满足 条件”(HAVING子句)。 b. 满足条件必须和分组一起使用。 c. 用于分组的字段不一定是已选定的输出字段。 d. 分组字段不能是一个计算字段,如:平均工资。
4) 对查询结果的其他设置
a. 排除查询结果中所有重复的行 b. 设置结果的记录范围
2. 两种视图
1) 本地视图 2) 远程视图
9
3. 本地视图创建
1) 使用“视图设计器” 2) 使用命令CREATE SQL VIEW
4. 更新源表数据
1) 设置关键字段 2) 指定可更新字段 3) 发送SQL更新
10
5. 使用视图
1) 访问视图
a. b. c. d. 视图的处理类似于表,可用USE命令打开 打开本地视图的同时,其基表也自动打开。 自动打开的本地基表并不在关闭视图时自动关闭。 打开本地视图后,当基表中的数据发生变化时可用 ReQuery()函数刷新视图。
4
5) 运行查询
a. 工具栏中运行 b. 命令:DO 查询文件名.qpr
6) 查询结果的输出类型
5
4. 创建多表查询
1) 当需要获取两个或多个表或视图中的信息时, 只要把所有表或视图添加到查询中,并用公共 字段来联接。 2) 与单表查询的不同:
a. 表的数目 b. 表之间需要建立联接
3) 多个表之间的联接