ads 728x90 B

(ORA-00021) - JOIN

Join in Oracle
Sự khác biệt của các loại Join trong Oracle?
Join dùng để lấy dữ liệu từ nhiều bảng. Join được thực hiện bất cứ khi nào có hai hoặc nhiều bảng được kết nối trong một câu lệnh SQL. Có nhiều loại Join khác nhau:
1. Cross Join (hoặc đôi lúc còn được gọi là Cartesian Join)
2. Inner Join (Simple Join)
3. Outer Join
Outer Join được chia thành:
- Left Outer Join (Left Join)
- Right Outer Join (Right Join)
- Full Outer Join (Full Join)

1. Cross Join (Cartesian Join)
Cross Join sẽ lấy ra m*n hàng với: m là số lượng hàng trong bảng trái, n là số lượng hàng trong bảng phải.
Ví dụ:
SQL> SELECT * FROM DUP_TEST;

        ID NAME     
---------- ----------
       102 Yasuo    
       103 Jinx     
       103 Jinx     
       103 Jinx     
       104 Messi    
       106 Ronaldo  
       105 Alistar  
       105 Alistar  

8 rows selected.


SQL> SELECT * FROM WILDCARDS;

WILDCARD_ID WILDCARD_VALUE
----------- --------------
          8            255
          9            127
         10             63
         11             31
         12             15
         13              7
         14              3
         15              1
         16            255
         17            127
         18             63
         19             31
         20             15
         21              7
         22              3
         23              1
         24            255

17 rows selected.


SQL> SELECT * FROM DUP_TEST CROSS JOIN WILDCARDS;

        ID NAME       WILDCARD_ID WILDCARD_VALUE
---------- ---------- ----------- --------------
       102 Yasuo                8            255
       102 Yasuo                9            127
       102 Yasuo               10             63
       102 Yasuo               11             31
       102 Yasuo               12             15
       102 Yasuo               13              7
       102 Yasuo               14              3
       102 Yasuo               15              1
       102 Yasuo               16            255
       102 Yasuo               17            127
       102 Yasuo               18             63 

................................................
................................................
................................................ 
       105 Alistar             20             15
       105 Alistar             21              7
       105 Alistar             22              3
       105 Alistar             23              1
       105 Alistar             24            255

136 rows selected.
hoặc
SQL> SELECT * FROM DUP_TEST, WILDCARDS;
        ID NAME       WILDCARD_ID WILDCARD_VALUE
---------- ---------- ----------- --------------
       102 Yasuo                8            255
       102 Yasuo                9            127
       102 Yasuo               10             63
       102 Yasuo               11             31
       102 Yasuo               12             15
       102 Yasuo               13              7
       102 Yasuo               14              3
       102 Yasuo               15              1
       102 Yasuo               16            255
       102 Yasuo               17            127
       102 Yasuo               18             63 

................................................
................................................
................................................ 
       105 Alistar             20             15
       105 Alistar             21              7
       105 Alistar             22              3
       105 Alistar             23              1
       105 Alistar             24            255

136 rows selected.
2. Inner Join (Simple Join)
Đây là loại Join được dùng phổ biến nhất. Inner Join trả ra tất cả các hàng đều thỏa mảng điều kiện giao nhau.
Ví dụ:

SQL> SELECT T1.ID, T2.JNAME FROM DUP_TEST T1 
     INNER JOIN JOIN_TEST T2 ON T1.ID = T2.JID;

        ID JNAME              
---------- --------------------
       102 Inner Join         
       103 Left Join          
       103 Left Join          
       103 Left Join          
       104 Right Join         
       105 Full Join          
       105 Full Join          

7 rows selected.
hoặc
SQL> -- Old Syntax
     SELECT T1.ID, T2.JNAME FROM DUP_TEST T1, JOIN_TEST T2
     WHERE T1.ID = T2.JID;

        ID JNAME              
---------- --------------------
       102 Inner Join         
       103 Left Join          
       103 Left Join          
       103 Left Join          
       104 Right Join         
       105 Full Join          
       105 Full Join          

7 rows selected.
3. Left Outer Join (Left Join)
Left Outer Join trả ra tất cả các hàng của bảng trái và một số hàng thỏa mãn điều kiện join của bảng phải. Nếu một giá trị trong điều kiện join của bảng phải không tồn tại thì giá trị của cột trả ra của bảng phải là null.
SQL> SELECT T1.ID, T1.NAME, T2.JNAME FROM DUP_TEST T1 
     LEFT JOIN JOIN_TEST T2 ON T1.ID = T2.JID;

        ID NAME       JNAME              
---------- ---------- --------------------
       102 Yasuo      Inner Join         
       103 Jinx       Left Join          
       103 Jinx       Left Join          
       103 Jinx       Left Join          
       104 Messi      Right Join         
       105 Alistar    Full Join          
       105 Alistar    Full Join          
       106 Ronaldo                       

8 rows selected.


SQL> -- Old Syntax
     SELECT T1.ID, T1.NAME, T2.JNAME
     FROM DUP_TEST T1, JOIN_TEST T2 WHERE T1.ID = T2.JID(+); 

        ID NAME       JNAME              
---------- ---------- --------------------
       102 Yasuo      Inner Join         
       103 Jinx       Left Join          
       103 Jinx       Left Join          
       103 Jinx       Left Join          
       104 Messi      Right Join         
       105 Alistar    Full Join          
       105 Alistar    Full Join          
       106 Ronaldo

4. Right Outer Join (Right Join)
Ngược lại với Left Outer Join thì Right Outer Join trả ra tất cả các hàng của bảng phải và một số hàng thỏa mãn điều kiện join của bảng trái. Nếu một giá trị trong điều kiện join của bảng trái không tồn tại thì giá trị của cột trả ra của bảng trái là null.
SQL> SELECT T1.ID, T1.NAME, T2.JNAME FROM DUP_TEST T1 
     RIGHT JOIN JOIN_TEST T2 ON T1.ID = T2.JID;

        ID NAME       JNAME             
---------- ---------- --------------------
       102 Yasuo      Inner Join        
       103 Jinx       Left Join         
       103 Jinx       Left Join         
       103 Jinx       Left Join         
       104 Messi      Right Join        
       105 Alistar    Full Join         
       105 Alistar    Full Join         
                      Cross Join        

8 rows selected.


SQL> -- Old Syntax
     SELECT T1.ID, T1.NAME, T2.JNAME 
     FROM DUP_TEST T1, JOIN_TEST T2 ON T1.ID(+) = T2.JID;


        ID NAME       JNAME             
---------- ---------- --------------------
       102 Yasuo      Inner Join        
       103 Jinx       Left Join         
       103 Jinx       Left Join         
       103 Jinx       Left Join         
       104 Messi      Right Join        
       105 Alistar    Full Join         
       105 Alistar    Full Join         
                      Cross Join


8 rows selected. 

(ORA-00021) - JOIN (ORA-00021) - JOIN Reviewed by Uit Lân on 12/18/2018 01:18:00 SA Rating: 5

Không có nhận xét nào:

ads 728x90 B
Được tạo bởi Blogger.