Khi bạn đang làm việc với cơ sở dữ liệu, bạn có thể muốn truy vấn hai hoặc nhiều bảng cùng một lúc và tạo một tập hợp kết quả kết hợp. Ví dụ:bạn có thể muốn tìm ra tên của mọi nhân viên và bộ phận mà họ làm việc, nơi hai phần thông tin đó được lưu trữ trong hai bảng khác nhau.
Đó là nơi SQL
các phép nối xuất hiện. Khi bạn nối các bảng, bạn có thể chạy một truy vấn trên nhiều bảng và tạo ra một kết quả kết hợp.
Trong hướng dẫn này, chúng ta sẽ tập trung vào một kiểu tham gia:OUTER JOIN
. OUTER JOIN
toán tử trả về các hàng ngay cả khi chúng không có các hàng liên quan trong bảng cuối cùng. Chúng ta sẽ thảo luận về ba loại OUTER JOIN
s, cách chúng hoạt động và cách bạn có thể sử dụng chúng trong SQL
của mình truy vấn.
SQL Joins Refresher
Các truy vấn, thường bắt đầu bằng SELECT
câu lệnh, được sử dụng để truy xuất thông tin từ cơ sở dữ liệu. Thông thường, khi bạn đang viết một truy vấn, bạn sẽ tập trung vào việc truy xuất thông tin từ một bảng và sử dụng FROM
để xác định bảng nào lệnh của bạn sẽ truy vấn. Đây là cú pháp để viết một SQL
chuẩn truy vấn:
CHỌN cột_tên TỪ tên_bảng TẠI ĐÂU chắc chắn_điều_khiển_mặt_mặt;
Dưới đây là ví dụ về truy vấn sẽ truy xuất danh sách tên của mọi nhân viên trong employees
bảng:
CHỌN tên TỪ nhân viên;
Truy vấn của chúng tôi trả về như sau:
name |
Luke Mike Hannah Geoff Alexis Emma Jonah Adam |
(8 hàng)
Chúng tôi cũng có thể sử dụng WHERE
để lọc ra các kết quả truy vấn của chúng tôi để chỉ bao gồm các bản ghi đáp ứng một bộ tiêu chí nhất định. Ví dụ:chúng tôi có thể viết một truy vấn tìm tên của tất cả các nhân viên bán hàng hoặc tất cả nhân viên điều hành.
81% người tham gia cho biết họ cảm thấy tự tin hơn về triển vọng công việc công nghệ của mình sau khi tham gia một cuộc thi đào tạo. Kết hợp với bootcamp ngay hôm nay.
Sinh viên tốt nghiệp bootcamp trung bình đã dành ít hơn sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được công việc đầu tiên của họ.
Nhưng nếu chúng ta muốn lấy thông tin từ nhiều bảng và kết hợp kết quả thành một bảng thì sao? Đó là nơi mà các tham gia xuất hiện.
Phép nối cho phép bạn truy vấn nhiều bảng và tạo tập hợp kết quả kết hợp với các hàng phù hợp. Có ba loại liên kết chính:INNER JOIN
, OUTER JOIN
và CROSS JOIN
.
INNER JOIN
s trả về các hàng phù hợp trong cả hai bảng bạn đang truy vấn, trong khi OUTER JOIN
s trả về các hàng ngay cả khi chúng không có các hàng liên quan trong bảng đã tham gia. CROSS JOIN
s là các phép nối mà không có điều kiện nối và mỗi hàng của bảng được kết hợp với hàng tương ứng của bảng khác.
Tham gia bên ngoài SQL
Như chúng ta đã thảo luận, khi bạn thực hiện INNER JOIN
, các hàng từ một trong hai bảng chưa được so khớp trong bảng khác sẽ không được trả về trong tập kết quả. Nhưng nếu chúng ta muốn nhận được những giá trị này thì sao? Chúng ta có thể sử dụng OUTER JOIN
để truy xuất dữ liệu này.
Có ba loại OUTER JOIN
:
-
LEFT OUTER JOINS
trả về các hàng chưa khớp từ bảng bên trái; -
RIGHT OUTER JOINS
trả về các hàng chưa khớp từ bảng bên phải; -
FULL OUTER JOINS
trả về các hàng chưa đối sánh từ tất cả các bảng.
OUTER JOIN
s có khả năng đối sánh các bản ghi từ cả hai bảng dựa trên nhu cầu của chúng tôi và sẽ trả về tất cả các bản ghi có liên quan đến kiểu kết hợp mà chúng tôi sử dụng.
Kết hợp SQL:Trái
Các phép nối bên trái trả về tất cả các hàng từ bảng bên trái và các hàng từ bảng bên phải nơi đáp ứng điều kiện liên kết.
Giả sử chúng ta có hai bảng:employees
và company_departments
. Bây giờ, giả sử rằng chúng ta muốn lấy tên của mọi nhân viên cũng như tên bộ phận của họ, ngay cả khi họ không được chỉ định vào bất kỳ bộ phận nào. Chúng tôi có thể lấy thông tin này bằng cách sử dụng LEFT JOIN
.
Dưới đây là ví dụ về LEFT JOIN
truy vấn sẽ truy xuất tên của mọi nhân viên và tên phòng ban của họ bằng cách kết hợp các nhân viên và bảng company_dep domains với nhau bằng cách sử dụng giá trị chung của chúng:Department_id.
CHỌN nhân viên.name, company_dep domains.nameFROM nhân viênLEFT THAM GIA company_departmentON staff.department_id =company_dep domains.department_id;
Truy vấn của chúng tôi trả về như sau:
name | tên |
Luke | Bán hàng |
Mike | Bán hàng |
Hannah | Bán hàng |
Geoff | Bán hàng |
Alexis | Bán hàng |
Emma | Tiếp thị |
Jonah | Điều hành |
Adam | |
(8 hàng)
Như bạn thấy, LEFT JOIN
đã trả lại tất cả các hàng từ employees
bảng, ngay cả khi không thể tìm thấy bộ phận mà họ làm việc trong company_departments
bảng.
Nếu bạn muốn tìm hiểu thêm về các phép nối trái, bạn có thể đọc hướng dẫn Career Karma trên SQL
hoạt động ở đây.
Tham gia SQL:Đúng
RIGHT JOIN
câu lệnh đối lập trực tiếp với LEFT JOIN
nhà điều hành. RIGHT JOIN
trả về tất cả các hàng từ bảng bên phải cũng như các hàng từ bảng bên trái nơi đáp ứng điều kiện kết hợp.
Giả sử chúng tôi muốn có được danh sách tên của tất cả các phòng ban cũng như tên của mọi nhân viên làm việc trong các phòng ban đó. Và chúng tôi cũng muốn lấy dữ liệu cho những phòng ban không có nhân viên nào được phân công. Chúng tôi có thể sử dụng truy vấn sau để lấy dữ liệu này:
CHỌN staff.name, company_dep domains.name AS "DeptName" TỪ NHÂN VIÊNTruy vấn trên trả về như sau:
name | “tên ghi nợ” |
Luke | Bán hàng |
Mike | Bán hàng |
Hannah | Bán hàng |
Geoff | Bán hàng |
Alexis | Bán hàng |
Emma | Tiếp thị |
Jonah | Điều hành |
| Bảng lương |
| Công nghệ thông tin |
(9 hàng)
Như bạn có thể thấy, truy vấn của chúng tôi đã trả về danh sách tất cả các phòng ban, cũng như tên của mọi nhân viên làm việc cho các phòng ban đó. Truy vấn cũng đã trả về các phòng ban Payroll
và Information Technology
, hiện không có nhân viên.
Ngoài ra, truy vấn của chúng tôi không trả về Adam, nhân viên từ LEFT JOIN
của chúng tôi truy vấn ai không được chỉ định vào bất kỳ bộ phận nào. Điều này là do RIGHT JOIN
bao gồm tất cả các hàng từ bảng bên phải — company_dep domains — nơi các điều kiện của chúng tôi được đáp ứng và Adam không có bất kỳ liên kết nào với bất kỳ bản ghi nào trong bảng bên phải.
Kết hợp đầy đủ bên ngoài SQL
Full OUTER JOIN
s là một loại SQL join
không phổ biến có thể được sử dụng để trả về các bản ghi chưa khớp từ cả hai bảng. Thông thường, full OUTER JOIN
s được sử dụng với các hàm tổng hợp để hiểu mức độ chồng chéo tồn tại giữa hai bảng.
Giả sử chúng tôi muốn có danh sách tất cả nhân viên và phòng ban. Chúng tôi có thể sử dụng SQL
sau truy vấn để lấy thông tin đó:
CHỌN NHÂN VIÊN.name, company_dep domains.name AS "DeptName" TỪ NHÂN VIÊN ĐẦY ĐỦ NGOÀI THAM GIA company_dep domainsON staff.department_id =company_dep domains.department_id;
Truy vấn của chúng tôi trả về như sau:
name | “tên ghi nợ” |
Luke | Bán hàng |
Mike | Bán hàng |
Hannah | Bán hàng |
Geoff | Bán hàng |
Alexis | Bán hàng |
Emma | Tiếp thị |
Jonah | Điều hành |
Adam | |
| Bảng lương |
| Công nghệ thông tin |
(10 hàng)
Tập kết quả trên bao gồm danh sách tên của mọi nhân viên, cũng như bộ phận mà họ được chỉ định, ngay cả khi họ không được chỉ định vào bộ phận. Bộ kết quả cũng bao gồm danh sách tất cả các tên bộ phận, ngay cả khi bộ phận không có nhân viên nào được chỉ định.
Kết luận
Joins
là một SQL
chức năng máy chủ cho phép bạn truy vấn hai hoặc nhiều bảng cùng một lúc và tạo tập kết quả kết hợp. Ví dụ:nếu bạn muốn nhận danh sách nhân viên của công ty, cũng như ngày xử lý kiểm tra bảng lương gần đây nhất của họ, bạn có thể sử dụng join
.
Trong hướng dẫn này, chúng tôi tập trung vào OUTER JOIN
s, trả về các hàng trong một join
ngay cả khi chúng không có các hàng liên quan trong bảng đã tham gia. Chúng tôi cũng đã thảo luận về ba loại chính của OUTER JOIN
s— LEFT JOIN
, RIGHT JOIN
và full OUTER JOIN
—Và khám phá cách chúng hoạt động trong thực tế.
Bây giờ bạn đã sẵn sàng thực hiện SQL JOIN
hoạt động như một chuyên gia!