oracle中l(wèi)eft outer join就是以左表作為基表來進行連接操作,連接的結(jié)果中一定會涵蓋基表中所有的列,,即使有某些列與右表找不到匹配關(guān)系。如下分別是city表和stds表中的數(shù)據(jù)截圖:
現(xiàn)在執(zhí)行以下語句:
現(xiàn)在我們假如要獲取sid不等于4的情況的左連接結(jié)果,那么有兩種選擇,,一種是在on中添加條件限制,,一種是在where中添加條件限制,我們現(xiàn)在來測試兩種結(jié)果是否相同,。 先執(zhí)行在on中添加條件,,執(zhí)行以下語句:
查看執(zhí)行結(jié)果,我們可以看到結(jié)果中仍然包括了基表,,也就是city表中的所有行,。然后再查看執(zhí)行計劃,可以看到先是ACCESS內(nèi)層的STDS表,,并且加上filter(SID<>4),,然后再和外層的CITY表進行左連接操作,所以仍然可以保證city表中每一行都在結(jié)果集中,。
再執(zhí)行where中添加條件,,執(zhí)行語句如下:
由于sql的執(zhí)行順序是先from得到源數(shù)據(jù),再where篩選數(shù)據(jù),,最后select投影數(shù)據(jù),。先join之后,結(jié)果集中應(yīng)該有
所以如果做左外連接時,,如果右表帶條件約束,,它把條件約束放在on中和where中得到的結(jié)果是不一樣的,這時需要根據(jù)自己的需求進行選擇,。
|
|