sql 多表多行模糊查询_从零开始学习SQL(五)多表查询
經過之前的學習,現在我們已經對查詢有了一定的了解,但是我們目前的所有查詢都只能找到在一張表中的數據,但如果我們需要尋找分布在多張表格中的數據時,這種之前的查詢就做不到了,這時就需要引入一種新的查詢方法,多表查詢。
一、聯結的介紹
還記得我們最開始數據庫結構中提到的聯結(JOIN)嗎?它就是我們用來連接多個表格的工具,當需要提取的數據分布在不同表格時。我們可以使用JOIN鏈接,多個數據庫關聯起來,
圖片來自猴子老師LIVE課程如圖所示這四張表格使用了JOIN相互連接,學生表學號與成績表學號連接,成績表課程號與課程表課程號連接,課程表教師號與教師表教師號連接,表之間的連接可以這樣寫
SELECT FROM 學生表 as a1 JOIN 成績表 as a2 ON a1.學號 = a2.學號 JOIN 課程表 as a3 /*如果需要關聯第三個表*/ ON a2.課程表 = a3.課程表在表和表之間使用 JOIN 來進行聯接,用來關聯的字段則寫在 ON 后面
二、聯結的種類
連接又分類幾個種類
1.交叉連接,交叉連接會將表中的每一行和另外一張表中的每一行合并在一起,結果的行數是兩張表行數的乘積(一共6行)。
2.內連接,內連接將兩張表中共有的數據相聯,如圖所示,我們可以看到通過學號相聯結的時學號0001為兩張表中共有的行,因此將學號為0001的列與成績表中0001的列相聯結。
3.左聯結/右聯結,左聯結會將左側表中的全部數據與右側表中的數據相聯結。右邊沒有的數據則用空值表示。右聯結則會將右側表中的全部數據與左側表中的數據相聯結,左邊表沒有的數據則為空值。
4.全聯結,全連接會將左右兩邊的值都進行合并,沒有值的行則會用空值表示
三、CASE表達式
CASE表達式可以用來解決復雜的問題
CASE WHEN<判斷表達式> THEN <表達式>WHEN<判斷表達式> THEN <表達式>WHEN<判斷表達式> THEN <表達式>.......ELSE ENDCASE表達式可以用來進行復雜的判斷,每一句CASE表達式都能進行一個判斷,當滿足這個條件時就會結束,如果不滿足這個條件則會繼續運行后面的WHEN語句,最后的語句都沒有找到符合條件的語句則會運行ELSE子句。
每一個CASE表達式都必須含有END
四、練習題
將分數分段并統計各分段的人數
SELECT c1.課程號,c2.課程名稱, SUM(CASE WHEN 成績 BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS '[85-70]', SUM(CASE WHEN 成績 BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS '[70-60]', SUM(CASE WHEN 成績 <60 THEN 1 ELSE 0 END) AS '[<60]' FROM score as c1 JOIN courser as c2 ON c1.課程號 = c2.課程號 GROUP BY c1.課程號The JOIN operation/zh?sqlzoo.net4.列出球員名字叫Mario (player LIKE 'Mario%')有入球的 隊伍1 team1, 隊伍2 team2 和 球員名 player
SELECT team1,team2,player FROM goal as c1 JOIN game as c2 ON id =matchid WHERE player LIKE 'Mario%'6.列出'Fernando Santos'作為隊伍1 team1 的教練的賽事日期,和隊伍名。
SELECT mdate,teamname FROM game as c1 JOIN eteam as c2 ON c1.team1 = c2.id WHERE coach = 'Fernando Santos'8.列出全部賽事,射入德國龍門的球員名字
SELECT DISTINCT(player) FROM game JOIN goal ON matchid = id WHERE (team1='GER' or team2='GER') AND teamid <> ('GER')12.每一場德國'GER'有參與的賽事中,列出賽事編號 matchid, 日期date 和德國的入球數字。
SELECT matchid,mdate,count(team1) FROM game AS c1 JOIN goal as c2 ON c2.matchid = c1.id WHERE (team1 = 'GER' OR team2 = 'GER') AND c2.teamid = 'GER' GROUP BY c2.matchid,mdatexietq:從零開始學習SQL(六)練習題目?zhuanlan.zhihu.com總結
以上是生活随笔為你收集整理的sql 多表多行模糊查询_从零开始学习SQL(五)多表查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python的缩进机制是其缺点之一_Py
- 下一篇: python获取div标签的id_Pyt