Câu lệnh SQL INNER JOIN trả về các hàng có giá trị chính xác trong hai cột trên hai bảng. Bạn có thể nối bảng qua một hoặc nhiều cột. Các câu lệnh JOIN kết nối hai bảng cơ sở dữ liệu và so sánh nội dung của chúng.
Có lúc bạn muốn lấy dữ liệu từ hai hoặc nhiều bảng cùng lúc và gộp kết quả.
Ví dụ: bạn muốn lấy danh sách sản phẩm và tên nhà cung cấp đã cung cấp sản phẩm đó. Thông tin tên sản phẩm và tên nhà cung cấp nằm ở hai bảng riêng biệt.
Đó là lúc SQL joins xuất hiện. Bằng cách dùng điều kiện join, bạn có thể kết hợp thông tin từ nhiều bảng thành một tập kết quả. SQL INNER JOIN là loại join trả về các bản ghi có giá trị cột khớp nhau trong hai bảng. Trong hướng dẫn này, chúng ta sẽ thảo luận cách dùng INNER JOIN.
SQL INNER JOIN
SQL INNER JOIN truy xuất tất cả bản ghi có giá trị cột xuất hiện trong hai bảng được chỉ định. Câu lệnh INNER JOIN dùng từ khóa ON để khớp dữ liệu qua hai bảng.
INNER JOIN là loại SQL join phổ biến nhất. Toán tử trả về bản ghi có khớp ở cả hai bảng.
Cú pháp từ khóa INNER JOIN:
SELECT name FROM customers INNER JOIN plans ON customers.plan_id = plans.id;
Truy vấn này kết hợp hàng từ bảng customers và plans. Trả về danh sách tất cả khách hàng có plan_id khớp với bất kỳ ID nào trong bảng plans.
Chúng ta dùng mệnh đề INNER JOIN để nối bảng. Từ khóa ON đứng sau tên bảng được nối. Bạn có thể chỉ định nhiều điều kiện sau ON bằng cách phân tách bằng dấu phẩy.
Ví dụ INNER JOIN SQL
Hiện tại chúng ta có cơ sở dữ liệu nhân viên lưu department_id của mỗi nhân viên trong bảng employees. Bảng này được tạo bằng câu lệnh SQL CREATE TABLE. Tên phòng ban lưu trong bảng riêng company_departments.
Bảng employees:
| employees | ||
|---|---|---|
| name | title | department_id |
| Luke | Sales Associate | 1 |
| Mike | Sales Associate | 1 |
| Hannah | Sales Associate | 1 |
| Geoff | Senior Sales Associate | 1 |
| Alexis | Sales Associate | 1 |
| Jonah | Vice President of Sales | 3 |
| Emma | Marketing Director | 2 |
(7 hàng)
Bảng phòng ban:
| company_departments | |
|---|---|
| department_id | name |
| 1 | sales |
| 2 | marketing |
| 3 | executive |
(3 hàng)
Giả sử muốn lấy tên, chức danh và tên phòng ban cho tất cả nhân viên. Dữ liệu nằm trong hai bảng: tên/chức danh trong employees, tên phòng ban trong company_departments.
Làm sao để lấy thông tin cần thiết?
Bảng employees có cột department_id lưu ID phòng ban nhân viên làm việc. Trong bảng company_departments, mỗi phòng ban cũng có ID (khóa chính). Điều này cho phép khớp department_id của nhân viên với danh sách phòng ban, từ đó tìm tên phòng ban nhân viên đó làm việc.
Viết truy vấn lấy tên nhân viên, chức danh và tên phòng ban:
SELECT Employees.Name, Employees.Title, Company_Departments.Name FROM Employees INNER JOIN Company_Departments ON Employees.Department_ID = Company_Departments.Department_ID;
Truy vấn trả về các hàng khớp:
| name | title | name |
|---|---|---|
| Alexis | Sales Associate | Sales |
| Geoff | Senior Sales Associate | Sales |
| Hannah | Sales Associate | Sales |
| Mike | Sales Associate | Sales |
| Luke | Sales Associate | Sales |
| Emma | Marketing Director | Marketing |
| Jonah | Vice President of Sales | Executive |
Dòng đầu: yêu cầu lấy tên và chức danh từ bảng employees, tên phòng ban từ bảng company_departments.
Dòng hai: chỉ định lấy thông tin nhân viên từ bảng employees. Dùng INNER JOIN nối bảng employees với company_departments (chứa tên phòng ban).
Dòng cuối: liên kết cả hai bảng bằng trường chung: department_id.
Kết luận
Câu lệnh SQL INNER JOIN truy xuất bản ghi có hai giá trị cột khớp nhau trên hai bảng. Câu lệnh ON cho phép chỉ định điều kiện thực thi inner join.
Làm chủ join là phần quan trọng trong truy vấn cơ sở dữ liệu SQL, và hiểu biết này sẽ đưa bạn gần hơn đến việc trở thành chuyên gia SQL.
Chúng tôi đã viết hướng dẫn how to learn SQL giúp người học như bạn làm chủ SQL. Hướng dẫn chứa danh sách tài nguyên học tập hàng đầu, khóa học và lời khuyên cách học SQL. Xem hướng dẫn tại trang How to Learn SQL.