Oracle内連接配接:兩張表通過某個字段進行内關聯,查詢結果是通過該字段按關系運算符比對出的資料行。其中可以包括:
1、等值連接配接:在連接配接條件中使用等于号(=)運算符比較被連接配接列的列值,其查詢結果中列出被連接配接表中的所有列。
2、不等連接配接:在連接配接條件使用除等于運算符以外的其它比較運算符比較被連接配接的列的列值,這些關系運算符包括>、>=、<=、!>、!。
案例所需表結構:學生資訊系統。
案例1、查詢學生資訊表(stuinfo)的學生資訊,關聯查詢該學生的班級資訊(class)。
代碼如下:select a.stuid,
a.stuname,
a.classno,
b.classno,
b.classname,
b.monitorid,
b.monitorname,
b.classaddress
from stuinfo a, class b
where a.classno = b.classno;
結果如下:
外連接配接:
外連接配接,傳回到查詢結果集合中的不僅包含符合連接配接條件的行,而且還包括左表(左外連接配接或左連接配接))、右表(右外連接配接或右連接配接)或兩個邊接表(全外連接配接)中的所有資料行。
1、left join(左聯接)等價于(left outer join)傳回包括左表中的所有記錄和右表中聯結字段相等的記錄。
2、right join(右聯接)等價于(right outer join)傳回包括右表中的所有記錄和左表中聯結字段相等的記錄。
3.、full join (全連接配接)等價于(full outer join)查詢結果等于左外連接配接和右外連接配接的和。
下面案例利用學生資訊表(stuinfo)和之前的備份表(stuinfo_2018)做案例解析:
stuinfo表資料:
stuinfo_2018表資料:
案例2、left join(左聯接)
代碼:--左外連接配接(stuinfo表中資料都存在,stuinfo_2018不在stuinfo中存在的學生相關字段為null值)
select a.*, b.stuid, b.stuname
from stuinfo a
left join stuinfo_2018 b
on a.stuid = b.stuid;
--左外連接配接(利用(+)在右邊)另外一種寫法
select a.*, b.stuid, b.stuname
from stuinfo a,stuinfo_2018 b
where a.stuid=b.stuid(+);
結果如下:
案例3、right join(右連接配接)
代碼:--右外連接配接(stuinfo_2018表中資料都存在,stuinfo不在stuinfo_2018存在的學生相關字段為null值)
select a.*, b.stuid, b.stuname
from stuinfo a
right join stuinfo_2018 b
on a.stuid = b.stuid;
--右外連接配接(利用(+)在左邊)另外一種寫法
select a.*, b.stuid, b.stuname
from stuinfo a,stuinfo_2018 b
where a.stuid(+)=b.stuid;
結果如下:
案例4、full join(全外連接配接)
代碼:--(全外連接配接(stuinfo、stuinfo_2018表中資料都存在,
--stuinfo不在stuinfo_2018存在的學生相關字段為null值,
--stuinfo_2018不在stuinfo存在的學生相關字段為null值)
select a.*, b.stuid, b.stuname
from stuinfo a
full join stuinfo_2018 b
on a.stuid = b.stuid;
結果如下: