A加油卡表:
id, userName, cardNo
1 aaa 111
2 bbb 111
3 aaa 222
B加油記錄表:
id, number, userName , cardNo,
1 1234 aaa 111
2 234 bbb 111
left join:
select * from B b left join A a on a.userName = b.userName where b.userName=aaa
由于上面sql中,on后面的條件,userName在A表中對應(yīng)多條,而不是對應(yīng)一條,結(jié)果集就是笛卡爾積。B表中的1條滿足剩余A表中的2條滿足。結(jié)果為2條。
select * from B b left join A a on a.userName = b.userName and a.cardNo = b.cardNo where b.userName=aaa
由于上面sql中,on后面的兩個條件在A表中只能找到一條唯一數(shù)據(jù),所以結(jié)果就是B表中有多少條數(shù)據(jù)滿足where,結(jié)果集就返回多少條數(shù)據(jù)。這里是返回一條數(shù)據(jù)
right join:
下面這個sql與上面的left join效果一樣:
select * from A a right join B b on a.userName = b.userName and a.cardNo = b.cardNo where b.userName=aaa
inner join:
select * from A a inner join B b on a.userName = b.userName and a.cardNo = b.cardNo where a.userName=aaa
還是首先看on后面的條件,如果A表中的一條數(shù)據(jù)對應(yīng)on的兩個條件在B中只有一條數(shù)據(jù),則返回滿足where條件的2條數(shù)據(jù)。
select * from B b inner join A a on a.userName = b.userName and a.cardNo = b.cardNo where a.userName=aaa
以上總結(jié)一條:看on后面的條件,在被關(guān)聯(lián)表中的數(shù)據(jù)是一條還是多條。
更多相關(guān)問題請訪問:MySQL視頻教程
以上就是mysql的left join、right join、inner join的詳細(xì)內(nèi)容,更多請關(guān)注其它相關(guān)文章!