mysql語句內連接,左連接,右連接

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,不然會報錯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章