Trong cơ sở dữ liệu quan hệ, thông tin thường được tổ chức thành nhiều bảng khác nhau để đảm bảo tính linh hoạt, tái sử dụng và dễ bảo trì. Tuy nhiên, để lấy được bức tranh tổng thể, chúng ta cần có cách “nối” các bảng lại với nhau, nhất là khi các bảng có mối liên hệ thông qua khóa chính – khóa ngoại. Trong bài học hôm nay, bạn sẽ học cách sử dụng INNER JOIN, một trong những kỹ thuật quan trọng nhất trong SQL để kết hợp dữ liệu từ nhiều bảng lại thành một kết quả logic và dễ đọc.
JOIN là gì?
JOIN là một kỹ thuật dùng để kết hợp các dòng dữ liệu từ hai hay nhiều bảng lại với nhau dựa trên một điều kiện liên kết, thường là khóa chính (Primary Key) ở bảng này và khóa ngoại (Foreign Key) ở bảng kia.
SQL có nhiều loại JOIN, trong đó INNER JOIN
là loại phổ biến và thường được dùng nhất.
INNER JOIN hoạt động như thế nào?
INNER JOIN
chỉ trả về những dòng có dữ liệu khớp ở cả hai bảng dựa theo điều kiện nối. Nếu không có dòng nào trùng nhau, kết quả sẽ không bao gồm những dòng đó.
Cú pháp:
SELECT ten_cot
FROM bang1
INNER JOIN bang2
ON bang1.khoa_chinh = bang2.khoa_ngoai;
Ví dụ thực tế
Giả sử bạn có 2 bảng:
students (danh sách học sinh)
id | name | class_id |
---|---|---|
1 | An | 1 |
2 | Bình | 2 |
3 | Châu | 1 |
classes (thông tin lớp học)
id | class_name |
---|---|
1 | Lớp A |
2 | Lớp B |
Bạn muốn lấy danh sách học sinh kèm tên lớp của họ:
SELECT students.name, classes.class_name
FROM students
INNER JOIN classes
ON students.class_id = classes.id;
Kết quả:
name | class_name |
---|---|
An | Lớp A |
Bình | Lớp B |
Châu | Lớp A |
Đặt bí danh (alias) cho bảng để viết gọn hơn
SELECT s.name, c.class_name
FROM students AS s
INNER JOIN classes AS c
ON s.class_id = c.id;
Việc đặt bí danh giúp câu lệnh ngắn gọn, dễ đọc, đặc biệt hữu ích khi truy vấn nhiều bảng có tên dài.
Một vài lưu ý khi dùng INNER JOIN
- Chỉ trả về dòng có kết quả khớp ở cả hai bảng.
- Nếu bảng có cột trùng tên, bạn cần dùng cú pháp
tenbang.tencot
để tránh lỗi. - INNER JOIN có thể kết hợp nhiều bảng cùng lúc.
Bài tập thực hành
Đề bài:
Bạn có 2 bảng orders
và customers
. Mỗi đơn hàng (orders
) có customer_id
tương ứng trong bảng customers
.
Hãy viết câu SQL để lấy danh sách đơn hàng và tên khách hàng tương ứng.
Tổng kết
INNER JOIN là một công cụ cực kỳ quan trọng khi bạn muốn truy vấn dữ liệu có mối liên hệ giữa các bảng. Nắm vững INNER JOIN sẽ giúp bạn xây dựng các câu truy vấn mạnh mẽ và chính xác hơn. Trong bài tiếp theo, chúng ta sẽ tìm hiểu về LEFT JOIN
– khi nào cần lấy tất cả dòng từ một bảng, kể cả khi không có bản ghi khớp ở bảng còn lại.
Thảo luận