SQL OUTER JOIN
Trong SQL bên ngoài JOIN, tất cả nội right của cả hai bảng được tích hợp với nhau hoặc chúng có khớp hoặc không.
Nếu bạn lấy một ví dụ về bảng nhân viên
Nối ngoài gồm hai loại:
1. Nối ngoài bên trái (còn được gọi là liên kết bên trái): liên kết này trả về tất cả các hàng từ bảng bên trái kết hợp với các hàng phù hợp của bảng bên phải. Nếu bạn không có kết quả phù hợp nào trong bảng bên phải, nó sẽ trả về giá trị NULL.
2. Nối ngoài bên phải (còn được gọi là nối phải): phép nối này trả về tất cả các hàng từ bảng bên phải được kết hợp với các hàng phù hợp của bảng bên trái. Nếu bạn không có cột nào khớp trong bảng bên trái. Nó trả về giá trị rỗng.
Các bài viết liên quan:
Biểu đồ này cho thấy các loại liên kết khác nhau:
SQL JOIN TRÁI
Phép nối bên trái trong SQL trả về tất cả các giá trị từ bảng bên trái và nó cũng bao gồm các giá trị phù hợp từ bảng bên phải, nếu không có giá trị nối nào phù hợp, nó trả về NULL.
CÚ PHÁP CƠ BẢN ĐỂ JOIN TRÁI:
Chúng ta hãy lấy hai bảng trong ví dụ này để trình bày chi tiết tất cả những thứ:
BẢNG Customer:
ID | NAME | AGE | SALARY |
1 | ARYAN | 51 | 56000 |
2 | AROHI | 21 | 25000 |
3 | VINEET | 24 | 31000 |
4 | AJEET | 23 | 32000 |
5 | RAVI | 23 | 42000 |
BẢNG Order:
O_ID | DATE | CUSTOMER_ID | AMOUNT |
001 | 20-01-2012 | 2 | 3000 |
002 | 12-02-2012 | 2 | 2000 |
003 | 22-03-2012 | 3 | 4000 |
004 | 11-04-2012 | 4 | 5000 |
JOIN hai bảng này với LEFT JOIN:
Điều này sẽ tạo ra kết quả sau:
ID | NAME | AMOUNT | DATE |
1 | ARYAN | NULL | NULL |
2 | AROHI | 3000 | 20-01-2012 |
2 | AROHI | 2000 | 12-02-2012 |
3 | VINEET | 4000 | 22-03-2012 |
4 | AJEET | 5000 | 11-04-2012 |
5 | RAVI | NULL | NULL |
SQL JOIN PHẢI
Phép nối bên phải trong SQL trả về tất cả các giá trị từ các hàng của bảng bên phải. Nó cũng bao gồm các giá trị được so khớp từ bảng bên trái nhưng nếu không có sự phù hợp nào trong cả hai bảng, nó sẽ trả về NULL.
Cú pháp cơ bản để join right:
chúng ta hãy lấy một ví dụ với 2 bảng table1 là CUSTOMERS table và table2 là ORDERS table.
BẢNG Customer:
ID | NAME | AGE | SALARY |
1 | ARYAN | 51 | 56000 |
2 | AROHI | 21 | 25000 |
3 | VINEET | 24 | 31000 |
4 | AJEET | 23 | 32000 |
5 | RAVI | 23 | 42000 |
BẢNG Order:
DATE | O_ID | CUSTOMER_ID | AMOUNT |
20-01-2012 | 001 | 2 | 3000 |
12-02-2012 | 002 | 2 | 2000 |
22-03-2012 | 003 | 3 | 4000 |
11-04-2012 | 004 | 4 | 5000 |
Ở đây chúng ta sẽ nối hai bảng này với SQL RIGHT JOIN:
ID | NAME | AMOUNT | DATE |
2 | AROHI | 3000 | 20-01-2012 |
2 | AROHI | 2000 | 12-02-2012 |
3 | VINEET | 4000 | 22-03-2012 |
4 | AJEET | 5000 | 11-04-2012 |
SQL FULL Join
Phép nối full trong SQL là kết quả của sự kết hợp của cả phép nối bên ngoài bên trái và bên phải và các bảng nối có tất cả các bản ghi từ cả hai bảng. Nó đặt NULL vào vị trí của các kết quả không tìm thấy.
Join bên ngoài full SQL và Join SQL giống nhau. nói chung nó được gọi là SQL FULL JOIN.
Join bên ngoài full SQL:
Join bên ngoài full SQL là gì?
Phép nối bên ngoài full trong SQL được sử dụng để kết hợp kết quả của cả phép nối bên ngoài bên trái và bên phải và trả về tất cả các hàng (không quan tâm đến kết quả khớp hoặc chưa khớp của nó) từ cả hai bảng Join.
Cú pháp cho phép nối bên ngoài full:
Lưu ý: ở đây table1 và table2 là tên của các bảng Join Join và column_name là cột của các bảng Join.
Chúng ta hãy lấy hai bảng để chứng minh sự Join bên ngoài full:
table_A
A | M |
1 | m |
2 | n |
4 | o |
bảng_B
A | N |
2 | p |
3 | q |
5 | r |
Bảng kết quả
A | M | A | N |
2 | n | 2 | p |
1 | m | – | – |
4 | o | – | – |
– | – | 3 | q |
– | – | 5 | r |
Bởi vì đây là một phép nối bên ngoài full nên tất cả các hàng (cả phù hợp và không khớp) từ cả hai bảng đều được đưa vào đầu ra. Ở đây chỉ có một hàng đầu ra hiển thị giá trị trong tất cả các cột vì chỉ có một kết quả khớp giữa table_A và table_B.
Join chéo trong SQL
- Phép toán nối trong SQL được sử dụng để kết hợp nhiều bảng với nhau thành một bảng duy nhất.
- Nếu chúng ta sử dụng phép nối chéo để kết hợp hai bảng khác nhau, thì chúng ta sẽ nhận được tích Descartes của các tập hợp hàng từ bảng đã nối. Khi mỗi hàng của bảng đầu tiên được kết hợp với mỗi hàng từ bảng thứ hai, nó được gọi là phép nối Đề-các hoặc phép nối chéo.
- Sau khi thực hiện thao tác nối chéo, tổng số hàng có trong bảng cuối cùng sẽ bằng tích của số hàng có trong bảng 1 và số hàng có trong bảng 2.
- Nếu có hai bản ghi trong bảng 1 và ba bản ghi trong bảng 2, thì sau khi thực hiện thao tác nối chéo, chúng ta sẽ nhận được sáu bản ghi trong bảng cuối cùng.
- Chúng ta hãy xem cú pháp viết một truy vấn để thực hiện thao tác nối chéo trong SQL.
Bây giờ chúng ta hãy xem đi sâu hơn về phép nối chéo trong SQL với sự trợ giúp của các ví dụ. Tất cả các truy vấn trong các ví dụ sẽ được viết bằng cơ sở dữ liệu MySQL.
Hãy xem xét chúng ta có các bảng sau với dữ liệu đã cho:
Bảng 1: MatchScore
Player | Department_id | Goals |
Franklin | 1 | 2 |
Alan | 1 | 3 |
Priyanka | 2 | 2 |
Rajesh | 3 | 5 |
Bảng 2: Departments
Department_id | Department_name |
1 | IT |
2 | HR |
3 | Marketing |
Bảng 3: employee
EmployeeID | Employee_Name | Employee_Salary |
1 | Arun Tiwari | 50000 |
2 | Sachin Rathi | 64000 |
3 | Harshal Pathak | 48000 |
4 | Arjun Kuwar | 46000 |
5 | Sarthak Gada | 62000 |
Bảng 4: department
DepartmentID | Department_Name | Employee_ID |
1 | Production | 1 |
2 | Sales | 3 |
3 | Marketing | 4 |
4 | Accounts | 5 |
Bảng 5: loan
LoanID | Branch | Amount |
1 | B1 | 15000 |
2 | B2 | 10000 |
3 | B3 | 20000 |
4 | B4 | 100000 |
Bảng 6: borrower
CustID | CustName | LoanID |
1 | Sonakshi Dixit | 1 |
2 | Shital Garg | 4 |
3 | Swara Joshi | 5 |
4 | Isha Deshmukh | 2 |
Bảng 7: customer
Customer_ID | Name | Age | Salary |
1 | Aryan Jain | 51 | 56000 |
2 | Arohi Dixit | 21 | 25000 |
3 | Vineet Garg | 24 | 31000 |
Bảng 8: orders
Order_ID | Order_Date | Cutomer_ID | Amount |
1 | 2012-01-20 | 2 | 3000 |
2 | 2012-05-18 | 2 | 2000 |
3 | 2012-06-28 | 3 | 4000 |
Ví dụ 1:
Viết truy vấn để thực hiện thao tác nối chéo coi bảng MatchScore là bảng bên trái và bảng Phòng ban là bảng bên phải.
Truy vấn:
Chúng tôi đã sử dụng lệnh SELECT với dấu hoa thị để truy xuất tất cả các cột có trong bảng MatchScore và Department. Sau đó, chúng tôi đã sử dụng từ khóa CROSS JOIN để thực hiện thao tác kết hợp chéo trên bảng MatchScore và các Phòng ban. Vì có 4 bản ghi trong MatchScore và 3 bản ghi trong bảng Cục nên sau khi thực hiện thao tác nối chéo, chúng ta sẽ nhận được 12 hàng.
Sau khi thực hiện truy vấn này, bạn sẽ tìm thấy kết quả sau:
Player | Department_id | Goals | Depatment_id | Department_name |
Franklin | 1 | 2 | 1 | IT |
Alan | 1 | 3 | 1 | IT |
Priyanka | 2 | 2 | 1 | IT |
Rajesh | 3 | 5 | 1 | IT |
Franklin | 1 | 2 | 2 | HR |
Alan | 1 | 3 | 2 | HR |
Priyanka | 2 | 2 | 2 | HR |
Rajesh | 3 | 5 | 2 | HR |
Franklin | 1 | 2 | 3 | Marketing |
Alan | 1 | 3 | 3 | Marketing |
Priyanka | 2 | 2 | 3 | Marketing |
Rajesh | 3 | 5 | 3 | Marketing |
Mỗi hàng từ bảng MatchScore được kết hợp với mỗi hàng của bảng Cục. Vì có bốn bản ghi trong MatchScore và ba bản ghi trong bảng Cục, chúng tôi có 12 hàng trong bảng cuối cùng sau khi thực hiện thao tác nối chéo.
Ví dụ 2:
Viết truy vấn để thực hiện thao tác nối chéo coi bảng nhân viên là bảng bên trái và bảng bộ phận là bảng bên phải.
Truy vấn:
Chúng tôi đã sử dụng lệnh SELECT với dấu sao để truy xuất tất cả các cột có trong bảng nhân viên và phòng ban. Sau đó, chúng tôi đã sử dụng từ khóa CROSS JOIN để thực hiện thao tác nối chéo trên bảng nhân viên và bộ phận. Vì có năm bản ghi trong nhân viên và bốn bản ghi trong bảng bộ phận, sau khi thực hiện thao tác nối chéo, chúng ta sẽ nhận được 20 hàng.
Sau khi thực hiện truy vấn này, bạn sẽ tìm thấy kết quả sau:
EmployeeID | Employee_Name | Employee_Salary | DepartmentID | Department_Name | Employee_ID |
1 | Arun Tiwari | 50000 | 1 | Production | 1 |
1 | Arun Tiwari | 50000 | 2 | Sales | 3 |
1 | Arun Tiwari | 50000 | 3 | Marketing | 4 |
1 | Arun Tiwari | 50000 | 4 | Accounts | 5 |
2 | Sachin Rathi | 64000 | 1 | Production | 1 |
2 | Sachin Rathi | 64000 | 2 | Sales | 3 |
2 | Sachin Rathi | 64000 | 3 | Marketing | 4 |
2 | Sachin Rathi | 64000 | 4 | Accounts | 5 |
3 | Harshal Pathak | 48000 | 1 | Production | 1 |
3 | Harshal Pathak | 48000 | 2 | Sales | 3 |
3 | Harshal Pathak | 48000 | 3 | Marketing | 4 |
3 | Harshal Pathak | 48000 | 4 | Accounts | 5 |
4 | Arjun Kuwar | 46000 | 1 | Production | 1 |
4 | Arjun Kuwar | 46000 | 2 | Sales | 3 |
4 | Arjun Kuwar | 46000 | 3 | Marketing | 4 |
4 | Arjun Kuwar | 46000 | 4 | Accounts | 5 |
5 | Sarthak Gada | 62000 | 1 | Production | 1 |
5 | Sarthak Gada | 62000 | 2 | Sales | 3 |
5 | Sarthak Gada | 62000 | 3 | Marketing | 4 |
5 | Sarthak Gada | 62000 | 4 | Accounts | 5 |
Mỗi hàng từ bảng nhân viên được kết hợp với mỗi hàng của bảng bộ phận. Vì có năm bản ghi trong bảng nhân viên và bốn bản ghi trong bảng bộ phận, chúng tôi có 20 hàng trong bảng cuối cùng sau khi thực hiện thao tác nối chéo.
Ví dụ 3:
Viết truy vấn để thực hiện thao tác nối chéo coi bảng cho vay là bảng bên trái và bảng bên vay là bảng bên phải.
Truy vấn:
Chúng tôi đã sử dụng lệnh SELECT với dấu hoa thị để truy xuất tất cả các cột có trong khoản vay và bảng người đi vay. Sau đó, chúng tôi đã sử dụng từ khóa CROSS JOIN để thực hiện thao tác kết hợp chéo trên khoản vay và bảng người vay. Vì có bốn bản ghi trong bảng cho vay và bốn bản ghi trong bảng người vay, nên sau khi thực hiện thao tác nối chéo, chúng ta sẽ có 16 hàng.
Sau khi thực hiện truy vấn này, bạn sẽ tìm thấy kết quả sau:
LoanID | Branch | Amount | CustID | CustName | LoanID |
1 | B1 | 15000 | 1 | Sonakshi Dixit | 1 |
2 | B2 | 10000 | 1 | Sonakshi Dixit | 1 |
3 | B3 | 20000 | 1 | Sonakshi Dixit | 1 |
4 | B4 | 100000 | 1 | Sonakshi Dixit | 1 |
1 | B1 | 15000 | 2 | Shital Garg | 4 |
2 | B2 | 10000 | 2 | Shital Garg | 4 |
3 | B3 | 20000 | 2 | Shital Garg | 4 |
4 | B4 | 100000 | 2 | Shital Garg | 4 |
1 | B1 | 15000 | 3 | Swara Joshi | 5 |
2 | B2 | 10000 | 3 | Swara Joshi | 5 |
3 | B3 | 20000 | 3 | Swara Joshi | 5 |
4 | B4 | 100000 | 3 | Swara Joshi | 5 |
1 | B1 | 15000 | 4 | Isha Deshmukh | 2 |
2 | B2 | 10000 | 4 | Isha Deshmukh | 2 |
3 | B3 | 20000 | 4 | Isha Deshmukh | 2 |
4 | B4 | 100000 | 4 | Isha Deshmukh | 2 |
Mỗi hàng từ bảng cho vay được kết hợp với mỗi hàng của bảng người vay. Vì có bốn bản ghi trong bảng khoản vay và bốn bản ghi trong bảng người vay, nên sau khi thực hiện thao tác nối chéo, chúng ta có 16 hàng.
Ví dụ 4:
Viết truy vấn để thực hiện thao tác nối chéo coi bảng khách hàng là bảng bên trái và bảng đơn đặt hàng là bảng bên phải.
Truy vấn:
Chúng tôi đã sử dụng lệnh SELECT với dấu hoa thị để truy xuất tất cả các cột có trong bảng khách hàng và đơn đặt hàng. Sau đó, chúng tôi đã sử dụng từ khóa CROSS JOIN để thực hiện thao tác nối chéo trên bảng khách hàng và bảng đơn đặt hàng. Vì có ba bản ghi trong bảng khoản vay và ba bản ghi trong bảng đơn hàng nên sau khi thực hiện thao tác nối chéo, chúng ta sẽ nhận được 9 hàng.
Sau khi thực hiện truy vấn này, bạn sẽ tìm thấy kết quả sau:
Customer_ID | Name | Age | Salary | Order_ID | Order_Date | Customer_ID | Amount |
1 | Aryan Jain | 51 | 56000 | 1 | 2012-01-20 | 2 | 3000 |
2 | Arohi Dixit | 21 | 25000 | 1 | 2012-01-20 | 2 | 3000 |
3 | Vineet Garg | 24 | 31000 | 1 | 2012-01-20 | 2 | 3000 |
1 | Aryan Jain | 51 | 56000 | 2 | 2012-05-18 | 2 | 2000 |
2 | Arohi Dixit | 21 | 25000 | 2 | 2012-05-18 | 2 | 2000 |
3 | Vineet Garg | 24 | 31000 | 2 | 2012-05-18 | 2 | 2000 |
1 | Aryan Jain | 51 | 56000 | 3 | 2012-06-28 | 3 | 4000 |
2 | Arohi Dixit | 21 | 25000 | 3 | 2012-06-28 | 3 | 4000 |
3 | Vineet Garg | 24 | 31000 | 3 | 2012-06-28 | 3 | 4000 |
Mỗi hàng từ bảng của khách hàng được kết hợp với mỗi hàng của bảng đơn đặt hàng. Vì có ba bản ghi trong bảng khoản vay và ba bản ghi trong bảng đơn hàng nên sau khi thực hiện thao tác nối chéo, chúng ta sẽ nhận được 9 hàng.