兩個表
user.id user.name user.age
phones.id phones.phone_num phones.user_id
1. 簡單的左查詢
select phones.user_id,users.name,users.age from users Left JOIN phones on phones.user_id = users.id
因爲左查詢遍歷users表,而user表中有些用戶並未登記號碼,所以可能會出現空值情況,改善一下
select phones.user_id,users.name,users.age from users Left JOIN phones on phones.user_id = users.id where user_id is not Null
或者改成右查詢,即可
2.上面的語句如果要簡寫 phones.user_id 爲 b.user_id 的時候,請全部都改成a b的形式
3.至於inner join和cross join
cross join是笛卡爾積,理論上不應該支持on語法
如果非要解釋……那應該就是cross join先生成笛卡爾積然後過濾on,而inner join是直接基於on給的條件進行過濾
4.簡單的求和查詢
user.id+name
user_score.id+score
select a.name,sum(b.score) from user a join user_score b on a.id = b.id GROUP BY a.name
找出每個user.id分數的總和
name sum(b.score)
izaya 8
mcc 11
timer 23
5.講上列數據行和列調換顯示,大概爲:
izaya timer mcc
8 23 11
靈活使用join語句可以把列合併的原理(ps:默認join是內連)
select * from (
select sum(b.score) as 'newTimer' from user a join user_score b on a.id = b.id and name='timer' ) a
join
(select sum(b.score) as 'newMCc' from user a join user_score b on a.id = b.id and name='mcc') b
join
(select sum(b.score) as 'newIzaya' from user a join user_score b on a.id = b.id and name='izaya') c
from 後應該是表名,可是現在是查詢結果,所以用簡寫代替表明,此處簡寫abc是必需的。