SQLZOO练习5--join(表的连接)
game表:
| id | mdate | stadium | team1 | team2 |
|---|---|---|---|---|
| 1001 | 8 June 2012 | National Stadium, Warsaw | POL | GRE |
| 1002 | 8 June 2012 | Stadion Miejski (Wroclaw) | RUS | CZE |
| 1003 | 12 June 2012 | Stadion Miejski (Wroclaw) | GRE | CZE |
| 1004 | 12 June 2012 | National Stadium, Warsaw | POL | RUS |
| …… | ||||
goal表:
| matchid | teamid | player | gtime |
|---|---|---|---|
| 1001 | POL | Robert Lewandowski | 17 |
| 1001 | GRE | Dimitris Salpingidis | 51 |
| 1002 | RUS | Alan Dzagoev | 15 |
| 1002 | RUS | Roman Pavlyuchenko | 82 |
| …… | |||
team表:
| id | teamname | coach |
|---|---|---|
| POL | Poland | Franciszek Smuda |
| RUS | Russia | Dick Advocaat |
| CZE | Czech Republic | Michal Bilek |
| GRE | Greece | Fernando Santos |
| …… | ||
1、获取德国的比赛id和参赛人员。
The first example shows the goal scored by a player with the last name 'Bender'. The * says to list all the columns in the table - a shorter way of saying matchid, teamid, player, gtime
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、Show id, stadium, team1, team2 for just game 1012
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 id,stadium,team1,team2
FROM game
where id=1012;
3、Modify it to show the player, teamid, stadium and mdate for every German goal.
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 matchid from goal must match id from game. (If we wanted to be more clear/specific we could sayON (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 goal.player,goal.teamid,game.stadium,game.mdate
from goal
left join
game
on goal.matchid=game.id
where goal.teamid='GER';
4、Show the team1, team2 and player for every goal scored by a player called Mario player LIKE 'Mario%'
Use the same JOIN as in the previous question.
select game.team1,game.team2,goal.player
from game
left join
goal
on game.id=goal.matchid
where goal.player like'Mario%';
5、Show player, teamid, coach, gtime for all goals scored in the first 10 minutes gtime<=10
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
select goal.player,goal.teamid,eteam.coach,goal.gtime
from goal
join eteam
on goal.teamid=eteam.id
where goal.gtime<=10;
6、List the dates of the matches and the name of the team in which 'Fernando Santos' was the team1 coach.
To JOIN game with eteam you could use either
game JOIN eteam ON (team1=eteam.id) or game JOIN eteam ON (team2=eteam.id)
Notice that because id is a column name in both game and eteam you must specify eteam.id instead of just id
select game.mdate,eteam.teamname
from game
join
eteam
on game.team1=eteam.id
where eteam.coach='Fernando Santos';
7、List the player for every goal scored in a game where the stadium was 'National Stadium, Warsaw'
select goal.player
from goal
join game
on goal.matchid=game.id
where game.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 goals scored only by non-German players in matches where GER was the id of either team1 or team2.
You can use teamid!='GER' to prevent listing German players.
You can use DISTINCT to stop players being listed twice.
select DISTINCT(goal.player)
from goal
join
game
on goal.matchid=game.id
where teamid !='GER' and (team1='GER'or team2='GER');
9、Show teamname and the total number of goals scored.
select eteam.teamname,count(teamid)
from eteam
join goal
on eteam.id=goal.teamid
group by teamname;
10、Show the stadium and the number of goals scored in each stadium.
select game.stadium,count(teamid)
from game
join goal
on game.id=goal.matchid
group by stadium;
11、For every match involving 'POL', show the matchid, date and the number of goals scored.
SELECT goal.matchid,game.mdate, COUNT(player) from goal join game on goal.matchid=game.id where team1 LIKE '%POL%' or team2 LIKE '%POL%' group by matchid,mdate;
12、For every match where 'GER' scored, show matchid, match date and the number of goals scored by 'GER'
select goal.matchid,game.mdate,count(player)
from goal
join game
on goal.matchid=game.id
where teamid LIKE'%GER%'
group by matchid,mdate;
13、List every match with the goals scored by each team as shown. This will use "CASE WHEN" which has not been explained in any previous exercises.
SELECT game.mdate,game.team1,
sum(case when teamid=team1 then 1 else 0 end) as score1,
game.team2,
sum(case when teamid=team2 then 1 else 0 end) as score2
from game
left join goal
on game.id=goal.matchid
group by mdate,matchid,team1,team2;
解题思路:
️game表和goal表的连接
️case when,判断,来得出score1,score2。
SQLZOO练习5--join(表的连接)的更多相关文章
- Oracle 表的连接方式(2)-----HASH JOIN的基本机制2
Hash算法原理 对于什么是Hash算法原理?这个问题有点难度,不是很好说清楚,来做一个比喻吧:我们有很多的小猪,每个的体重都不一样,假设体重分布比较平均(我们考虑到公斤级别),我们按照体重来分,划分 ...
- oracle 表连接 - hash join 哈希连接
一. hash 连接(哈希连接)原理 指的是两个表连接时, 先利用两表中记录较少的表在内存中建立 hash 表, 然后扫描记录较多的表并探測 hash 表, 找出与 hash 表相匹配的行来得到结果集 ...
- SQL 经典回顾:JOIN 表连接操作不完全指南
2017-02-23 小峰 ITPUB 点击上方“蓝字”可以关注我们哦  |转载自:码农网 |原文链接:www.codeceo.com/article/sql-join-guide.html ...
- EF的表左连接方法Include和Join
在EF中表连接常用的有Join()和Include(),两者都可以实现两张表的连接,但又有所不同. 例如有个唱片表Album(AlbumId,Name,CreateDate,GenreId),表中含外 ...
- sql Left right join 多表 注意表的连接顺序
多表左/右连接,表的连接顺序也可以影响查询速度 左连接时,应该把小表放在前面连接例子:A.B.C三表左连接情况1:A先和B连接,得到100条记录100条记录再和C左连接情况2:A先和C连接,得到50条 ...
- 数据库中的左连接(left join)和右连接(right join)区别
Left Join / Right Join /inner join相关 关于左连接和右连接总结性的一句话: 左连接where只影向右表,右连接where只影响左表. Left Join select ...
- ylb:多表的连接与练习(第三方关联表的应用)
ylbtech-SQL Server:SQL Server-多表的连接与练习(第三方关联表的应用) SQL Server 多表的连接与练习(第三方关联表的应用). 1,多表的连接与练习(第三方关联表的 ...
- hadoop大数据处理之表与表的连接
hadoop大数据处理之表与表的连接 前言: hadoop中表连接其实类似于我们用sqlserver对数据进行跨表查询时运用的inner join一样,两个连接的数据要有关系连接起来,中间必须有一个 ...
- 小谈SQL表的连接
简述SQL连接 SQL连接呢,主要分为以下几种内连接,左连接,右连接,全连接(当然还有很多官方的说法,这里就讲讲最常用的). 既然都叫连接了,那至少要有两个对象,也就是说,至少要有两个表,要怎么样的表 ...
随机推荐
- Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
错误描述 在DBeaver执行DDL语句时报错:SQL 错误 [1293] [HY000]: Incorrect table definition; there can be only one TIM ...
- mysql5.6 innodb_large_prefix引起的一个异常
phenomenon: Specified key was too long; max key length is 3072 bytes 在修改一个数据库字段时,字段容量被限制为了表前缀的大小而不是本 ...
- CSS书写及命名规范
1.样式书写顺序 positioning定位::position.display.float.top. right.bottom.left.overflow.clear.z-index: box mo ...
- 斯坦福NLP课程 | 第11讲 - NLP中的卷积神经网络
作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www. ...
- 好客租房25-react中的事件处理(事件对象)
3.2事件对象 可以通过事件处理程序的参数 React中的事件对象叫做:合成事件(对象) 合成事件:兼容所有浏览器 //导入react import React from 'react' ...
- C# 与LINQ有关的语言特性
1.隐式类型 我们知道强类型语言 C C++ C# Java 对变量的定义前必须要确定这个变量是什么类型的 例如 string str="abc"; int num ...
- Similarity calculation
推荐算法入门(相似度计算方法大全) 一.协同过滤算法简介 在推荐系统的众多方法之中,基于用户的协同过滤是诞最早的,原理也比较简单.基于协同过滤的推荐算法被广泛的运用在推荐系统中,比如影视推荐.猜你喜欢 ...
- GDKOI 2021 Day1 PJ 爆炸记
早上睡到 7:10 分才想起今天有 GDKOI ,赶紧去买了一个面包赶去机房 发现隔壁的大奆都过来了.比赛时由于昨晚一直没睡好,打了两个小时的哈欠 T1 :暴力模拟 根据 \(r\) 和 \(c\) ...
- 技术分享 | Appium 用例录制
原文链接 下载及安装 下载地址: https://github.com/appium/appium-desktop/releases 下载对应系统的 Appium 版本,安装完成之后,点击 " ...
- Python中的逻辑表达式
首先要明确一点,Python的逻辑运算符,可以用来操作任何类型的表达式(不局限于Bool类型),且运算后的结果也不一定是Bool类型的,而是其左右其中一个表达式的值 表达式1 and 表达式2 pyt ...