The JOIN operation/zh

http://sqlzoo.net/wiki/The_JOIN_operation/zh


Game (id , mdate ,stadium , team1 , team2)

Goal (matched ,teamid , player , gtime )

Eteam ( id ,teamname , coach )



1、第一個(gè)例子列出球員姓氏為'Bender'的入球數(shù)據(jù)。 * 表示列出表格的全部欄位,簡化了寫matchid, teamid, player,

gtime語句。修改此SQL以列出 賽事編號matchid 和球員名 player ,該球員代表德國隊(duì)Germany入球的。要找出德國隊(duì)球員,要檢查: teamid = 'GER'


Select matchid,player from goal

Where teamid = 'GER'


2.由以上查詢,你可見Lars Bender's 於賽事 1012入球。.現(xiàn)在我們想知道此賽事的對賽隊(duì)伍是哪一隊(duì)。留意在 goal 表格中的欄位 matchid ,是對應(yīng)表格game的欄位id。我們可以在表格game中找出賽事1012的資料。只顯示賽事1012的id, stadium, team1, team2


Select id,stadium,team1,team2 from game

Where id=1012


3.我們可以利用JOIN來同時(shí)進(jìn)行以上兩個(gè)步驟。

SELECT *

? FROM game JOINgoal ON (id=matchid)

語句FROM 表示合拼兩個(gè)表格game 和 goal的數(shù)據(jù)。語句 ON表示如何找出 game中每一列應(yīng)該配對goal中的哪一列 -- goal的 id 必須配對game的 matchid 。 簡單來說,就是ON (game.id=goal.matchid)。


以下SQL列出每個(gè)入球的球員(來自goal表格)和場館名(來自game表格),修改它來顯示每一個(gè)德國入球的球員名,隊(duì)伍名,場館和日期。


解題:原題要求顯示出每一個(gè)德國入球的球員名、隊(duì)伍名、場館和日期。


Select goal.player,goal.teamid,game.stadium,game.mdate

From game joingoal

On goal.matchid =game.id? and goal.teamid='GER'

或者

SELECTplayer,goal.teamid,stadium,mdate?

? FROM game JOIN goal

ONgoal.matchid=game.id and goal.teamid = 'GER'



4.使用上題相同的 JOIN語句,列出球員名字叫Mario (player LIKE 'Mario%')有入球的隊(duì)伍1 team1, 隊(duì)伍2 team2 和 球員名player


Select game.team1, game .team2,goal.player

From game joingoal

On goal.playerlike 'Mario%'AND game.id=goal.matchid



5.表格eteam 貯存了每一國家隊(duì)的資料,包括教練。你可以使用語句 goal JOIN eteam on teamid=id來合拼 JOIN 表格goal 到 表格eteam。列出每場球賽中首10分鐘gtime<=10有入球的球員 player, 隊(duì)伍teamid, 教練coach, 入球時(shí)間gtime。


Selectgoal.player,goal.teamid,eteam.coach,goal.gtime

From goal joineteam

Oneteam.id=goal.teamid and goal.gtime<=10


6.列出'Fernando Santos'作為隊(duì)伍1 team1 的教練的賽事日期,和隊(duì)伍名。


Select game.mdate,eteam.teamname

From game joineteam

On coach='Fernando

Santos'and eteam.id=team1



7、列出場館 'National Stadium, Warsaw'的入球球員。

Select player

From game join goal

On stadium='National Stadium, Warsaw' and game.id=matched



8.以下例子找出德國-希臘Germany-Greece的八強(qiáng)賽事的入球

修改它,只列出全部賽事,射入德國龍門的球員名字。


Select distinct(player),matchid

from goal joingame

On matchid =game.id and teamid!='GER'and (team1='GER' or team2='GER')


說明:求射入德國球門的球員名字,則參賽兩隊(duì)必然有一方為“德國”,其次射入德國球門的球員必然不是“德國”對的,應(yīng)該是“德國”隊(duì)的對手,所以入球球員的隊(duì)伍編號不能為“德國”“GER”,所以必須加上條件 teamid!=“GER”


9.列出隊(duì)伍名稱 teamname 和該隊(duì)入球總數(shù)


SELECTteamname,count(player)

From eteam leftjoin goal

On eteam.id=teamid

Group by teamname


10.列出場館名和在該場館的入球數(shù)字。


Selectstadium,count(player)

From game leftjoin goal

On game.id=matchid

Group by stadium



11.每一場波蘭'POL'有參與的賽事中,列出賽事編號 matchid, 日期date 和入球數(shù)字。

Selectmatchid,mdate,count(PLAYER)

From game joingoal

On matchid=game.idand (team1='pol'or team2='pol')

Group bymatchid,MDATE


說明:根據(jù)原題,但凡有波蘭參加的比賽,列出賽事編號、日期和入球次數(shù),注意此處入球方可以不是波蘭隊(duì)自己。



12.每一場德國'GER'有參與的賽事中,列出賽事編號 matchid, 日期date 和德國的入球數(shù)字。

selectmatchid,mdate,count(teamid)

FROM game innerjoin goal

ongame.id=goal.matchid and(team1='ger'or team2='ger') and teamid='GER'

group bymatchid,mdate

說明:原題要求列出的是德國的入球次數(shù),所以此處必須添加條件teamid=’ger’

13.疑問待解

Listevery match with the goals scored by each team as shown. This will use"CASE WHEN" which has not been explained in any previous exercises.

mdate?? team1?? score1?? team2?? score2

1 July2012? ESP 4???? ITA? 0

10 June2012????? ESP 1???? ITA? 1

10 June2012????? IRL? 1???? CRO????? 3

...

Noticein the query given every goal is listed. If it was a team1 goal then a 1appears in score1, otherwise there is a 0. You could SUM this column to get acount of the goals scored by team1. Sort your result by mdate, matchid, team1and team2.


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • The Inner Game of Tennis W Timothy Gallwey Jonathan Cape ...
    網(wǎng)事_79a3閱讀 12,976評論 3 20
  • 自己最普通,但自己可以不同,這個(gè)社會(huì)需要的是什么,我還不知道,但學(xué)習(xí)的能力你必須有,這是你獲得技能的關(guān)鍵所在,態(tài)度...
    庫昊已用閱讀 179評論 0 0
  • 方向很重要,認(rèn)準(zhǔn)了就努力前行吧,每一天都是生命中最年輕的時(shí)刻,堅(jiān)持走就一定會(huì)到達(dá)遠(yuǎn)方。
    花汀閱讀 236評論 0 0
  • 夏目漱石的貓 蜷縮在我的腳下 聽他講著故事 我開始有些奇怪 我怎么突然間能聽懂貓的語言 當(dāng)我聽到精彩的地方 我情不...
    利君理療閱讀 310評論 0 0
  • 倉央嘉措問佛“世間為什么有那么多遺憾?” 佛曰:婆娑即遺憾。 日子總過的那么快,陰雨的冬季也是快速的掠了一下大地就...
    上山當(dāng)和尚閱讀 1,562評論 0 1

友情鏈接更多精彩內(nèi)容