有如下表关系,请完成对应查询
玩家表Player
ID NAME BIRTHDAY SCORE GAMEID
10011 BOB 1998-01-07 15894.86 001
10023 TOM 1989-09-08 15733.91 003
10089 LEO 1997-08-08 15633.25 001
10073 JAMES 1999-03-10 17888.29 002
10025 SMITH 1987-01-06 19331.79 003
游戏表GAME
GAMEID GAMENAME COMPANY COUNTRY
001 CRAZYBIRD NEUSOFT CHINA
002 SUPERMARIO RENTIANTANG JAPAN
003 RUNNINGMAN MIRSOFT AMERICA
004 DNF NEOPLE KOREA
(1)查询出与JAMES玩家玩相同游戏,分数比他高的玩家信息。 (2)查询出高于自己所玩游戏平均分数的玩家信息。
解题思路:
1,捉关键词“与,相同游戏,分数比”,我们就可以展开分析,三个关键字都来自同一张表player,那就不用搭理第二张表了,直接用子查询开干
注意:第二张表就相当于来诱惑你偏离轨道的,我就是例子,因为我觉得两张表肯定是有用的,结果还真没联系,踩坑了,新手一般就有可能被迷惑住了,记住重要的四个字:仔细读题
select * from player where gameid=(select gameid from player where name='JAMES') and score>(SELECT score FROM PLAYER where name='JAMES')
2,这道题同样捉关键字“高,平均分数”,有三种思路,第一种用子查询,第二种用表关联也就是自连接,然后利用分组来,与第二张表没关
第一种
select * from player p where score > (select avg(score) from player where p.gameid=gameid)
第二种
select p.* from player p join player p1 on p.gameid=p1.gameid group by p.score,p.gameid having p.score>avg(p1.score)
第三种
SELECT p.* FROM player p,(SELECT gameid,AVG(score) avgsal FROM player GROUP BY gameid) f WHERE p.gameid = f.gameid AND score > avgsal