Điều kiện Kết Hợp trong SQL được sử dụng trong các lệnh SELECT, UPDATE, DELETE với mệnh đề WHERE trong SQL.
Lệnh Kết Hợp trong SQL
Cú pháp Kết Hợp trong SQL để nối 2 bảng:
CHỌN col1, col2, col3...
TỪ tên_bảng1, tên_bảng2
Ở ĐÂU tên_bảng1.col2 = tên_bảng2.col1;
Nếu không xác định điều kiện Kết Hợp trong SQL hoặc điều kiện này không hợp lệ, kết quả sẽ là sản phẩm Descartes của các bản ghi từ 2 hoặc nhiều bảng kết nối. Sản phẩm Descartes trả về số hàng tương đương với tích số hàng của tất cả các bảng được kết nối.
Ví dụ, nếu bảng đầu tiên có 20 hàng và bảng thứ hai có 10 hàng, kết quả trả về sẽ là 20 * 10, tức là 200 hàng. Truy vấn này yêu cầu thời gian thực thi lớn.
Ví dụ về lệnh Kết Hợp trong SQL
Sử dụng điều kiện Kết Hợp trong SQL để nối 2 bảng dưới đây:
Bảng dữ liệu Sản Phẩm:
Bảng dữ liệu order_items:
Điều kiện Kết Hợp trong SQL được chia thành 2 loại: Kết Hợp Equi và Kết Hợp Non Equi.
Kết Hợp Equi trong SQL
Điều kiện trong lệnh Kết Hợp SQL này sử dụng dấu bằng (=) làm toán tử so sánh. Kết Hợp Equi được chia thành 2 loại: Kết Hợp Outer SQL
Ví dụ: Bạn có thể trích xuất thông tin về khách hàng và số lượng sản phẩm mà họ mua.
Kết Hợp Non Equi SQL
Điều kiện này sử dụng các toán tử so sánh khác như >, <,>=, <>
1.1. Tìm Hiểu về SQL Equi Join
Một equi-join được chia thành 2 dạng:
- SQL Inner Join
- SQL Outer Join
1.1. SQL Inner Join
Tất cả các hàng trả về từ truy vấn SQL đều đáp ứng điều kiện kết nối được chỉ định.
Ví dụ về SQL Inner Join:
Để hiển thị thông tin sản phẩm cho mỗi đơn hàng, truy vấn có dạng như sau. Vì bạn đang trích xuất dữ liệu từ 2 bảng, cần phải xác định cột chung giữa 2 bảng là product_id.
Truy vấn SQL sẽ có dạng như sau:
SELECT order_id, product_name, unit_price, supplier_name, total_units
FROM product, order_items
WHERE order_items.product_id = product.product_id;
Các cột cần được chỉ định bằng tên bảng trong điều kiện Join vì product_id là một cột tồn tại trong cả hai bảng.
Số lượng điều kiện Join là (n-1), trong trường hợp có nhiều hơn 2 bảng được kết nối trong một truy vấn. Điều này giúp tránh tạo ra sản phẩm Cartesian.
Bạn cũng có thể sử dụng các bí danh để tham chiếu tên cột, và truy vấn sẽ có dạng như sau:
SELECT o.order_id, p.product_name, p.unit_price, p.supplier_name, o.total_units
FROM product p, order_items o
WHERE o.product_id = p.product_id;
1.2. SQL Outer Join
Điều kiện Join trả về tất cả các hàng từ cả 2 bảng thỏa mãn điều kiện kết nối và các hàng không thỏa mãn điều kiện từ ít nhất một trong số các bảng. Toán tử SQL Outer Join trong Oracle được ký hiệu bằng (+) và chỉ sử dụng ở một phía của điều kiện Join.
Các cú pháp triển khai RDBMS khác nhau có sự khác biệt. Rất ít trong số các cú pháp này đại diện cho các điều kiện Join như 'sql left outer join', 'sql right outer join'.
Nếu muốn hiển thị tất cả dữ liệu trong bảng product cùng với dữ liệu trong bảng order items, và giá trị null được hiển thị cho các đơn đặt hàng nếu một sản phẩm không có mặt hàng, truy vấn SQL Outer Join có dạng như dưới đây:
SELECT p.product_id, p.product_name, o.order_id, o.total_units
FROM order_items o, product p
WHERE o.product_id (+) = p.product_id;
Lưu ý: Nếu toán tử (+) được sử dụng ở phía bên trái của điều kiện Join, nó tương đương với SQL left outer join. Nếu được sử dụng ở phía bên phải điều kiện Join, nó tương đương với SQL right outer join.
SQL Self Join
SQL Self Join là một kiểu JOIN trong SQL, được sử dụng để kết nối một bảng với chính nó, đặc biệt trong trường hợp bảng có FOREIGN KEY tham chiếu PRIMARY KEY. Cần đảm bảo lệnh JOIN phải xác định bí danh cho cả 2 bản sao của bảng.
Ví dụ dưới đây là truy vấn SQL Self Join:
SELECT nhân_viên_a.id, nhân_viên_a.tên, nhân_viên_a.quản_lý_id, nhân_viên_b.id, nhân_viên_b.tên
FROM nhân_viên nhân_viên_a, nhân_viên nhân_viên_b
WHERE nhân_viên_a.quản_lý_id = nhân_viên_b.id;
2. SQL Non Equi Join
Non Equi Join là lệnh JOIN trong SQL sử dụng các điều kiện so sánh khác nhau, chẳng hạn như >=, <=, >, <.
Ví dụ SQL Non Equi Join:
Nếu muốn tìm tên của sinh viên chưa đăng ký môn học kinh tế, truy vấn SQL có dạng như sau (sử dụng bảng thông tin sinh viên đã giới thiệu trong các bài trước):
SELECT first_name, last_name, subject
FROM student_details
WHERE subject <> 'Kinh tế'
Kết quả truy vấn sẽ hiển thị như sau:
Dưới đây là thông tin chi tiết và ví dụ về lệnh JOINS trong SQL. Lệnh JOINS thường được sử dụng để kết nối thông tin từ các bảng khác nhau. Nếu bạn quan tâm đến lệnh UPDATE trong SQL, bạn có thể tìm hiểu thêm ở đây. Nếu có câu hỏi hoặc thắc mắc, hãy để lại ý kiến trong phần bình luận dưới bài viết.