Những ai muốn trở thành lập trình viên hoặc mới tiếp cận lĩnh vực công nghệ thông tin đều cần nắm rõ khái niệm SQL join và cách sử dụng câu lệnh này. Bài viết sau sẽ cung cấp cho bạn thông tin chi tiết về JOIN trong SQL Server cùng với các ví dụ minh họa để giúp bạn hiểu một cách dễ dàng.
SQL Server là gì?
SQL Server là một phần mềm do Microsoft phát triển, được sử dụng để lưu trữ và truy xuất dữ liệu theo chuẩn RDBMS. Mỗi RDBMS bao gồm cơ sở dữ liệu, ứng dụng quản lý dữ liệu và các thành phần liên quan khác.
SQL Server được Microsoft phát hành lần đầu vào năm 1989 với phiên bản SQL Server 1.0 hoạt động trên hệ điều hành 16-bit. Từ đó, SQL Server đã phát triển và tối ưu hóa để có thể vận hành hiệu quả trong các hệ thống cơ sở dữ liệu lớn phục vụ hàng nghìn người dùng đồng thời.
Trước khi tìm hiểu về lệnh SQL JOIN, hãy nắm rõ về thành phần, tính năng và các phiên bản của SQL Server:
SQL Server có những thành phần nào?
Một SQL Server hiện nay được Microsoft thiết kế dựa trên cấu trúc bảng quan hệ. Điều này cho phép kết nối dữ liệu từ nhiều bảng khác nhau vào cùng một điểm, giúp loại bỏ nhu cầu lưu trữ dữ liệu ở nhiều vị trí trong CSDL.
SQL Server bao gồm hai thành phần chính là SQLOS và Database Engine:
Database Engine
Đây là thành phần quan trọng trong SQL Server, có nhiệm vụ xử lý, quản lý lưu trữ và bảo mật dữ liệu. Nó cũng bao gồm nhiều công cụ như quản lý tệp, lưu trữ trang, bảng, bộ đệm dữ liệu, chỉ mục và giao dịch CSDL.
SQLOS
SQLOS là thành phần quan trọng nhất trong cấu trúc của Database Engine. Nó quản lý lịch trình công việc, quản lý bộ nhớ và khóa dữ liệu để tránh xung đột khi cập nhật.
SQL Server có những tính năng nổi bật nào?
Để hiểu rõ về lệnh SQL JOIN, bạn cần biết SQL Server có những tính năng gì? Microsoft cung cấp các tính năng quản lý dữ liệu như SQL Server Data Quality, SQL Server Master và các dịch vụ hỗ trợ lập trình. Bên cạnh đó, SQL Server còn cung cấp 2 công cụ hỗ trợ cho lập trình viên và quản trị CSDL (DBAs).
- Data Tools: Công cụ này hỗ trợ quá trình phát triển các CSDL.
- Management Studio: Công cụ này hỗ trợ việc triển khai, quản lý, giám sát những CSDL.
Ngoài ra, SQL Server tích hợp cả tính năng phân tích kinh doanh, giúp phân tích dữ liệu qua:
- Analysis Services (SSAS): Tính năng phân tích dữ liệu.
- Reporting Services: Thiết lập báo cáo đơn giản hơn.
SQL Server có những phiên bản nào?
Lệnh SQL JOIN hiện đang áp dụng trên nhiều phiên bản SQL Server, vì vậy bạn cần tìm hiểu trước. Phần mềm SQL Server hiện có nhiều phiên bản để tiết kiệm thời gian, chi phí và tăng hiệu suất công việc:
- Standard: Phiên bản này có ít tính năng nâng cao hơn phiên bản Enterprise, phù hợp với doanh nghiệp nhỏ và vừa không cần sử dụng các tính năng cao cấp.
SQL JOIN là gì?
Thường thì dữ liệu được lưu trữ trong nhiều bảng và liên kết với nhau thông qua một giá trị chung trong CSDL quan hệ như Oracle, SQL Server, MySQL,... Việc lấy dữ liệu từ nhiều bảng và tổng hợp chúng theo điều kiện là phổ biến.
Với lệnh JOIN trong SQL Server, người lập trình có thể kết hợp dữ liệu từ nhiều bảng có mối quan hệ để tạo ra kết quả ý nghĩa. Lệnh SELECT được sử dụng để nối các bảng với điều kiện là JOIN, giúp SQL Server sử dụng dữ liệu từ nhiều bảng khác nhau và ràng buộc chúng bằng Foreign key.
Có bao nhiêu loại SQL JOIN?
Dưới đây là 4 loại lệnh JOIN trong SQL Server mà bạn có thể tham khảo kèm ví dụ minh họa:
INNER JOIN trong SQL Server
Đây là loại JOIN phổ biến nhất trong SQL Server. INNER JOIN sẽ trả về tất cả các hàng từ các bảng nếu điều kiện kết nối được đáp ứng.
Cú pháp sử dụng INNER JOIN trong SQL Server như sau:
CHỌN các cột
TỪ bảng1
INNER JOIN bảng2
ON bảng1.cột = bảng2.cột;
Để hiểu rõ hơn, bạn có thể xem ví dụ về việc sử dụng INNER JOIN như sau:
Ví dụ, trong bảng Nhà Cung có hai trường thông tin là nhacung_ten và nhacung_id:
nhacung_ten | nhacung_id |
IBM | 10000 |
Hewlett Packard | 10001 |
Microsoft | 10002 |
NVIDIA | 10003 |
Ví dụ, trong bảng Đơn hàng có ba trường thông tin là nhacung_id, donhang_ngay và donhang_id:
donhang_id | donhang_ngay | nhacung_id |
500125 | 2003/05/12 | 10000 |
500126 | 2003/05/13 | 10001 |
500127 | 2003/05/14 | 10004 |
Nếu chúng ta thực hiện lệnh SELECT (kết hợp với INNER JOIN trong SQL) như sau:
Sau đây là bảng kết quả sẽ trả về:
nhacung_id | ten | donhang_ngay |
10000 | IBM | 2003/05/12 |
10001 | Hewlett Packard | 2003/05/13 |
Như vậy, bạn có thể thấy rằng NVIDIA và Microsoft đã bị loại bỏ vì nhacung_id (10003 và 10002) chỉ tồn tại trong một bảng. Trong bảng Đơn hàng, hàng 500127 đã bị loại bỏ vì nhacung_id 10004 không tồn tại trong bảng Nhà cung.
LEFT OUTER JOIN trong SQL Server
Dạng lệnh JOIN tiếp theo mà bạn nên tìm hiểu là LEFT OUTER JOIN. Hiện nay, một số CSDL đang sử dụng LEFT JOIN thay cho LEFT OUTER JOIN. Loại JOIN này sẽ trả về các hàng từ bảng bên trái với điều kiện kết nối là ON, và chỉ lấy dữ liệu từ các hàng mà các bảng đáp ứng điều kiện đã đặt ra.
Cú pháp sử dụng LEFT JOIN như sau:
CHỌN các cột
TỪ bảng1
LEFT [OUTER] JOIN bảng2
ON bảng1.cột = bảng2.cột;
Dưới đây là ví dụ về lệnh LEFT JOIN để bạn hiểu rõ hơn:
Đây là bảng Nhà cung gồm nhacung_ten và nhacung_id:
nhacung_id | nhacung_ten |
10000 | IBM |
10001 | Hewlett Packard |
10002 | Microsoft |
10003 | NVIDIA |
Tiếp theo là bảng Đơn hàng có nhacung_id, donhang_ngay và donhang_id:
donhang_id | nhacung_id | donhang_ngay |
500125 | 10000 | 2003/05/12 |
500126 | 10001 | 2003/05/13 |
Nếu bạn thực hiện lệnh SQL JOIN như sau:
Kết quả được hiển thị như một bảng như sau:
nhacung_id | nhacung_ten | donhang_ngay |
10000 | IBM | 2003/05/12 |
10001 | Hewlett Packard | 2003/05/13 |
10002 | Microsoft | <null> |
10003 | NVIDIA | <null> |
Bảng kết quả vẫn bao gồm các hàng của NVIDIA và Microsoft vì ta đang sử dụng LEFT OUTER JOIN (kết nối toàn bộ bảng bên trái). Lúc này, các bản ghi của đơn hàng ngày có giá trị là
RIGHT OUTER JOIN trong SQL Server
Hiện nay có một số cơ sở dữ liệu sử dụng RIGHT JOIN thay cho RIGHT OUTER JOIN. Phương thức kết nối này trả về các hàng từ bảng bên phải với điều kiện là ON và chỉ lấy các hàng thỏa mãn điều kiện đã xác định trước đó.
Cú pháp của lệnh JOIN trong SQL được biểu diễn như sau:
SELECT cot
FROM bang1
RIGHT [OUTER] JOIN bang2
ON bang1.cot = bang2.cot;
Chúng ta sẽ tìm hiểu sâu hơn về phép nối RIGHT JOIN thông qua ví dụ sau đây:
Bảng Nhà Cung cấp chứa thông tin về nhacung_ten và nhacung_id như sau:
nhacung_id | nhacung_ten |
10000 | Apple |
10001 |
Bảng Đơn hàng bao gồm các trường nhacung_id, donhang_ngay, donhang_id:
donhang_id | nhcung_id | donhang_ngay |
500125 | 10000 | 2003/08/12 |
500126 | 10001 | 2003/08/13 |
500127 | 10002 | 2003/08/14 |
Khi thực thi lệnh SQL JOIN như sau:
Kết quả sẽ được hiển thị như bảng sau:
donhang_id | donhang_ngay | nhacung_id |
500125 | 2003/08/12 | Apple |
500126 | 2003/08/13 | |
500127 | 2003/08/14 | <null> |
Do đó, hàng 5000127 vẫn xuất hiện trong kết quả của donhang_id vì ta đã sử dụng RIGHT OUTER JOIN.
Lệnh FULL OUTER JOIN trong SQL Server
Nhiều cơ sở dữ liệu hiện nay đang sử dụng lệnh FULL JOIN thay vì FULL OUTER JOIN. Loại kết nối này có thể trả về tất cả các hàng từ cả bảng phải và bảng trái, với giá trị
Cú pháp của lệnh FULL JOIN được biểu diễn như sau:
Lựa chọn cot từ bảng 1
FULL [OUTER] JOIN bang2 từ bảng 1
ON bang1.cot = bang2.cot
Tôi tôi mệnh giả thường bạn cách sử dụng lệnh SQL JOIN như sau:
Lựa chọn thêm minh hoạ lệnh SQL JOIN này như sau:
Bảng Nhà cung cấp bao gồm nhacung_ten và nhacung_id:
nhacung_ten | nhacung_id |
IBM | 10000 |
Hewlett Packard | 10001 |
Microsoft | 10002 |
NVIDIA | 10003 |
Tiếp theo là bảng Đơn hàng có nhacung_id, donhang_ngay và donhang_id:
nhacung_id | donhang_id | donhang_ngay |
10000 | 500125 | 2003/08/12 |
10001 | 500126 | 2003/08/13 |
10004 | 500127 | 2003/08/14 |
Khi thực hiện lệnh SQL JOIN như sau:
Chúng ta sẽ nhận được bảng kết quả như sau:
nhacung_id | nhacung_ten | donhang_ngay |
10000 | IBM | 2003/08/12 |
10001 | Hewlett Packard | 2003/08/13 |
10002 | Microsoft | <null> |
10003 | NVIDIA | <null> |
<null> | <null> | 2003/08/14 |
Vì vậy, các hàng NVIDIA và Microsoft vẫn xuất hiện trong kết quả vì đã sử dụng lệnh FULL OUTER JOIN. Những bản ghi có giá trị donhang_ngay là NULL vẫn được bao gồm. Hàng 10004 vẫn có mặt trong bảng kết quả, nhưng thông tin nhà cung cấp và mã nhà cung cấp của các bản ghi này lại có giá trị NULL.
Bài viết đã giới thiệu về phần mềm SQL Server và cách sử dụng lệnh SQL JOIN trong phần mềm này. Hy vọng mọi người đã hiểu hơn về lệnh này và biết cách sử dụng từng loại JOIN để liên kết các bảng dữ liệu một cách hiệu quả.