SQL语句值left join,right join,inner join的用法
sql語句中兩表連結(jié)方式主要有一下3中,需要注意的時在進(jìn)行多表連結(jié)的時候必須要用 on 指定表中的某個字段作為連結(jié)的條件
left join(左聯(lián)接) 返回包括左表中的所有記錄和右表中聯(lián)結(jié)字段相等的記錄 -----結(jié)果集的條目數(shù)以左表為準(zhǔn)
right join(右聯(lián)接) 返回包括右表中的所有記錄和左表中聯(lián)結(jié)字段相等的記錄------結(jié)果集的條目數(shù)以右表為準(zhǔn)
inner join(等值連接) 只返回兩個表中聯(lián)結(jié)字段相等的行------結(jié)果集的條目數(shù)為聯(lián)結(jié)字段相等的行數(shù)
看一下例子
Table_1
1??????? ??? ?t1?????? ??? ?張三?????? ??? ?男??????? ?
2??????? ??? ?t1?????? ??? ?小白?????? ??? ?女??????? ?
3??????? ??? ?t1?????? ??? ?王子?????? ??? ?男??????? ?
4??????? ??? ?t1?????? ??? ?王小?????? ??? ?女??????? ?
5??????? ??? ?t1?????? ??? ?李白?????? ??? ?男??????? ?
6??????? ??? ?t1?????? ??? ?趙虎?????? ??? ?男??????? ?
7??????? ??? ?t1?????? ??? ?張果?????? ??? ?女????????
-----------------------------------------------------------------------------------------
Table_2
1??????? ??? ?t2?????? ??? ?王五?????? ?
2??????? ??? ?t2?????? ??? ?小五?????? ?
4??????? ??? ?t2?????? ??? ?王五?????? ?
5??????? ??? ?t2?????? ??? ?趙雪?????? ?
8??????? ??? ?t2?????? ??? ?張龍???????
??
------------------------------------------------------------------------------------------
left join
select * from Table_1 left join Table_2 on Table_1.ID = Table_2.ID
結(jié)果是:
1??????? ??? ?t1?????? ??? ?張三?????? ??? ?男??????? ??? ?1??????? ??? ?t2?????? ??? ?王五?????? ?
2??????? ??? ?t1?????? ??? ?小白?????? ??? ?女??????? ??? ?2??????? ??? ?t2?????? ??? ?小五?????? ?
3??????? ??? ?t1?????? ??? ?王子?????? ??? ?男??????? ??? ?NULL?? ?NULL?? ?NULL
4??????? ??? ?t1?????? ??? ?王小?????? ??? ?女??????? ??? ?4??????? ??? ?t2?????? ??? ?王五?????? ?
5??????? ??? ?t1?????? ??? ?李白?????? ??? ?男??????? ??? ?5??????? ??? ?t2?????? ??? ?趙雪?????? ?
6??????? ??? ?t1?????? ??? ?趙虎?????? ??? ?男??????? ??? ?NULL?? ?NULL?? ?NULL
7??????? ??? ?t1?????? ??? ?張果?????? ??? ?女??????? ??? ?NULL?? ?NULL?? ?NULL
--------------------------------------------------------------------------------------------
right join
SELECT * FROM Table_1 right join Table_2 on Table_1.ID = Table_2.ID
結(jié)果是:
1??????? ??? ?t1?????? ??? ?張三?????? ??? ?男??????? ??? ?1??????? ??? ?t2?????? ??? ?王五?????? ?
2??????? ??? ?t1?????? ??? ?小白?????? ??? ?女??????? ??? ?2??????? ??? ?t2?????? ??? ?小五?????? ?
4??????? ??? ?t1?????? ??? ?王小?????? ??? ?女??????? ??? ?4??????? ??? ?t2?????? ??? ?王五?????? ?
5??????? ??? ?t1?????? ??? ?李白?????? ??? ?男??????? ??? ?5??????? ??? ?t2?????? ??? ?趙雪?????? ?
NULL?? ?? NULL?? ?? NULL?? ????? NULL?? ? ? ? 8??????? ??? ?t2?????? ??? ?張龍???????
--------------------------------------------------------------------------------------------
inner join
select * from Table_1 inner join Table_2 on Table_1.ID=Table_2.ID
結(jié)果是:
1??????? ??? ?t1?????? ??? ?張三?????? ??? ?男??????? ??? ?1??????? ??? ?t2?????? ??? ?王五?????? ?
2??????? ??? ?t1?????? ??? ?小白?????? ??? ?女??????? ??? ?2??????? ??? ?t2?????? ??? ?小五?????? ?
4??????? ??? ?t1?????? ??? ?王小?????? ??? ?女??????? ??? ?4??????? ??? ?t2?????? ??? ?王五?????? ?
5??????? ??? ?t1?????? ??? ?李白?????? ??? ?男??????? ??? ?5??????? ??? ?t2?????? ??? ?趙雪???????
----------------------------------------------------------------------------------------------
?總結(jié):left join與right join 的區(qū)別主要是在于基礎(chǔ)表是左表還是右表,對于不滿足基礎(chǔ)表聯(lián)結(jié)字段的行將會有null填充 ??
?語法:from Table_1 LEFT JOIN Table_2 ON Table_1.columnName compopr Table_2.columnName
columnName必須有相同的數(shù)據(jù)類型及包含相同類型的數(shù)據(jù),但它們不需要有相同的名稱。
compopr指定的運(yùn)算符有:"=", "<", ">", "<=", ">=" 或 "<>"
----------------------------------------------------------------------------------------------
這次先分享到這里,有不完整之處還請廣大網(wǎng)友進(jìn)行補(bǔ)充,過段時間再分享多表聯(lián)結(jié)查詢不重復(fù)的數(shù)據(jù)
總結(jié)
以上是生活随笔為你收集整理的SQL语句值left join,right join,inner join的用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。