SQL的数据查询9
《SQL的数据查询9》由会员分享,可在线阅读,更多相关《SQL的数据查询9(42页珍藏版)》请在装配图网上搜索。
1、SQL的数据查询天津师范大学刘洋一个问题n2006年6月,举世瞩目的第18届世界杯在德国举行,某网站为了方便球迷查询,在自己的网站上设立了世界杯信息查询系统。该系统的一部分要求为:一名球员可以参加多场比赛,每场比赛有多名球员参加。概念模型ER图球员姓名代表国号码年龄位置比赛编号甲方乙方类型进球数出场时间参加mn概念模型关系数据模型球员关系player(nation,number,name,age,position)主码:(nation,number)概念模型关系数据模型想一想,如果只是number作为主码可以吗?概念模型关系数据模型不可以,因为不同国家队中有相同的号码概念模型关系数据模型比赛关
2、系match(matchid,match_a,match_b,matchtype)主码:matchid概念模型关系数据模型player(nation,number,name,age,position)match(matchid,match_a,match_b,matchtype)matchidnation,numberjoin(,)time,goalPlayerPlayer的主码的主码matchmatch的主码的主码joinjoin自己的属自己的属性性参加关系joinjoin的主码的主码SQL语言功能动词数据查询数据定义数据更新数据控制SELECTCREATE,DROP,ALTERINSERT
3、,UPDATE,DELETEGRANT,REVOKECREATE使用SQL语言创建基本表player(nation,number,name,age,position)Create table player -球员表 nation char(20),-代表国 number int -号码 name char(20),-姓名 age int,-年龄 position char(10)-位置 定义主码check(number between 1 and 23),check(position in(守门员,后卫,中场,前锋),primary key(nation,number),使用SQL语言创建基本
4、表match(matchid,match_a,match_b,matchtype)Create table match -比赛表 matchid int primary key,-比赛编号(主码)match_a char(20),-比赛甲方 match_b char(20),-比赛乙方 matchtype char(10)check(matchtype in(小组赛,淘汰赛)比赛类型 使用SQL语言创建基本表Create table join -参加表 nation char(20),-代表国 number int,-号码 matchid int,-比赛编号 time int,-出场时间 go
5、al int -进球数 primary key(nation,number,matchtype)定义主码 定义外码 定义外码 join(nation,number,matchid,time,goal)foreign key(nation,number)reference player(nation,number)foreign key(matchid)reference match(matchid)SQL语言功能动词数据查询数据定义数据更新数据控制SELECTCREATE,DROP,ALTERINSERT,UPDATE,DELETEGRANT,REVOKESELECTSelect语句的基本句法
6、select-From-Where句型 A1,An(F(R1 Rm))From R1,Rm Where FSelect A1,An这里R1、Rn为关系,F是公式,A1、An为属性。R1 RmF A1,An 使用SQL语言查询思考题1、检索参加比赛场次为A1的球员的代表队以及身披号码2、检索参加比赛场次为A1或A3的球员的代表队以及身披号码3、检索参加比赛场次为A1和A3的球员的代表队以及身披号码4、检索参加比赛场次为A1的球员的代表队以及身披号码和姓名5、检索不参加比赛场次为A1的球员的代表队、身披号码使用SQL语言查询世界杯数据库中有三个基本表(关系):player(nation,numbe
7、r,name,position)nationnationnumbernumbernamenamepositionposition德国 13 巴拉克 中场法国 12 亨利 前锋德国 1 莱曼 守门员巴西 6 卡洛斯 后卫使用SQL语言查询match(matchid,match_a,match_b)matchidmatch_a match_b A1 德国 哥斯达黎加 A3 德国 波兰 G2 法国 瑞士 F2 巴西 克罗地亚使用SQL语言查询join(nation,number,matchid,goal)nationnumber matchid goal 德国 13 A1 1 德国 13 A3 1
8、德国 1 A1 0 法国 12 G2 3 巴西 6 F2 0 德国 1 A3 0使用SQL语言查询1、检索参加比赛场次为A1的球员的代表队以及身披号码nationnationnumbernumbermatchidmatchid 德国 13 A1 德国 13 A3 德国 1 A1 德国 1 A3 法国 12 G2 巴西 6 F2 nationnationnumbernumbermatchidmatchid 德国 13 A1 德国 1 A1 使用SQL语言查询From joinWhere matchid=A1Select nation,number从表SC选择条件投影到相应列上1、检索参加比赛场次
9、为A1的球员的代表队以及身披号码德国 1 A3 德国 13 A3 使用SQL语言查询nationnationnumbernumbermatchidmatchid 德国 13 A1 德国 13 A3 德国 1 A1 德国 1 A3 法国 12 G2 巴西 6 F2 nationnationnumbernumbermatchidmatchid 德国 13 A1 德国 1 A1 2、检索参加比赛场次为A1或A3的球员的代表队以及身披号码使用SQL语言查询From joinWhere matchid=A1Select Distinct nation,number从表SC选择条件投影到相应列上Or ma
10、tchid=A3去除重复元组。2、检索参加比赛场次为A1或A3的球员的代表队以及身披号码使用SQL语言查询From joinWhere matchid=A1Select Distinct nation,numberAnd matchid=A33、检索参加比赛场次为A1和A3的球员的代表队以及身披号码想一想,这样做对吗?使用SQL语言查询nationnumber matchid goal 德国 13 A1 1 德国 13 A3 1 德国 1 A1 0 法国 12 G2 3 巴西 6 F2 0 德国 1 A3 0有某一数据项既是A1又是A3的吗?使用SQL语言查询nationmatchid德国 A
11、1 Xnationmatchid 德国 A1 Y使用SQL语言查询X.nationX.number X.matchid Y.nationY.number Y.matchid德国13 A1 德国 13 A3德国 1 A1 德国1 A3笛卡儿积连接后的结果使用SQL语言查询From join AS X,join AS YWhereX.nation=Y.nation And X.number=Y.numberSelect X.nation,X.numberAnd X.matchid=A1And Y.matchid=A3指明是哪张表的nation,number。3、检索参加比赛场次为A1和A3的球员的
12、代表队以及身披号码一张表使用多次时,必须要给它命名成不同的名字。使用SQL语言查询nationnumber matchid 德国13 A1 nationnumber name德国13 巴拉克4、检索参加比赛场次为A1的球员的代表队以及身披号码和姓名nationnumber nationnumber 使用SQL语言查询nationnumbernamepositionmatchid goal 德国 13 巴拉克 中场 A1 1自然连接后的结果 德国 13 巴拉克 中场 A1 1 德国 13 巴拉克 中场 A3 1 德国 1 莱曼 守门员 A1 0 德国 1 莱曼 守门员 A1 0 德国 1 莱曼
13、守门员 A3 0 法国 12 亨利 前锋 G2 3 巴西 6 卡洛斯 后卫 F2 0使用SQL语言查询 德国 13 巴拉克 中场 A1 1 德国 1 莱曼 守门员 A1 0nationnumbernamepositionmatchid goal使用SQL语言查询连接查询From player,joinWhereplayer.nation=join.nation And player.number=join.numberSelect player.nation,player.number,name表player与表join连接选择条件投影到相应列上And matchid=A1自然连接4、检索参加
14、比赛场次为A1的球员的代表队以及身披号码和姓名使用SQL语言查询4、检索参加比赛场次为A1的球员的代表队、身披号码和姓名nationnationnumbernumbermatchidmatchid 德国 13 A1 德国 13 A3 德国 1 A1 德国 1 A3 法国 12 G2 巴西 6 F2 nationnationnumbernumbermatchidmatchid 德国 13 A1 德国 1 A1 使用SQL语言查询语句为:From joinWhere matchid=A1Select nation,number查询结果为:Nation number德国13德国使用SQL语言查询na
15、tionnationnumbernumbernamenamepositionposition德国 13 巴拉克 中场法国 12 亨利 前锋德国 1 莱曼 守门员巴西 6 卡洛斯 后卫德国 13 巴拉克 中场德国 1 莱曼 守门员使用SQL语言查询语句为:From playerWhere (nation,number)INSelect nation,number,name(德国,13),(德国,1)From joinWhere matchid=A1)(Select nation,number父查询子查询使用SQL语言查询答案2:嵌套查询From playerWhere(nation,number
16、)INSelect nation,number,name从表player选择条件投影到相应列上From joinWhere matchid=A1)(Select nation,number首先在join关系中找出 相应的国家队名称和号码不相关子查询使用SQL语言查询4、检索参加比赛场次为A1的球员的代表队、身披号码和姓名nationnationnumbernumber name name 德国 13巴拉克 法国12 亨利 德国 1 莱曼 巴西 6卡洛斯 德国 13巴拉克 德国 1 莱曼 nationnationnumbernumbermatchidmatchid 德国 13 A1 德国 13
17、A3 德国 1 A1 德国 1 A3 法国 12 G2 巴西 6 F2 法国12 亨利 巴西 6卡洛斯 使用SQL语言查询答案3:嵌套查询From playerWhereA1INSelect nation,number,name从表player选择条件投影到相应列上From joinWhere nation=player.nation And number=player.number)(Select matchid看“A1”是否在当前检查球员参加的比赛相关子查询4、检索参加比赛场次为A1的球员的代表队、身披号码和姓名使用SQL语言查询4、检索参加比赛场次为A1的球员的代表队、身披号码和姓名na
18、tionnationnumbernumber name name 德国 13巴拉克 法国12 亨利 德国 1 莱曼 巴西 6卡洛斯 德国 13巴拉克 德国 1 莱曼 nationnationnumbernumbermatchidmatchid 德国 13 A1 德国 13 A3 德国 1 A1 德国 1 A3 法国 12 G2 巴西 6 F2 法国12 亨利 巴西 6卡洛斯 使用SQL语言查询From playerWhereEXISTSSelect nation,number,name从表player选择条件投影到相应列上From joinWhere join.nation=player.nationAnd join.number=player.number(Select *看是否存在当前检查球员参加了“A1”比赛的记录 And matchid=A1)答案:使用存在量词的嵌套查询相关子查询4、检索参加比赛场次为A1的球员的代表队、身披号码和姓名使用SQL语言查询想一想,这样做对吗?5、检索不参加比赛场次为A1的球员的代表队、身披号码From player,joinWhereplayer.nation=join.nation And player.number=join.numberSelect player.nation,player.numberAnd matchidA1谢谢
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。