Computer >> Máy Tính >  >> Lập trình >> SQL Server

THAM GIA trong SQL Server

Trong SQL Server (Transact-SQL) JOIN được sử dụng để truy xuất dữ liệu từ nhiều bảng, xảy ra khi hai hoặc nhiều bảng được kết nối với nhau trong một lệnh SQL. Đây là 4 loại JOIN trong SQL Server

  1. THAM GIA INNER - còn được gọi là hình thức kết nối đơn giản
  2. THAM GIA BÊN NGOÀI TRÁI - hoặc THAM GIA TRÁI
  3. THAM GIA BÊN NGOÀI PHẢI - hoặc PHẢI THAM GIA
  4. THAM GIA NGOÀI TRỜI ĐẦY ĐỦ - hoặc THAM GIA ĐẦY ĐỦ

Bây giờ chúng ta hãy xem cú pháp, hình minh họa và ví dụ để hiểu rõ hơn về JOIN trong SQL Server.

THAM GIA BÊN TRONG

Nhiều khả năng bạn đã sử dụng INNER JOIN trong một số lệnh nhất định. Đây là kiểu kết nối phổ biến nhất, trả về tất cả các hàng từ bảng khi các điều kiện kết nối được đáp ứng.

Cú pháp INNER JOIN

  SELEC T cot 
FROM bang1
INNER JOIN bang2
ON bang1. cot = bang2.cot;

THAM GIA trong SQL Server
Hình ảnh minh họa của INNER JOIN

Kết quả trả về là các bản ghi chung giữa bang1 và bang2.

Ví dụ INNER JOIN

  SELECT nhacung.nhacung _id, nhacung.nhacung_ten, donhang.donhang_ngay 
FROM nhacung
INNER JOIN donhang
ON nhacung.nhacung_id = d onhang.nhacung_id;

Kết quả trả về trong ví dụ trên là dòng thông tin trong bảng 'nhà cung cấp' và bảng 'đơn hàng' khi giá trị của nhacung_id bằng 2 bảng.

Hãy xem một ví dụ với dữ liệu cụ thể để hiểu rõ hơn.

Bảng nhacung có 2 trường thông tin:nhacung_id và nhacung_ten.

nhacung_id nhacung_ten 10000 IBM 10001 Hewlett Packard 10002 Microsoft 10003 NVIDIA

Bảng donhang bao gồm 3 trường donhang_id, nhacung_id và donhang_ngay.

donhang_id nhacung_id donhang_ngay 500125 10000 2003/05/12 500126 10001 2003/05/13 500127 10004 2003/05/14

Nếu chạy lệnh SELECT (sử dụng INNER JOIN) bên dưới:

  SELECT nhacung. nhacung_id, nhacung.nhacung_ten, donhang.donhang_ngay 
FROM nhacung
INNER JOIN donhang
ON nhacung.nhacung_ id = donhang.nhacung_id;

Đây là tập kết quả được trả về:

nhacung_id mười IBM donhang_ngay 10000 2003/05/12 10001 Hewlett Packard 2003/05/13

Các sản phẩm của Microsoft và NVIDIA bị loại khỏi bảng vì nhacung_id (10002 và 10003) chỉ có sẵn trong 1 bảng. Hàng 500127 (donhang_id) trong bảng donhang bị xóa do nhacung_id 10004 không có trong bảng nhacung.

Cú pháp cũ của INNER JOIN

INNER JOIN có thể được viết lại với cú pháp cũ như bên dưới (nhưng nên sử dụng cú pháp có chứa từ khóa INNER JOIN)

  SELECT music ung.nhacung_id, nhacung.nhacung_ten, donhang.donhang_ngay 
FROM donhang, nhacung
WHERE nhacung.n hacung_id = donhang.nhacung_id;

THAM GIA BÊN NGOÀI TRÁI

