Oracle 聯(lián)合查詢
聯(lián)合查詢種類:
1、Cross Join(全連接)
2、Inner Join(內(nèi)連接)
3、Left Join(左連接)
4、Right Join(右連接)
準(zhǔn)備演示環(huán)境:
班級表:CLASS

5條記錄,5個唯一的班級,其中班級5中沒有學(xué)生。

學(xué)生表:STUDENT

6條記錄,其中學(xué)生1與學(xué)生2是同班同學(xué),學(xué)生6沒有對應(yīng)的班級。

那么Oracle中怎么實(shí)現(xiàn)五類聯(lián)合查詢呢?它們是什么意思呢?
執(zhí)行結(jié)果:
返回 30 條記錄 ,將 學(xué)生表的總條數(shù)(6 ROWS) 乘以 班級表的總條數(shù)(5 ROWS)(笛卡兒集):

執(zhí)行結(jié)果:



2、Inner Join(內(nèi)連接)
3、Left Join(左連接)
4、Right Join(右連接)
5、Full Out Join(全外連接)
準(zhǔn)備演示環(huán)境:
班級表:CLASS

5條記錄,5個唯一的班級,其中班級5中沒有學(xué)生。

學(xué)生表:STUDENT

6條記錄,其中學(xué)生1與學(xué)生2是同班同學(xué),學(xué)生6沒有對應(yīng)的班級。

那么Oracle中怎么實(shí)現(xiàn)五類聯(lián)合查詢呢?它們是什么意思呢?
1、Cross Join(全連接)
代碼語句:1 SELECT * FROM STUDENT STU , CLASS CLS
執(zhí)行結(jié)果:
返回 30 條記錄 ,將 學(xué)生表的總條數(shù)(6 ROWS) 乘以 班級表的總條數(shù)(5 ROWS)(笛卡兒集):

2、Inner Join(內(nèi)連接)
執(zhí)行代碼:1 SELECT * FROM STUDENT STU
2 , CLASS CLS
3 WHERE STU.CLASS_ID = CLS.CLASS_ID
2 , CLASS CLS
3 WHERE STU.CLASS_ID = CLS.CLASS_ID
執(zhí)行結(jié)果:
返回 5 條記錄 ,學(xué)生表的CLASS_ID匹配班級表的CLASS_ID,符合條件的查詢出結(jié)果:

3、Left Join(左連接)注意:左連接“(+)”號在 右邊
執(zhí)行代碼:
1 SELECT * FROM STUDENT STU
2 , CLASS CLS
3 WHERE STU.CLASS_ID = CLS.CLASS_ID(+)
2 , CLASS CLS
3 WHERE STU.CLASS_ID = CLS.CLASS_ID(+)
執(zhí)行結(jié)果:
返回 6 條記錄 ,執(zhí)行可分解為兩步:
1、先將學(xué)生表的CLASS_ID匹配班級表的CLASS_ID查詢出來(此例為5條記錄)
2、再將左(Student)表中CLASS_ID 沒有匹配 右(CLASS)表CLASS_ID的記錄查詢出來(此例為1條記錄)

1、先將學(xué)生表的CLASS_ID匹配班級表的CLASS_ID查詢出來(此例為5條記錄)
2、再將左(Student)表中CLASS_ID 沒有匹配 右(CLASS)表CLASS_ID的記錄查詢出來(此例為1條記錄)

4、Right Join(右連接) 注意:右連接“(+)”號在 左邊
執(zhí)行代碼:
1 SELECT * FROM STUDENT STU
2 , CLASS CLS
3 WHERE STU.CLASS_ID(+) = CLS.CLASS_ID
2 , CLASS CLS
3 WHERE STU.CLASS_ID(+) = CLS.CLASS_ID
執(zhí)行結(jié)果:
返回 6 條記錄 ,執(zhí)行可分解為兩步:
1、先將班級表的CLASS_ID匹配學(xué)生表的CLASS_ID查詢出來(此例為5條記錄)
1、先將班級表的CLASS_ID匹配學(xué)生表的CLASS_ID查詢出來(此例為5條記錄)
2、再將左(CLASS)表中CLASS_ID 沒有匹配 右(STUDENT)表CLASS_ID的記錄查詢出來(此例為1條記錄)

5、Full Out Join(全外連接)
執(zhí)行代碼:
1 SELECT * FROM STUDENT STU
2 FULL OUTER JOIN CLASS CLS
3 ON STU.CLASS_ID = CLS.CLASS_ID
2 FULL OUTER JOIN CLASS CLS
3 ON STU.CLASS_ID = CLS.CLASS_ID
執(zhí)行結(jié)果:
返回 7 條記錄 ,執(zhí)行可分解為三步:
1、先將班級表的CLASS_ID匹配學(xué)生表的CLASS_ID查詢出來(此例為5條記錄)
2、再將左(Student)表中CLASS_ID 沒有匹配 右(CLASS)表CLASS_ID的記錄查詢出來(此例為1條記錄)
3、再將左(CLASS)表中CLASS_ID 沒有匹配 右(STUDENT)表CLASS_ID的記錄查詢出來(此例為1條記錄)

posted on 2014-05-10 18:37 00001000 閱讀(200) 評論(0) 編輯 收藏 所屬分類: 數(shù)據(jù)庫