mysql 两张表合并查询_中级数据分析-多表查询
- 表的加法
- 表的聯結
- 聯結應用案例
- case應用案例
一、表的加法
加法:union
表的加法是把兩個表的數據,按行合并在一起。
表的加法,會把兩個表里重復的數據刪除,只保留一個。
如果想保留重復數據,可以使用 union all
這樣就保留了全部的重復數據
二、表的聯結
- 交叉聯結
- 內聯結
- 左聯結
- 右聯結
- 全聯結
(1)交叉聯結-cross join
交叉聯結也叫作 笛卡爾積
(2) 內聯結 - inner join
內聯結 是同時查找出存在于兩張表中的數據
內聯結步驟:根據條件,從兩張表中找出符合條件的行,再通過交叉聯結合并
寫法:
結果:
(3) 左聯結 - left join
左聯結是把左邊表中的數據,全部取出來
左聯結步驟:將左側的表作為主表,主表中的數據全部讀取出來。再根據條件,取出右邊表中符合條件的行,通過交叉聯結合并。
寫法:
結果:
下面我們來看個問題,下圖中,紅色的部份如何用SQL表示出來,
寫法:
結果:
(4) 右聯結 - right join
右聯結是把右邊表中的數據,全部取出來
右聯結步驟:將右側的表作為主表,主表中的數據全部讀取出來。再根據條件,取出左邊表中符合條件的行,通過交叉聯結合并。
寫法:
結果:
下面我們來看個問題,下圖中,紅色的部份如何用SQL表示出來,
寫法:
結果:
本次結果,因為右邊score表中,所有數據在左表中都存在,所以結果為空。
(5) 全聯結 - full join
全聯結步驟:返回左邊和右表所有的行。當條件匹配時,兩個行進行合并,如果不匹配,另一個表中對應的值用空值來填充。
需要注意下,mysql是不支持全聯結的,這里理解下概念即可。
三、總結-一張表記住所有聯結
四、聯結應用案例
- 問題1:查詢所有學生的學號、姓名、選課數、總成績
寫法:
結果:
- 問題2:查詢平均成績大于85分的所有學生的學號、姓名和平均成績
寫法:
結果:
- 問題3:查詢學生的選課情況: 學號, 姓名, 課程號, 課程名稱
這里涉及到3張表的聯結了
寫法:
結果:
五、case表達式
案例:
下面我們要來看一下,查詢每門課程的及格和不及格人數。我們按照課程號分組,但是每門課程對應的不是一個值,而是兩個值:及格和不及格。相當于兩種情況,這樣的問題就可以用case表達式來實現。
寫法:
使用case表達式注意事項:
(1)else子句可以省略,會默認為空值但為了更好的書寫習慣,最好還是保留
(2)end不能省略不寫
(3) case表達式可以寫在sql語句的任意子句里
case表達式的作用:當有多種情況需要條件判斷時,就可以使用case表達式
下面我們再來看一個案例
- 使用分段[100-85],[85-70],[70-60],[<60]來統計各科成績,分別統計:各分數段人數,課程號和課程名稱。
分析:這里要用到兩個表,課程表和成績表
寫法:
這里為什么要使用兩個列來分組呢。因為使用group by時,select子句里面的列名,只能是group by 里面的列名,或者使用聚合函數的。
總結
以上是生活随笔為你收集整理的mysql 两张表合并查询_中级数据分析-多表查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无保户是什么意思 什么是五保户
- 下一篇: linux cmake编译源码,linu