SQL Advance – Joins

Tram Ho

Việc truy vấn data trên 1 bảng thì khá đơn giản và dễ dùng trong SQL. Nhưng với từ 2 bảng trở lên, query sẽ trở nên khó khăn hơn khi phải móc nối nhiều table với nhau. Phải tìm được điều kiện và cách nối thích hợp để truy vấn được data mà bạn mong muốn.

Trong bài này mình sẽ giới thiệu tới những cách sử dụng câu lệnh Joins trong SQL. Tùy theo ngữ cảnh và mục đích sử dụng. Hi vọng bạn sẽ lựa chọn được cách dùng thích hợp.

Dữ liệu mình đưa ra để ví dụ có 2 bảng như sau

table1: Orders

OrderIDCustomerIDOrderDate
10101CU0012021-09-18
10102CU0022021-09-18
10103CU0012021-09-20
10104CU0042021-09-20

table2: Customers

CustomerIDCustomerNameAddressCity
CU001Nam Hà16 Lý Thường KiệtĐà Nẵng
CU002Văn Thanh10 Hùng VươngHà Nội
CU003Cẩm Tú14 An ThượngHải Phòng

1. INNER JOIN

–> Kết nối dựa trên dữ liệu chung của 2 bảng

Syntax

Example

Thực hiện so sánh bảng [Orders] và [Customers].

  • Với mỗi dòng ở table Orders thực hiện tìm các dòng tương ứng ở bảng Customers.
  • Nếu tìm thấy dòng thỏa mãn điều kiện có cùng CustomerID sẽ thực hiện thêm dòng vào kết quả tương ứng.
  • Trường hợp tìm được nhiều dòng thõa mãn thì nhiều dòng kết quả sẽ được hiển thị

Result

OrderIDCustomerNameAddressCity
10101Nam Hà16 Lý Thường KiệtĐà Nẵng
10102Văn Thanh10 Hùng VươngHà Nội
10103Nam Hà16 Lý Thường KiệtĐà Nẵng

2. LEFT JOIN

Syntax

Example

Thực hiện so sánh bảng [Orders] và [Customers].

  • Cách làm tương tự với INNER JOIN tuy nhiên với các dòng ở bảng Orders nếu không tìm được dòng tương ứng ở Customers vẫn được hiển thị. Lúc này các giá trị tương ứng ở table Customers sẽ hiển thị NULL

Result

OrderIDCustomerNameAddressCity
10101Nam Hà16 Lý Thường KiệtĐà Nẵng
10102Văn Thanh10 Hùng VươngHà Nội
10103Nam Hà16 Lý Thường KiệtĐà Nẵng
10104nullnullnull

3. RIGHT JOIN

Syntax

Note: RIGHT JOIN hoặc RIGHT OUTER JOIN đều được nhé.

Example

Thực hiện so sánh bảng [Orders] và [Customers].

  • Cách làm tương tự với INNER JOIN tuy nhiên với các dòng ở bảng Customers không tương ứng với bảng Orders vẫn được hiển thị. Lúc này các giá trị tương ứng ở table Orders sẽ hiển thị NULL

Result

OrderIDCustomerNameAddressCity
10101Nam Hà16 Lý Thường KiệtĐà Nẵng
10102Văn Thanh10 Hùng VươngHà Nội
10103Nam Hà16 Lý Thường KiệtĐà Nẵng
nullCẩm Tú14 An ThượngHải Phòng

4. FULL JOIN

Syntax

Note: FULL JOIN hoặc FULL OUTER JOIN đều được nhé.

Example

Thực hiện so sánh bảng [Orders] và [Customers].

  • Cách làm tương tự với INNER JOIN tuy nhiên với các dòng ở bảng Customers không tương ứng với bảng Orders vẫn được hiển thị. Lúc này các giá trị tương ứng ở table Orders sẽ hiển thị NULL
  • Các dòng ở bảng Orders không tương ứng với bảng Customers vẫn được được hiển thị. Lúc này các giá trị tương ứng ở table Customers sẽ hiển thị NULL

Result

OrderIDCustomerNameAddressCity
10101Nam Hà16 Lý Thường KiệtĐà Nẵng
10102Văn Thanh10 Hùng VươngHà Nội
10103Nam Hà16 Lý Thường KiệtĐà Nẵng
10104nullnullnull
nullCẩm Tú14 An ThượngHải Phòng

5. SELF JOIN

–> Ngoài việc join từ 2 bảng thì chúng ta có thể tự join chính nó để truy vấn và tìm ra những dữ liệu cần dùng tới.

Syntax

Example

Bảng [Orders] được kết hợp ngay với chính nó, để tìm ra các OrderID có cùng OrderDate

Result

Order01Order02OrderDate
10101101022021-09-18
10103101042021-09-20

Different Types of SQL JOINs

Dưới đây là một cái nhìn tổng quát để bạn dễ dàng so sánh sự khác nhau giữa các loại Joins. Hi vọng bài viết sẽ có ích giúp bạn.

Bài viết có tham khảo https://www.w3schools.com

Chia sẻ bài viết ngay