Trong bài này, chúng ta sẽ tìm hiểu những kiến thức cơ bản về việc nối các bảng trong SQL. Chúng ta sẽ tìm hiểu về các phép nối bên trái, bên phải, bên trong và bên ngoài và đưa ra các ví dụ về cách sử dụng chúng.
Dữ liệu trong RDBMS (Hệ thống quản lý cơ sở dữ liệu quan hệ) được nhóm thành các bảng. Các bảng này có một định nghĩa cứng nhắc về loại dữ liệu có thể được lưu trữ trong chúng. Để kết nối các bảng khác nhau và do đó các loại dữ liệu khác nhau có thể liên quan đến nhau, chúng ta sẽ sử dụng mệnh đề JOIN.
Các loại THAM GIA
Có bốn loại THAM GIA cơ bản:INNER, OUTER, LEFT và RIGHT. Khi kết nối hai bảng, mỗi bảng sẽ trả về một tập con khác nhau của các bảng tương ứng dựa trên điều kiện trong mệnh đề ON.
- THAM GIA TRÁI và PHẢI thực hiện một tác vụ tương tự. Cả hai đều trả về toàn bộ một bảng với thông tin liên quan đến bảng thứ hai.
- INNER và OUTER JOIN thực hiện các tác vụ rất khác nhau. INNER JOIN tạo ra một kết quả rất hạn chế, trong khi OUTER trả về một tập dữ liệu hoàn chỉnh.
Trong ví dụ này, chúng tôi đang sử dụng ví dụ về bộ phận bán hàng cho hướng dẫn này, sử dụng ba bảng:nhân viên bán hàng, đơn đặt hàng và khách hàng.
Bảng nhân viên bán hàng sẽ có ba cột:id, tên và tỷ lệ hoa hồng.
Tiếp theo, bảng đơn đặt hàng sẽ chứa bốn cột:id đơn đặt hàng, tổng chi phí của đơn đặt hàng, khách hàng và nhân viên bán hàng, nếu có.
Bảng khách hàng sẽ chứa hai cột:id và thông tin liên hệ cơ bản.
Vì vậy, bây giờ chúng ta có nhiều bảng thông tin hữu ích cho những người khác nhau theo những cách khác nhau. Sử dụng ba bảng này (nhân viên bán hàng, đơn đặt hàng và khách hàng), chúng tôi sẽ cung cấp các ví dụ về cách mỗi THAM GIA có thể hữu ích.
THAM GIA TRÁI
Có lẽ loại THAM GIA được sử dụng phổ biến nhất là THAM GIA TRÁI. Nếu bạn nghĩ về hai bảng được nối với nhau, bảng được đề cập trong mệnh đề FROM nằm ở bên trái. Cái được đề cập trong mệnh đề JOIN nằm ở bên phải. Trong LEFT JOIN, mọi hàng từ bảng LEFT (hoặc FROM) được trả về trong kết quả và được liên kết với các hàng tương ứng từ bảng RIGHT (hoặc JOIN) khớp với mệnh đề ON.
Hãy nhớ rằng một số hàng trên LEFT có thể không có dữ liệu khớp trên RIGHT. Trong trường hợp đó, các trường sẽ được điền từ bảng RIGHT trong kết quả sẽ được điền bởi giá trị NULL.
Ngoài ra, nếu nhiều hàng trong bảng RIGHT khớp với các hàng từ bảng TRÁI, thì nhiều hàng sẽ được đưa vào tập kết quả. Biểu đồ Venn cho thấy một LEFT JOIN sẽ trông như thế nào được hình dung:
Giám đốc Tiếp thị yêu cầu bạn báo cáo về tất cả các đơn đặt hàng của khách hàng. Bạn có thể sử dụng THAM GIA TRÁI cho việc này:
SELECT *
FROM orders
LEFT JOIN customer
ON orders.customer_id = customer.id;
Truy vấn này yêu cầu tất cả dữ liệu trong bảng "đơn đặt hàng" được liên kết với các hàng trong bảng "khách hàng", trong đó id của khách hàng bằng với customer_id theo thứ tự. Kết quả sẽ như thế này:
Lưu ý rằng đối với khách hàng Widgets LLC, có ba mục nhập vì họ đã có ba đơn đặt hàng. Jolly Inc. đã đặt hai đơn đặt hàng và Acme Inc đã đặt một đơn đặt hàng. Cheapo không xuất hiện trong danh sách này vì không có đơn đặt hàng nào được đặt.
THAM GIA ĐÚNG
RIGHT JOIN rất giống với LEFT JOIN, ngoại trừ nó trả về mọi hàng từ bảng RIGHT (JOIN) và chỉ các hàng tương ứng từ bảng LEFT (FROM). Một lần nữa, nếu không có dữ liệu nào trong bảng TRÁI, thì các cột đó sẽ được điền với Giá trị NULL.
Nếu có nhiều hàng trong bảng TRÁI, thì sẽ có nhiều hàng trong tập kết quả. Biểu đồ Venn của nó sẽ giống như sau:
Nếu ban quản lý muốn có một báo cáo với MỌI khách hàng; ngay cả khi họ không đặt hàng, chúng tôi có thể sử dụng THAM GIA ĐÚNG.
SELECT *
FROM orders
RIGHT JOIN customer
ON orders.customer_id = customer.id;
Một lần nữa, chúng ta bắt đầu với bảng “đơn đặt hàng” và THAM GIA nó vào bảng khách hàng. Bởi vì chúng ta đã sử dụng RIGHT JOIN, nên khách hàng sẽ nhận được ít nhất một hàng cho mỗi mục nhập trong bảng RIGHT (JOIN). Khi có sự trùng khớp giữa customer.id và order.customer_id thì thông tin sẽ được điền vào. Kết quả bao gồm Cheapo Co với các giá trị NULL trong cột thứ tự:
THAM GIA INNER
INNER JOIN chỉ trả về các hàng từ mỗi cột phù hợp với mệnh đề ON. Nếu không có kết quả phù hợp trên PHẢI thì các hàng từ TRÁI sẽ bị loại trừ và ngược lại. Biểu đồ Venn cho INNER JOIN có dạng như sau:
Đó là ngày trả lương và bộ phận tính lương cần biết số tiền hoa hồng phải trả là bao nhiêu. Đối với điều này, họ sẽ cần biết các đơn đặt hàng đã được đặt thông qua từng nhân viên bán hàng. Lưu ý rằng không phải tất cả các đơn đặt hàng đều qua nhân viên bán hàng, vì vậy chúng tôi không quan tâm đến những đơn đặt hàng đó. Để làm được điều này, chúng ta có thể sử dụng INNER JOIN:
SELECT *,cost * commission_rate / 100 AS commission_amount
FROM orders
INNER JOIN salespeople
ON orders.salesperson_id = salespeople.id;
Một lần nữa chúng ta bắt đầu với bảng đơn đặt hàng. Lần này chúng ta đang THAM GIA nó với bảng nhân viên bán hàng. Nếu có mục nhập trong bảng đơn đặt hàng khớp với mục nhập trong bảng nhân viên bán hàng thì hàng đó sẽ được đưa vào. Thay vì điền các hàng chưa khớp với giá trị NULL, các hàng đó sẽ bị bỏ qua trong kết quả.
Xin lưu ý rằng chúng tôi đang nói với cơ sở dữ liệu không chỉ trả lại số tiền bán hàng và tỷ lệ hoa hồng mà còn cả hoa hồng đã tính. Kết quả sẽ như thế này:
THAM GIA NGOÀI TRỜI
OUTER JOIN trả về mọi thứ bất kể có trùng khớp hay không. Nếu bạn kết hợp các kết quả của THAM GIA TRÁI và PHẢI, bạn sẽ nhận được THAM GIA NGOÀI TRỜI. Biểu đồ Venn cho OUTER JOIN có dạng như sau:
Bây giờ, đã là cuối tháng và người quản lý bán hàng muốn biết TẤT CẢ doanh thu cũng như tất cả các khoản hoa hồng đã được thanh toán. Đối với điều này, chúng tôi sẽ sử dụng THAM GIA NGOÀI TRỜI:
SELECT *,cost * commission_rate / 100 AS commission_amount
FROM orders
FULL OUTER JOIN salespeople
ON orders.salesperson_id = salespeople.id;
Giống như báo cáo tiền lương, chúng tôi bắt đầu với các đơn đặt hàng và THAM GIA với nhân viên bán hàng. Sự khác biệt là với OUTER JOIN, bạn sẽ nhận được kết quả từ cả bảng TRÁI và PHẢI với NULL được điền vào nơi không có kết quả phù hợp tương ứng. Kết quả như sau:
Bây giờ, hãy nhớ rằng chúng tôi đã nói rằng MariaDB và MySQL không hỗ trợ OUTER JOIN. Chúng tôi cũng nói rằng nếu bạn thêm THAM GIA TRÁI vào THAM GIA PHẢI, bạn sẽ nhận được THAM GIA NGOÀI TRỜI. Bí quyết trong hai hệ thống đó là làm điều đó. Chúng tôi thực hiện điều này với điều khoản UNION. Nó thêm các kết quả của một truy vấn vào một truy vấn khác:
SELECT *,cost * commission_rate / 100 AS commission_amount
FROM orders
LEFT JOIN salespeople
ON orders.salesperson_id = salespeople.id
UNION
SELECT *,cost * commission_rate / 100 AS commission_amount
FROM orders
RIGHT JOIN salespeople
ON orders.salesperson_id = salespeople.id;
Kết quả sẽ như thế này:
NHIỀU THAM GIA
JOIN cũng cho phép bạn kết nối nhiều hơn hai bảng. Nếu chúng tôi muốn có một báo cáo bán hàng đầy đủ với thông tin khách hàng và nhân viên bán hàng, chúng tôi chỉ cần thực hiện một THAM GIA khác ở cuối.
SELECT *
FROM orders
LEFT JOIN salespeople
ON orders.salesperson_id = salespeople.id
LEFT JOIN customer
ON customer.id = orders.customer_id;
Trong ví dụ này, chúng tôi bắt đầu với bảng đơn đặt hàng và kết nối nó với bảng nhân viên bán hàng giống như chúng tôi đã làm trước đây. Bước tiếp theo là THAM GIA bảng vào bảng khách hàng. Điều này sẽ điền vào tất cả các thông tin có thể liên kết đến bảng đơn đặt hàng.
Bài viết này là một giới thiệu ngắn gọn và không phải là một cuộc thảo luận đầy đủ về cách có thể sử dụng JOIN trong SQL.
Nhấp vào bên dưới để sử dụng phiếu giảm giá thuận tiện này ngay hôm nay!
Liquid Web có một số máy chủ cơ sở dữ liệu mạnh nhất trong ngành. Các máy chủ này có thể được sử dụng để điều hành doanh nghiệp gia đình nhỏ nhất cho đến các cụm đa cơ sở dữ liệu lớn nhất cho các tập đoàn quy mô doanh nghiệp.
Hãy gọi cho chúng tôi theo số 800.580.4985 hoặc mở cuộc trò chuyện hoặc đặt vé với chúng tôi để nói chuyện với một trong những cố vấn Giải pháp hoặc Lưu trữ có kinh nghiệm của chúng tôi để tìm hiểu cách bạn có thể tận dụng những kỹ thuật này ngay hôm nay!