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

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

學生表:STUDENT

6條記錄,其中學生1與學生2是同班同學,學生6沒有對應的班級。

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

執行結果:



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

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

學生表:STUDENT

6條記錄,其中學生1與學生2是同班同學,學生6沒有對應的班級。

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

2、Inner Join(內連接)
執行代碼: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
執行結果:
返回 5 條記錄 ,學生表的CLASS_ID匹配班級表的CLASS_ID,符合條件的查詢出結果:

3、Left Join(左連接)注意:左連接“(+)”號在 右邊
執行代碼:
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(+)
執行結果:
返回 6 條記錄 ,執行可分解為兩步:
1、先將學生表的CLASS_ID匹配班級表的CLASS_ID查詢出來(此例為5條記錄)
2、再將左(Student)表中CLASS_ID 沒有匹配 右(CLASS)表CLASS_ID的記錄查詢出來(此例為1條記錄)

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

4、Right Join(右連接) 注意:右連接“(+)”號在 左邊
執行代碼:
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
執行結果:
返回 6 條記錄 ,執行可分解為兩步:
1、先將班級表的CLASS_ID匹配學生表的CLASS_ID查詢出來(此例為5條記錄)
1、先將班級表的CLASS_ID匹配學生表的CLASS_ID查詢出來(此例為5條記錄)
2、再將左(CLASS)表中CLASS_ID 沒有匹配 右(STUDENT)表CLASS_ID的記錄查詢出來(此例為1條記錄)

5、Full Out Join(全外連接)
執行代碼:
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
執行結果:
返回 7 條記錄 ,執行可分解為三步:
1、先將班級表的CLASS_ID匹配學生表的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 閱讀(201) 評論(0) 編輯 收藏 所屬分類: 數據庫