Một số cơ sở dữ liệu sử dụng LEFT JOIN thay vì LEFT OUTER JOIN. Loại kết nối này trả về các hàng trong bảng điều khiển bên trái ở điều kiện BẬT và chỉ lấy các bảng còn lại đáp ứng các điều kiện đã đặt.

Cú pháp THAM GIA TRÁI

  SELE CT cot 
FROM bang1
LEFT [OUTER] JOIN bang2
ON bang1.co t = bang2.cot;

THAM GIA trong SQL Server
Minh họa LEFT JOIN do vùng màu xanh lam

Kết quả trả về bao gồm state1 và các bản ghi nằm trong bang2 được gán cho state1 (vùng màu xanh lam trong hình).

Ví dụ về LEFT JOIN

  SELECT nh acung.nhacung_id, nhacung.nhacung_ten, donhang.donhang_ngay 
FROM nhacung
LEFT OUTER JOIN donhang
ON nhacung.nhac ung_id = donhang.nhacung_id;

Ví dụ trên sẽ trả về tất cả các hàng từ bảng và chỉ những hàng đáp ứng yêu cầu trong bảng donhang. Nếu giá trị nhacung_id trong bảng không tồn tại trong bảng donhang, tất cả các trường trong donhang sẽ hiển thị kết quả trong bảng kết quả.

Dưới đây là một ví dụ cụ thể. Bảng chứa nhacung_id và nhacung_ten.

nhacung_id nhacung_ten 10000 IBM 10001 Hewlett Packard 10002 Microsoft 10003 NVIDIA

Bảng Donhang bao gồm donhang_id, nhacung_id và donhang_ngay.

donhang_id nhacung_id donhang_ngay 500125 10000 2003/05/12 500126 10001 2003/05/13

Nếu chạy lệnh SELECT bên dưới:

  SELECT nhacu ng.nhacung_id, nhacung.nhacung_ten, donhang.donhang_ngay 
FROM nhacung
LEFT OUTER JOIN donhang
ON nhacung.nhacun g_id = donhang.nhacung_id;

Kết quả sẽ như sau:

nhacung_id nhacung_ten 10000 IBM donhang_ngay 2003/05/12 10001 Hewlett Packard 2003/05/13 10002 Microsoft 10003 NVIDIA

Hàng Microsoft và NVIDIA vẫn nằm trong tập kết quả vì chúng đang sử dụng LEFT OUTER JOIN (lấy tất cả các bảng ở bên trái) . Khi đó, donhang_ngay trong số các bản ghi này sẽ hợp lệ.

THAM GIA NGAY NGƯỜI RA ĐÚNG

Một số cơ sở dữ liệu sử dụng RIGHT JOIN thay vì RIGHT OUTER JOIN. Kiểu kết nối này trả về các hàng trong bảng bên phải ở điều kiện BẬT và chỉ lấy các bảng còn lại đáp ứng các điều kiện đã đặt.

Cú pháp RIGHT THAM GIA

  SELECT c ot 
FROM bang1
RIGHT [OUTER] JOIN bang2
ON bang1.cot = bang2.cot;

THAM GIA trong SQL Server
Minh họa QUYỀN THAM GIA

Kết quả trả về bao gồm bang2 và các bản ghi ở trạng thái1 được gán cho bang2 (vùng màu xanh lam trong hình).

Ví dụ về RIGHT JOIN

  SELECT don hang.donhang_id, donhang.donhang_ngay, nhacung.nhacung_ten 
FROM nhacung
RIGHT OUTER JOIN donhang
ON nhacung.nha cung_id = donhang.nhacung_id;

Kết quả trả về là tất cả các hàng trong bảng donhang và chỉ những hàng đáp ứng yêu cầu trong bảng nhacung.

Nếu giá trị của nhacung_id trong bảng donhang không tồn tại trong bảng, tất cả các trường trong danh sách sẽ hiển thị trong bảng kết quả.

Dưới đây là một ví dụ cụ thể. Bảng chứa nhacung_id và nhacung_ten.

