select b.name,avg(salary) as avg_salary from staff a
inner JOIN store b on a.store_id = b.store_id
group by b.name order by avg_salary desc;
select b.name,avg(salary) as avg_salary from staff a
left JOIN store b on a.store_id = b.store_id
group by b.name order by avg_salary desc;
select b.name,avg(salary) as avg_salary from staff a
RIGHT JOIN store b on a.store_id = b.store_id
group by b.name order by avg_salary desc;
上面分別是內連接,左連接,右連接。可以看出只有一個單詞不同。
這個語句的意思是查詢staff以及store表,根據2個表中store_id相同,並且根據商店名稱分組,最後按照平均薪資降序。
3種查詢結果可以看下圖。
可以看出內連接只會查出都有數據的部分,左連接會吧左表中所有的store_id都查出,右連接會把右表中的store_id都查出。
在這個示例中,左連接的Null這行數據表示,有員工沒有分配到具體的店鋪,但是這部分人的平均工資爲1萬元,右連接表示,有分店是沒有員工的,所以平均工資也爲Null。
其中內連接是默認的鏈接,也可以用這樣表示
select b.name,avg(salary) as avg_salary from staff a,store b
WHERE a.store_id = b.store_id group by b.name order by avg_salary desc;
或者不用簡寫
select store.name,avg(salary) as avg_salary from staff,store
WHERE staff.store_id = store.store_id group by store.name order by avg_salary desc;
注意,假如你使用了上面這種方法(即沒有使用inner join),關鍵字on 就需要換成where,不然會報錯。