CÁCH JOIN CÁC BẢNG TRONG SQL

Trong lý giải này, các bạn sẽ tìm hiểu về những loại join không giống nhau trong SQL Server cho phép bạn kết hợp dữ liệu từ nhì bảng.

Bạn đang xem: Cách join các bảng trong sql

Trong cơ sở tài liệu quan hệ, dữ liệu được phân phối trong nhiều bảng logic. Để giành được một bộ dữ liệu có ý nghĩa sâu sắc hoàn chỉnh, bạn phải truy vấn tài liệu từ các bảng này bằng cách sử dụng các phép nối (join).

SQL Server cung ứng nhiều nhiều loại liên kết bao gồm INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN cùng CROSS JOIN. Mỗi một số loại join khẳng định cách SQL Server sử dụng dữ liệu từ 1 bảng để lựa chọn các bạn dạng ghi vào bảng khác.

Chúng tôi sẽ tạo các bảng dữ liệu mẫu để minh họa các loại join trong SQL Server.

Tạo bảng tài liệu mẫu

Đầu tiên, sản xuất một lược thứ mới có tên hr:

CREATE SCHEMA hr;GOThứ hai, chế tạo ra hai bảng mới có tên là candidates cùng employees trong lược trang bị hr:

CREATE TABLE hr.candidates( id INT PRIMARY KEY IDENTITY, fullname VARCHAR(100) NOT NULL);CREATE TABLE hr.employees( id INT PRIMARY KEY IDENTITY, fullname VARCHAR(100) NOT NULL);Thứ ba, INSERT một số bản ghi vào bảng candidates cùng employees:

INSERT INTO hr.candidates(fullname)VALUES ("John Doe"), ("Lily Bush"), ("Peter Drucker"), ("Jane Doe");INSERT INTO hr.employees(fullname)VALUES ("John Doe"), ("Jane Doe"), ("Michael Scott"), ("Jack Sparrow");Chúng ta hãy điện thoại tư vấn bảng candidates là bảng bên trái và bảng employees là bảng mặt phải.

INNER JOIN vào SQL Server

INNER JOIN tạo nên một tập dữ liệu bao hàm các phiên bản ghi tự bảng mặt trái gồm các bản ghi khớp từ bỏ bảng mặt phải.

Ví dụ sau sử dụng mệnh đề INNER JOIN để mang các bản ghi trường đoản cú bảng candidates có các bản ghi khớp ứng có cùng quý giá trong cột fullname của bảng employees:

SELECT c.id candidate_id, c.fullname candidate_name, e.id employee_id, e.fullname employee_nameFROM hr.candidates c INNER JOIN hr.employees e ON e.fullname = c.fullname;Đây là kết quả:

*

Biểu đồ gia dụng Venn tiếp sau đây minh họa công dụng của INNER JOIN hai tập trung quả:

*

Bạn có thể xem chi tiết về mệnh đề INNER JOIN vào SQL server ở bài viết sau:


Inner Join vào SQL hệ thống | vserpuhove.com
Tìm gọi cách thực hiện mệnh đề INNER JOIN vào SQL Server để truy vấn dữ liệu từ nhiều bảng.
Trung Nguyenvserpuhove.com
*

LEFT JOIN vào SQL Server

LEFT JOIN tróc nã vấn dữ liệu bắt đầu từ bảng phía trái và các bản ghi khớp trong bảng bên phải.

LEFT JOIN trả về tất cả các bản ghi từ bỏ bảng bên trái và các phiên bản ghi khớp từ bảng bên phải.

Nếu một bạn dạng ghi trong bảng mặt trái không tồn tại một bạn dạng ghi phù hợp trong bảng bên phải, các cột của bảng bên phải sẽ sở hữu giá trị NULL.

LEFT JOIN còn được gọi là LEFT OUTER JOIN. Trường đoản cú khóa OUTER là tùy chọn.

Câu lệnh tiếp sau đây nối bảng candidates với bảng employees bằng cách sử dụng mệnh đề LEFT JOIN:

SELECT c.id candidate_id, c.fullname candidate_name, e.id employee_id, e.fullname employee_nameFROM hr.candidates c LEFT JOIN hr.employees e ON e.fullname = c.fullname;Đây là kết quả:

*

Biểu đồ vật Venn dưới đây minh họa kết quả của LEFT JOIN hai tập kết quả:

*

Để đạt được các phiên bản ghi chỉ trường tồn trong bảng phía bên trái nhưng không tồn tại trong bảng mặt phải, các bạn thêm một mệnh đề WHERE vào truy vấn bên trên như sau:

SELECT c.id candidate_id, c.fullname candidate_name, e.id employee_id, e.fullname employee_nameFROM hr.candidates c LEFT JOIN hr.employees e ON e.fullname = c.fullnameWHERE e.id IS NULL;Đây là kết quả:

*

