1. 程式人生 > >Mysql學習過程中的一點記錄(行列調換)

Mysql學習過程中的一點記錄(行列調換)

兩個表 

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是必需的。