nhacung_id nhacung_ten 10000 Apple 10001 Google

Bảng Donhang bao gồm donhang_id, nhacung_id và donhang_ngay.

donhang_id nhcung_id donhang_ngay 500125 10000 2003/08/12 500126 10001 2003/08/13 500127 10002 2003/08/14

Nếu chạy lệnh SELECT bên dưới:

  SELECT donhang.don hang_id, donhang.donhang_ngay, nhacung.nhacung_ten 
FROM nhacung
RIGHT OUTER JOIN donhang
ON nhacung.nhacung_id = donhang.nhacung_id;

Kết quả sẽ như sau:

donhang_id donhang_ngay nhacung_id 500125 2003/08/12 Apple 500126 2003/08/13 Google 500127 2003/08/14

Hàng 500127 (donhang_id) vẫn nằm trong bảng kết quả vì THAM GIA RIGHT OUTER là đang được sử dụng. Lưu ý rằng nhacung_ten cho bản ghi đó có chứa giá trị.

THAM GIA NGOÀI TRỜI ĐẦY ĐỦ

Một số cơ sở dữ liệu sử dụng FULL JOIN thay vì FULL OUTER JOIN. Loại kết nối này trả về tất cả các hàng trong bảng bên trái và bên phải và các giá trị NULL được đặt trong điều kiện không đáp ứng điều kiện.

Cú pháp FULL JOIN

  SELE CT cot 
FROM bang1
FULL [OUTER] JOIN bang2
ON bang1.c ot = bang2.cot;

THAM GIA trong SQL Server
Minh họa FULL JOIN với kết quả là vùng màu xanh lá cây

Kết quả trả về bao gồm tất cả các bản ghi từ bang1 và bang2.

Ví dụ FULL JOIN

  SELECT nhacung. nhacung_id, nhacung.nhacung_ten, donhang.donhang_ngay 
FROM nhacung
FULL OUTER JOIN donhang
ON nhacung.nhacung_i d = donhang.nhacung_id;

Ví dụ trên sẽ trả về tất cả các hàng từ bảng và donhang, nhưng khi điều kiện không được đáp ứng, giá trị sẽ được đặt thành bảng kết quả.

Nếu nhacung_id trong bảng nhạc không có trong bảng donhang hoặc giá trị nhacung_id trong bảng donhang không có trong bảng nhạc, các trường thông tin sẽ được hiển thị.

Dưới đây là ví dụ cụ thể về FULL OUTER JOIN. Bảng chứa nhacung_id và nhacung_ten.

nhacung_id nhacung_ten 10000 IBM 10001 Hewlett Packard 10002 Microsoft 10003 NVIDIA

Bảng Donhang bao gồm donhang_id, nhacung_id và donhang_ngay.

donhang_id nhacung_id donhang_ngay 500125 10000 2003/08/12 500126 10001 2003/08/13 500127 10004 2003/08/14

Nếu chạy lệnh SELECT bên dưới:

  SELECT nhacung .nhacung_id, nhacung.nhacung_ten, donhang.donhang_ngay 
FROM nhacung
FULL OUTER JOIN donhang
ON nhacung.nhacung_i d = donhang.nhacung_id;

Kết quả sẽ như sau:

nhacung_id nhacung_ten 10.000 donhang_ngay IBM 2003/08/12 10001 Hewlett Packard 2003/08/13 10002 Microsoft 10003 NVIDIA 2003/08/14

Các sản phẩm của Microsoft và NVIDIA vẫn nằm trong tập kết quả vì họ đang sử dụng THAM GIA NGOÀI TRỜI ĐẦY ĐỦ. Sau đó donhang_ngay của các bản ghi này chứa các giá trị. Hàng cho nhacung_id là 10004 cũng nằm trong bảng kết quả nhưng nhacung_id và nhacung_ten của các bản ghi này chứa các giá trị.