數(shù)據(jù)庫常見的join方式有三種:inner join, left outter join, right outter join(還有一種full join,因不常用,本文不討論)。這三種連接方式都是將兩個(gè)以上的表通過on條件語句,拼成一個(gè)大表。以下是它們的共同點(diǎn): 1. 關(guān)于左右表的概念。左表指的是在SQL語句中排在left join左邊的表,右表指的是排在left join右邊的表。
inner join 格式:select * from 部門 inner join 組織 on 部門.組織編號(hào) = 組織.編號(hào) 目的:將兩表中符合on條件的所有記錄都找出來。 規(guī)律: 1. 拼出的大表記錄不會(huì)增加。 典型應(yīng)用:將存在多關(guān)系的引用表放在左表,將存在一關(guān)系的被引用表放在右表,通過=號(hào)將主外鍵進(jìn)行連接,通過對右表設(shè)定過濾條件,選出相應(yīng)的且主鍵唯一的左表記錄。 備注:inner join 是默認(rèn)的連接方式,可縮寫為join。 轉(zhuǎn)化為where子句: select * from 部門, 組織 where 部門.組織編號(hào) = 組織.編號(hào)
left outter join 格式: select * from 部門 left join 組織 on 部門.組織編號(hào) = 組織.編號(hào) 格式: select * from 組織 left join 部門 on 組織.編號(hào) = 部門.組織編號(hào) 目的:將左表的所有記錄列出,右表中只要符合on條件的,與左表記錄相拼合,不符合條件的,填以null值。 規(guī)律: 1. 選出所有符合條件的左表,如果左邊與右表的關(guān)系是一對一的關(guān)系,則拼成的大表記錄不會(huì)改變。 典型應(yīng)用:將存在多關(guān)系的引用表放在左表,將存在一關(guān)系的被引用表放在右表,通過對右表設(shè)定過濾條件,選出相應(yīng)的且主鍵唯一的左表記錄。 備注:left outter join可用left join代替。在有些數(shù)據(jù)庫中,如HSqlDb, 只能使用left join而不能使用left outter join。 轉(zhuǎn)化為where子句: select * from 部門, 組織 where 部門.組織編號(hào) = 組織.編號(hào)
格式: select * from 部門 right join 組織 on 部門.組織編號(hào) = 組織.編號(hào) 格式: select * from 組織 right join 部門 on 部門.組織編號(hào) = 組織.編號(hào) 目的:將右表的所有記錄列出,左表中只要符合on條件的,與右表記錄相拼合,不符合條件的,填以null值。 規(guī)律:(與left outter join相反) 典型應(yīng)用:可轉(zhuǎn)化成left outter join。例如 select * from 組織 right join 部門 on 部門.組織編號(hào) = 組織.編號(hào) 備注:right outter join可用right join代替。在有些數(shù)據(jù)庫中,如HSqlDb, 沒有實(shí)現(xiàn)right join功能。 轉(zhuǎn)化為where子句: select * from 部門, 組織 where 部門.組織編號(hào) = 組織.編號(hào) |
|