SQL server 2005跨表查询实例解析

实现SQL的单表查询是比较简单的,有固定的格式,代入内容即可。本文将通过一个实例来学习跨表查询。通过SQL的跨表查询可以实现更加复杂的查询方式。
项目需求:数据库WOW中现有多个表格,各表的字段和数据类型如下:
image
image
具体的需求是:
1、要求所有“人族”玩家现有级别加一,所有“魔法师”(每个种族都有魔法师)现有经验值加20%
2、要求根据现有表生成新表“玩家一览表”,要求体现每个玩家的“游戏帐号”、“姓名”、“出生日期”、“种族”、“职业”、“铠甲”、“兵器”;
需求分析:
为了满足项目中的要求,我们首先要创建这几个表格,并且创建好他们之间的对应关系,以便于进行跨表的查询,在关系型数据库中,有很多重复性的字段,这个时候就可以用简单的数字来表示那些重复的字段,提高查询的效率,比如:在性别对应关系中,设置1对应男,2对应女,这样在数据表中只需要用1和2 来表示男和女。这个单从理论上来理解可能有点困难,下面通过对这个项目的实现来学习跨表查询。
实现以上的要求,其实步骤很简单,只要按照下面的步骤进行,就可以成功
1、搭建实验环境,按要求新建表格,选择正确的数值类型
2、在各个表中添加正确的内容,添加正确的表和表之间的对应关系
3、创建数据库关系图
4、根据建立好的关系,在查询器中输入正确的命令完成项目的要求
(一)、创建上图中的表格,创建好的表格如下:
image
(二)、下面表格创建好了之后,我们要根据项目要求的字符类型,去设定列值,以及表与表之间的关系。如下图,设计好的字段值:
注意下面几张表格中的对应关系,数字和字段名称的对应关系
image
image
(三)、现在实验的准备工作完成了,下面将进行重要的一个步骤:创建数据库关系图
image
选择我们需要创建彼此关系的表格
image
设置每个表的主键,并且将主键连接到对应的主表的字段上,比如:铠甲对照表的铠甲编号连接到账号属性表的铠甲列即可,以同样方法连接其他的几个表,连接完成后如图
image
在下图中点击“是”,保存该数据库关系表
image
起一个名称,保存默认即可
image
(四)、完成实验要求一:
要求所有“人族”玩家现有级别加一,所有“魔法师”(每个种族都有魔法师)现有经验值加20%
我们打开新建查询窗口,切换到wow数据库,输入下面的两条命令即可实现上面的要求:
update 账号属性表 set 级别=级别+1 where 所属种族='1'
update 账号属性表 set 经验值=经验值*1.2 where 所属种族='2'
image
修改成功后的表如图所示,级别和经验值都按规定增加了
image
(五)、完成实验要求二:
要求根据现有表生成新表“玩家一览表”,要求体现每个玩家的“游戏帐号”、“姓名”、“出生日期”、“种族”、“职业”、“铠甲”、“兵器”;
这里要使用到一个跨表查询的语句:
select ....   #选择字段值
from ....     #来自于哪个表
into.....     #输入到一个新表,新表的名称
where ....  #附加的条件
and....and ....and......   #同时满足and所连接的条件
如图所示,输入图中的句子,我们先查询一下,看看这个命令是否成功
整个跨表查询的语句是:
select 玩家信息表.游戏账号,玩家信息表.姓名,玩家信息表.出生日期,种族对照表.种族,
职业对照表.职业,铠甲对照表.铠甲,兵器对照表.兵器,datediff(year,出生日期,getdate())
as 年龄
into 玩家一览表
from 玩家信息表,职业对照表,种族对照表,铠甲对照表,兵器对照表,账号属性表
where 账号属性表.所属种族=种族对照表.种族编号
and 账号属性表.所属职业=职业对照表.职业编号
and 账号属性表.铠甲=铠甲对照表.铠甲编号
and 账号属性表.兵器=兵器对照表.兵器编号
and 玩家信息表.游戏账号=账号属性表.游戏账号
image
然后根据项目的需求把上面的查询结果导入到一个新表“玩家一览表”中,只需在上面的命令中添加into命令即可
image
我们刷新一下表,可以看到生成了一个新表“玩家一览表”,打开该表可以看到跨表查询后生成的信息
image
最后再拓展一下吧,我们可以用下面的命令,在生成玩家一览表的同时,计算玩家的年龄
如图:
image
然后我们可以看到新生成的玩家一览表中多了年龄字段,并自动计算出了玩家的年龄
image
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值