假設SQL如下:

對于外連接配接,有一個主表的概念,即left的左邊表或者right的右邊表,對于主表,會傳回主表所有符合條件的記錄行,而對于副表,則隻傳回能和主表關聯的行,一條主表記錄根據on條件和副表内每一行比對,有多少行比對上了就生成多少臨時表的記錄,也就是說主表的一行記錄可能生成臨時表的多條記錄,若副表中沒有比對行時,則副表生成一條所有字段均為null的記錄和主表的記錄行比對, 確定主表的符合條件的行能進入臨時表。
對于外連接配接,大部分情況會以我們的SQL順序來執行,因為有主表的結果集限制,上述SQL一般會先根據WHERE條件從A表重 查詢出符合條件的記錄行,作為主表和B表以ON條件關聯,A結果集中的每條記錄均和B表中符合條件的每條記錄行生成AB臨時表的一條記錄,若B表有多個符合記錄行,則生成多個臨時表行,若B表沒有符合條件的行,則生成一條所有字段均為null的行與A的記錄行連接配接,若沒有ON條件,則以“笛卡爾積”的形式連接配接,即A結果集的每一行和B表的每一行均連接配接生成臨時表的記錄。
當ON執行完之後,同樣用WHERE條件過濾臨時結果集中不符合條件的記錄行,和内連接配接的機制相同,之後再次關聯其他表。最後right join D,此時D表時主動表,D表關聯A,B,C查詢後的臨時表,最終會傳回D表中所有符合條件的記錄行。
以上就是nest loop join機制,嵌套循環連接配接。一層一層的連接配接,循環用外層結果集的記錄行和内層的所有符合條件ON條件的記錄依次連接配接,内層沒有符合條件的生成所有字段為null的記錄行,當不存在ON條件是以“笛卡爾積”的形式連接配接。連接配接過後where過濾,再連接配接,在過濾,直到左右表均連接配接完畢。連接配接完畢後有group by字句則執行分組,有having字句的則對分組後的結果集再過濾,是以having執行在where之後,是以有些條件放where字句内能縮小分組前的結果集,提高執行效率。之後還有order by字句的則執行排序,最後得到查詢的結果。