Lệnh JOIN trong sql giúp lấy dữ liệu nhiều bảng

Khi bạn cần lấy dữ liệu từ nhiều bảng có mối quan hệ với nhau trong cơ sở dữ liệu của mình, lệnh JOIN trong SQL sẽ trở nên vô cùng quan trọng. Lệnh này cho phép bạn kết hợp thông tin từ các bảng khác nhau, tạo ra kết quả mới chứa dữ liệu kết hợp. Ví dụ, bạn có thể sử dụng lệnh JOIN để lấy thông tin từ bảng ‘Khách hàng’ và bảng ‘Đơn hàng’ để tạo một bảng kết quả chứa thông tin về khách hàng và đơn hàng tương ứng.

Bài viết này unitop hướng dẫn bạn cách sử dụng lệnh JOIN trong SQL, cùng với ví dụ cụ thể và giải thích về các loại JOIN cơ bản như INNER JOIN, LEFT JOIN, RIGHT JOIN và FULL JOIN.”

4 lệnh join trong sql thường dùng

Khi có 2 hoặc nhiều bảng liên kết với nhau thông qua khóa phụ, việc lấy dữ liệu giữa nhiều bảng ở trong một lần select trở nên rất quan trọng.

Một ví dụ thực tế là mối quan hệ giữa bảng lưu đơn hàng orders và bảng khách hàng customers. Trong khu vực quản lý khi xuất danh sách đơn hàng ta muốn hiển thị luôn ai là người đặt đơn hàng bảng.

Chính từ yêu cầu đó trong quá trình xuất dữ liệu tự bảng orders ta cần nối với bảng customers theo một điều kiện liên kết qua khóa ngoại để lấy chính xác người đã đặt hàng trước khi xuất ra màn hình.

Quá trình này được gọi là join và xuất dữ liệu trong sql.

Quá trình join dữ liệu có 4 loại và đây là sự khác nhau giữa chúng.

  • INNER JOIN: Trả về các bản ghi có giá trị khớp trong cả hai bảng
  • LEFT JOIN: Trả về tất cả các bản ghi từ bảng trái và các bản ghi khớp từ bảng phải
  • RIGHTJOIN: Trả về tất cả các bản ghi từ bảng phải và các bản ghi khớp từ bảng trái
  • FULL JOIN: Trả về tất cả các bản ghi khi có sự khớp trong bảng trái hoặc bảng phải

Ví dụ lệnh join trong sql

Dưới đây là ví dụ về hai bảng: “Orders” (Đơn hàng) và “Customers” (Khách hàng) với các trường dữ liệu mới và cách thực hiện cả bốn loại JOIN.

Bảng “Orders”:

+---------+-------------+-----------------+------------+
| order_id | total_amount | product_quantity | customer_id |
+---------+-------------+-----------------+------------+
| 1       | 100         | 3               | 101        |
| 2       | 200         | 2               | 102        |
| 3       | 150         | 1               | 103        |
| 4       | 120         | 2               | 101        |
+---------+-------------+-----------------+------------+

Bảng “Customers”:

+------------+---------+---------------+----------------+
| customer_id | fullname | phone_number | address        |
+------------+---------+---------------+----------------+
| 101        | Alice   | 123-456-7890  | 123 Main St    |
| 102        | Bob     | 987-654-3210  | 456 Elm St     |
| 103        | Eve     | 555-123-4567  | 789 Oak St     |
| 104        | Frank   | 777-888-9999  | 101 Pine St    |
+------------+---------+---------------+----------------+

#1. INNER JOIN: Trả về các đơn hàng có khách hàng khớp trong cả hai bảng.

SELECT Orders.order_id, Customers.fullname, total_amount
FROM Orders
INNER JOIN Customers ON Orders.customer_id = Customers.customer_id;

Kết quả:

+---------+---------+-------------+
| order_id| fullname| total_amount|
+---------+---------+-------------+
| 1       | Alice   | 100         |
| 2       | Bob     | 200         |
| 3       | Eve     | 150         |
+---------+---------+-------------+

#2. LEFT JOIN: Trả về tất cả các đơn hàng từ bảng “Orders” và các đơn hàng khớp từ bảng “Customers.”

SELECT Orders.order_id, Customers.fullname, total_amount
FROM Orders
LEFT JOIN Customers ON Orders.customer_id = Customers.customer_id;

Kết quả:

+---------+---------+-------------+
| order_id | fullname | total_amount |
+---------+---------+-------------+
| 1       | Alice   | 100         |
| 2       | Bob     | 200         |
| 3       | Eve     | 150         |
| 4       | Alice   | 120         |
+---------+---------+-------------+

RIGHT JOIN: Trả về tất cả các khách hàng từ bảng “Customers” và các đơn hàng khớp từ bảng “Orders.”

SELECT Orders.order_id, Customers.fullname, total_amount
FROM Orders
RIGHT JOIN Customers ON Orders.customer_id = Customers.customer_id;

Kết quả:

+---------+---------+-------------+
| order_id | fullname | total_amount |
+---------+---------+-------------+
| 1       | Alice   | 100         |
| 2       | Bob     | 200         |
| 3       | Eve     | 150         |
| NULL    | Frank   | NULL        |
+---------+---------+-------------+

FULL JOIN: Trả về tất cả đơn hàng khi có khớp trong cả bảng “Orders” và bảng “Customers.”

SELECT Orders.order_id, Customers.fullname, total_amount
FROM Orders
FULL JOIN Customers ON Orders.customer_id = Customers.customer_id;

Kết quả:

+---------+---------+-------------+
| order_id | fullname | total_amount |
+---------+---------+-------------+
| 1       | Alice   | 100         |
| 2       | Bob     | 200         |
| 3       | Eve     | 150         |
| 4       | Alice   | 120         |
| NULL    | Frank   | NULL        |
+---------+---------+-------------+

Với thông tin trường dữ liệu mới, ví dụ này giúp bạn hiểu cách thực hiện các loại JOIN với bảng Orders và Customers trong SQL.

Kết luận

Bài viết này tôi đã chia sẻ đến bạn cách sử dụng join dữ liệu giữa 2 hoặc nhiều bảng trong dự án. Tên thực tế, trong 4 loại inner join, left join, right join, out join thì inner join là cách lấy dữ liệu ta hay sử dụng nhất.

Việc của bạn ngay bây giờ hãy thực hành tạo cơ sở dữ liệu sau đó tiến hành thực hành lại các ví dụ trên để hiểu rõ cách làm việc với join trong sql.

Nếu có bất kỳ khó khăn nào bạn hãy để lại ở phần comment, đừng quên xem thêm Php Master nếu bạn muốn trở thành backend web developer.

Phan Văn Cương founder unitop.vn

Đề xuất cho bạn

Subscribe
Notify of
guest

0 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments

Tặng Ebook chia sẻ kinh nghiệm học lập trình web đi làm cho người mới bắt đầu!

Đây là tấm bản đồ chia sẻ lại cách học lập trình web đi làm đã giúp nhiều học trò của unitop kiếm được thu nhập từ 8-30tr mỗi tháng.

Ebook Bí quyết học lập trình web đi làm - Phan Văn Cương - Unitop.vn
0
Bạn đang nghĩ gì? Hãy để lại bình luận tại đâyx
()
x