sqlzoo练习--The JOIN operation

The JOIN operation

use world;
select * from goal
#1
#Modify it to show the matchid and player name for all goals scored by Germany.
#To identify German players,
#check for: teamid = 'GER'
select  matchid,player from goal where teamid = 'GER'

#2.
#From the previous query you can see that Lars Bender's scored a goal in game 1012.
#Now we want to know what teams were playing in that match.
#Notice in the that the column matchid in the goal table corresponds to the id column in the game table.
#We can look up information about game 1012 by finding that row in the game table.
#Show id, stadium, team1, team2 for just game 1012
select distinct id,stadium,team1,team2 from game as ga
join goal as go on ga.id=go.matchid
where go.matchid=1012

#3.
#You can combine the two steps into a single query with a JOIN.
SELECT *
  FROM game JOIN goal ON (id=matchid)
#The FROM clause says to merge data from the goal table with that from the game table.
#The ON says how to figure out which rows in game go with which rows in goal - the id from goal must match matchid from game.
#(If we wanted to be more clear/specific we could say
#ON (game.id=goal.matchid)
#The code below shows the player (from the goal) and stadium name (from the game table) for every goal scored.

#Modify it to show the player, teamid, stadium and mdate for every German goal.
select go.player,go.teamid,ga.stadium,ga.mdate from game as ga
join goal as go
on ga.id=go.matchid
where go.teamid='GER'

#4.
#Use the same JOIN as in the previous question.
#Show the team1, team2 and player for every goal scored by a player called Mario player LIKE 'Mario%'
SELECT team1,team2,player FROM game as ga
join goal as go
on ga.id=go.matchid
where go.player like 'Mario%'

#5.
#The table eteam gives details of every national team including the coach.
#You can JOIN goal to eteam using the phrase goal JOIN eteam on teamid=id
#Show player, teamid, coach, gtime for all goals scored in the first 10 minutes gtime<=10
select player,teamid,coach,gtime from goal as go
join eteam as e
on go.teamid=e.id
where go.gtime<=10

#6.
#List the the dates of the matches and the name of the team in which 'Fernando Santos' was the team1 coach.

select ga.mdate,e.teamname from game as ga
join eteam as e
on ga.team1=e.id
where e.coach='Fernando Santos'


#7.
#List the player for every goal scored in a game where the stadium was 'National Stadium, Warsaw'
select go.player from goal as go
join game as ga
on go.matchid=ga.id
where ga.stadium='National Stadium, Warsaw'

#8.
The example query shows all goals scored in the Germany-Greece quarterfinal.
Instead show the name of all players who scored a goal against Germany.

select DISTINCT player from goal as go
join game as ga
on go.matchid=ga.id
where go.teamid != 'GER' and (ga.team1 ='GER' or ga.team2 ='GER')

#9.
Show teamname and the total number of goals scored.
COUNT and GROUP BY

select teamname,count(teamid) from eteam as e
join goal as go
on go.teamid=e.id
group by teamname

#10.
Show the stadium and the number of goals scored in each stadium.
select stadium,count(matchid) from game as ga
join goal as go
on go.matchid=ga.id group by stadium

#11.
#For every match involving 'POL', show the matchid, date and the number of goals scored.

select matchid,mdate,COUNT(teamid) from game as ga
join goal as go
on go.matchid=ga.id
where (ga.team1='POL'OR ga.team2='POL')
group by go.matchid,mdate

#12.
#For every match where 'GER' scored, show matchid,
#match date and the number of goals scored by 'GER'

select matchid,mdate,count(teamid) from game as ga
join goal as go on go.matchid=ga.id
where go.teamid='GER'
group by matchid,mdate

#13.
#Sort your result by mdate, matchid, team1 and team2.
select mdate,

team1,sum(case when teamid=team1 then 1 else 0 end) score1,
team2,sum(case when teamid=team2 then 1 else 0 end) score2

FROM game as ga
JOIN goal as go ON go.matchid = ga.id

group by team1,team2,mdate,teamid


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值