-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path6_join_opertion.sql
136 lines (123 loc) · 3.25 KB
/
6_join_opertion.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
-- Exersice and tables reference: https://sqlzoo.net/wiki/The_JOIN_operation
-- 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';
-- Show id, stadium, team1, team2 for just game 1012.
SELECT id
,stadium
,team1
,team2
FROM game
WHERE id = 1012;
-- Show the player, teamid, stadium and mdate for every German goal.
SELECT player
,teamid
,stadium
,mdate
FROM goal
JOIN game
ON (matchid = game.id)
WHERE teamid = 'GER';
-- Show the team1, team2 and player for every goal scored by a player
-- called Mario.
SELECT team1
,team2
,player
FROM game
JOIN goal
ON (game.id = matchid)
WHERE player LIKE 'Mario%';
-- Show player, teamid, coach, gtime for all goals scored in the first 10
-- minutes gtime<=10.
SELECT player
,teamid
,coach
,gtime
FROM goal
JOIN eteam
ON (teamid = eteam.id)
WHERE gtime <= 10;
-- List the dates of the matches and the name of the team in which
-- 'Fernando Santos' was the team1 coach.
SELECT mdate
,teamname
FROM game
JOIN eteam
ON (team1 = eteam.id)
WHERE coach = 'Fernando Santos';
-- List the player for every goal scored in a game where the stadium was
-- 'National Stadium, Warsaw'.
SELECT player
FROM goal
JOIN game
ON (matchid = game.id)
WHERE stadium = 'National Stadium, Warsaw';
-- Show the name of all players who scored a goal against Germany.
SELECT DISTINCT player
FROM game
JOIN goal
ON matchid = game.id
WHERE (team1 = 'GER' OR team2 = 'GER')
AND teamid <> 'GER';
-- Show teamname and the total number of goals scored.
SELECT teamname
,COUNT(*) AS 'goals scored'
FROM eteam
JOIN goal
ON eteam.id = teamid
GROUP BY teamname
ORDER BY teamname;
-- Show the stadium and the number of goals scored in each stadium.
SELECT stadium
,COUNT(*) AS 'goals scored'
FROM game
JOIN goal
ON (game.id = matchid)
GROUP BY stadium;
-- For every match involving 'POL', show the matchid, date and the number of
-- goals scored.
SELECT matchid
,mdate
,COUNT(*) AS 'goals scored'
FROM game
JOIN goal
ON (matchid = id)
WHERE team1 = 'POL' OR team2 = 'POL'
GROUP BY matchid
,mdate;
-- For every match where 'GER' scored, show matchid, match date and the number
-- of goals scored by 'GER'.
SELECT matchid
,mdate
,COUNT(*) AS 'goals scored by Germany'
FROM goal
JOIN game
ON (matchid = game.id)
WHERE teamid = 'GER'
GROUP BY matchid
,mdate;
-- List every match with the goals scored by each team as shown:
-- | mdate | team1 | score1 | team2 | score2 |
-- | 1 July 2012 | ESP | 4 | ITA | 0 |
-- | 10 June 2012 | ESP | 1 | ITA | 1 |
-- | 10 June 2012 | IRL | 1 | CRO | 3 |
-- ...
-- Sort your result by mdate, matchid, team1 and team2.
SELECT mdate
,team1
,SUM(CASE WHEN teamid = team1 THEN 1 ELSE 0 END) AS score1
,team2
,SUM(CASE WHEN teamid = team2 THEN 1 ELSE 0 END) AS score2
FROM game
LEFT JOIN goal -- Using LEFT, otherwise matches without goals will not be shown.
ON matchid = id
GROUP BY mdate
,team1
,team2
ORDER BY mdate
,matchid
,team1
,team2;