Và sơ thứ Venn tiếp sau đây minh họa tác dụng của LEFT JOIN truy tìm vấn các phiên bản ghi chỉ trường thọ trong bảng bên trái:

*

Bạn có thể xem chi tiết về mệnh đề LEFT JOIN vào SQL server ở nội dung bài viết sau:


LEFT JOIN trong SQL server | vserpuhove.com
Trung Nguyenvserpuhove.com
*

RIGHT JOIN trong SQL Server

RIGHT JOIN hoặc RIGHT OUTER JOIN truy nã vấn dữ liệu ban đầu từ bảng mặt phải. Nó là 1 trong những phiên bản đảo ngược của LEFT JOIN.

RIGHT JOIN trả về một tập tác dụng chứa tất cả các bản ghi từ bảng bên buộc phải và các bạn dạng ghi khớp vào bảng mặt trái.

Nếu một bản ghi vào bảng bên đề xuất không có bạn dạng ghi phù hợp trong bảng mặt trái, tất cả các cột trong bảng phía trái sẽ đựng NULL.

Ví dụ sau thực hiện RIGHT JOIN nhằm truy vấn các bạn dạng ghi trường đoản cú bảng candidates với employees:

SELECT c.id candidate_id, c.fullname candidate_name, e.id employee_id, e.fullname employee_nameFROM hr.candidates c RIGHT JOIN hr.employees e ON e.fullname = c.fullname;Đây là kết quả:

*
Lưu ý: toàn bộ các bản ghi từ bỏ bảng bên đề xuất (employees) được bao hàm trong tập trung quả.

Xem thêm: Học Cờ Vua: Học Cách Đi Các Quân Trong Cờ Vua, Cách Để Chơi Cờ Vua Cho Người Mới Bắt Đầu

Và biểu đồ Venn minh họa RIGHT JOIN của hai tập kết quả:

*

Tương tự, chúng ta cũng có thể nhận được các bạn dạng ghi chỉ tồn tại trong bảng mặt phải bằng cách thêm một mệnh đề WHERE vào tầm nã vấn bên trên như sau:

SELECT c.id candidate_id, c.fullname candidate_name, e.id employee_id, e.fullname employee_nameFROM hr.candidates c RIGHT JOIN hr.employees e ON e.fullname = c.fullnameWHERE c.id IS NULL;Đây là kết quả:

*

Và biểu vật dụng Venn minh họa tác dụng của RIGHT JOIN tầm nã vấn các bản ghi chỉ trường tồn trong bảng mặt phải:

*

Bạn có thể xem chi tiết về mệnh đề RIGHT JOIN vào SQL vps ở nội dung bài viết sau:


RIGHT JOIN vào SQL server | vserpuhove.com
Trung Nguyenvserpuhove.com

FULL OUTER JOIN trong SQL Server

FULL OUTER JOIN hoặc FULL JOIN trả về một tập kết quả có chứa tất cả các phiên bản ghi tự cả nhì bảng phía bên trái và mặt phải, cùng với các phiên bản ghi khớp trường đoản cú cả phía hai bên nếu có. Trong trường thích hợp không có kết quả khớp, bên bị thiếu sẽ có được các quý hiếm NULL.

Ví dụ sau đây cho thấy thêm cách tiến hành FULL OUTER JOIN thân bảng candidates và employees:

SELECT c.id candidate_id, c.fullname candidate_name, e.id employee_id, e.fullname employee_nameFROM hr.candidates c FULL JOIN hr.employees e ON e.fullname = c.fullname;Đây là kết quả:

*

Biểu đồ Venn minh họa mang đến FULL OUTER JOIN của hai tập trung quả:

*

Để truy nã xuất các bạn dạng ghi lâu dài bảng phía trái hoặc bên phải, bạn loại bỏ các bản ghi chung cho cả hai bảng bằng cách thêm một mệnh đề WHERE như trong truy nã vấn sau:

SELECT c.id candidate_id, c.fullname candidate_name, e.id employee_id, e.fullname employee_nameFROM hr.candidates c FULL JOIN hr.employees e ON e.fullname = c.fullnameWHERE c.id IS NULL OR e.id IS NULL;Đây là kết quả:

*

Và sơ vật Venn minh họa vận động trên:

*

Bạn hoàn toàn có thể xem chi tiết về mệnh đề FULL OUTER JOIN trong SQL vps ở bài viết sau:


FULL OUTER JOIN trong SQL hệ thống | vserpuhove.com

CROSS JOIN vào SQL Server

Trong phần này, bạn sẽ tìm gọi cách thực hiện mệnh đề CROSS JOIN trong SQL Server nhằm truy vấn tài liệu từ nhị hoặc những bảng không liên quan.

Phần sau đây minh họa cú pháp của CROSS JOIN trong SQL Server nhằm truy vấn dữ liệu từ nhì bảng:

SELECTselect_listFROMT1CROSS JOIN T2;Mệnh đề CROSS JOIN vẫn nối mỗi phiên bản ghi từ bỏ bảng đầu tiên (T1) cùng với mỗi phiên bản ghi từ bảng sản phẩm công nghệ hai (T2). Nói cách khác CROSS JOIN trả về tích Đề các các bạn dạng ghi tự cả hai bảng.

Không y như mệnh đề INNER JOIN, LEFT JOIN, RIGHT JOIN tốt FULL OUTER JOIN. CROSS JOIN không thiết lập mối dục tình giữa các bảng được join.

Giả sử bảng T1 đựng ba bạn dạng ghi 1, 2 với 3 với bảng T2 cất ba phiên bản ghi A, B với C.

Mệnh đề CROSS JOIN đem một bản ghi trường đoản cú bảng thứ nhất (T1) và tiếp nối tạo một phiên bản ghi new cho mỗi bản ghi trong bảng thiết bị hai (T2). Sau đó, nó làm tương tự cho bạn dạng ghi tiếp theo sau trong bảng trước tiên (T1), v.v.

*

Trong hình minh họa này, CROSS JOIN tạo nên tổng cùng chín bản ghi. Nói chung, trường hợp bảng thứ nhất có n bản ghi và bảng trang bị hai bao gồm m phiên bản ghi, CROSS JOIN sẽ tạo ra n * m bạn dạng ghi.

Câu lệnh dưới đây trả về một tập hiệu quả là sự kết hợp của tất cả các sản phẩm và cửa ngõ hàng. Tập kết quả hoàn toàn có thể được sử dụng cho giấy tờ thủ tục kiểm kê vào thời gian ngừng hoạt động cuối tháng với cuối năm:

SELECT product_id, product_name, store_id, 0 AS quantityFROM production.productsCROSS JOIN sales.storesORDER BY product_name, store_id;Đây là kết quả:

*

Bạn rất có thể xem chi tiết về mệnh đề CROSS JOIN vào SQL hệ thống ở bài viết sau:


CROSS JOIN vào SQL hệ thống | vserpuhove.com

Self Join vào SQL Server

Trong phần này, bạn sẽ tìm gọi cách sử dụng self join (tự join) trong SQL Server để join một bảng với chủ yếu nó.

Self Join cho phép bạn join một bảng vào chính nó. Nó rất có lợi để truy vấn dữ liệu phân cấp hoặc đối chiếu các bạn dạng ghi trong và một bảng.

Self Join thực hiện mệnh đề INNER JOIN hoặc LEFT JOIN. Vì chưng truy vấn áp dụng tham chiếu mang đến cùng một bảng, nên bí danh bảng được áp dụng để gán các tên khác nhau cho và một bảng trong truy vấn.

Lưu ý: vấn đề tham chiếu mang đến cùng một bảng những lần trong một truy nã vấn cơ mà không sử dụng bí danh bảng đang dẫn mang lại lỗi.

Sau đây minh họa cú pháp join bảng T với bao gồm nó:

SELECT select_listFROM T t1 JOIN T t2 ON join_predicate; truy nã vấn tham chiếu bảng T nhị lần. Những bí danh bảng t1 và t2 được thực hiện để gán các tên bảng T khác biệt trong truy hỏi vấn.

Hãy coi bảng staffs sau trường đoản cú cơ sở dữ liệu mẫu:

*
*

Bảng staffs giữ trữ các thông tin nhân viên cấp dưới như id, tên, họ cùng email. Nó cũng có một cột có tên là manager_id để hướng đẫn người thống trị trực tiếp. Ví dụ, Mireya report lên Fabiola vị giá trị trong manager_id của Mireya là Fabiola.

Fabiola không có người làm chủ nên cột id người làm chủ có NULL.

Để biết ai report cho ai, bạn thực hiện self join được trình diễn trong truy nã vấn sau:

SELECT e.first_name + " " + e.last_name employee, m.first_name + " " + m.last_name managerFROM sales.staffs eINNER JOIN sales.staffs m ON m.staff_id = e.manager_idORDER BY manager;Đây là kết quả:

*

Trong ví dụ này, shop chúng tôi đã tham chiếu bảng staffs hai lần: bí danh e cho nhân viên và túng bấn danh m cho người quản lý. Biểu thức join khớp mối quan hệ nhân viên cấp dưới với tín đồ quản lý bằng phương pháp sử dụng những giá trị vào cột e.manager_id và cột m.staff_id.

Cột nhân viên không tồn tại Fabiola Jackson bởi hiệu ứng của mệnh đề INNER JOIN. Nếu khách hàng thay nạm mệnh đề INNER JOIN bởi mệnh đề LEFT JOIN như trong truy nã vấn sau, các bạn sẽ nhận được tập kết quả bao hàm Fabiola Jackson trong cột nhân viên:

SELECT e.first_name + " " + e.last_name employee, m.first_name + " " + m.last_name managerFROM sales.staffs eLEFT JOIN sales.staffs m ON m.staff_id = e.manager_idORDER BY manager;Đây là kết quả: