Thông thường, Lệnh JOINS trong SQL được sử dụng để kết nối các thông tin trong các bảng khác nhau, điều kiện JOINS là một phần trong truy vấn SQL để truy xuất các hàng từ 2 bảng trở lên.
Điều kiện lệnh JOINS trong SQL được sử dụng trong các lệnh SELECT, UPDATE, DELETE với mệnh đề WHERE trong SQL.
Lệnh JOINS trong SQL
Cú pháp lệnh JOINS trong SQL để liên kết 2 bảng:
SELECT col1, col2, col3...
FROM table_name1, table_name2
WHERE table_name1.col2 = table_name2.col1;
Nếu điều kiện JOINS trong SQL bị bỏ qua hoặc nếu không hợp lệ, nó sẽ trả về sản phẩm Cartesian của bộ bản ghi từ 2 hoặc nhiều bảng kết nối. Sản phẩm Cartesian trả về số hàng tương đương sản phẩm của tất cả các hàng trong 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ứ 2 có 10 hàng, kết quả trả về sẽ là 20 * 10, tương đương 200 hàng. Truy vấn này mất nhiều thời gian để thực thi.
Ví dụ lệnh JOINS trong SQL
Sử dụng điều kiện JOINS trong SQL để kết nối 2 bảng dưới đây:
Bảng cơ sở dữ liệu Product:
Bảng cơ sở dữ liệu order_items:
Điều kiện JOINS trong SQL được phân thành 2 loại Equi join và Non Equi join.
SQL Equi join
Điều kiện của lệnh JOINS trong SQL này sử dụng dấu bằng (=) làm toán tử so sánh. Equi join được phân làm 2 loại: SQL Outer join và SQL Inner join.
Ví dụ: bạn có thể lấy thông tin khách hàng mua sản phẩm và số lượng sản phẩm.
SQL Non equi join
Điều kiện này sử dụng các toán tử so sánh khác, chẳng hạn như >, <,>=, <>
1. Tìm hiểu SQL Equi Join
Một equi-join được phân thành 2 loại:
- SQL Inner Join
- SQL Outer Join
1.1. SQL Inner Join
Tất cả các hàng trả về bởi truy vấn SQL thỏa mãn điều kiện kết nối SQL được chỉ định.
Ví dụ SQL Inner Join:
Nếu muốn hiển thị thôn tin sản phẩm cho mỗi đơn hàng, truy vấn sẽ có dạng như dưới đây. Vì bạn đang lấy dữ liệu từ 2 bảng nên cần xác định cột chung giữa 2 bảng là product_id.
Truy vấn SQL có dạng như dưới đây:
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 phải được tham chiếu bởi tên bảng trong điều kiện Join, vì product_id là cột nằm trong cả 2 bảng và cần phải được xác định bằng 1 cách. Điều này để tránh sử dụng các cột trong lệnh SELECT trong SQL.
Số của điều kiện Join là (n-1), nếu có nhiều hơn 2 bảng kết nối trong một truy vấn, trong đó n là số lượng bảng liên quan. Quy tắc phải đúng để tránh sản phẩm Cartesian.
Ngoài ra bạn cũng có thể sử dụng các bí danh để tham chiếu tên cột, truy vấn sẽ có dạng như dưới đây:
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 cùng các hàng không thỏa mãn điều kiện từ một trong số các bảng. Toán tử SQL Outer Join trong Oracle là (+) và chỉ được 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 là khác nhau. 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 dữ liệu trong bảng order items, với các 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 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 riêng, đặ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 a.sales_person_id, a.name, a.manager_id, b.sales_person_id, b.name
FROM sales_person a, sales_person b
WHERE a.manager_id = b.sales_person_id;
2. SQL Non Equi Join
Non Equi Join là lệnh JOIN trong SQL có điều kiện được thiết lập bằng cách sử dụng tất cả các toán tử so sánh, ngoại trừ toán tử bằng (=). Chẳng hạn như > =, <=,><,>.
Ví dụ SQL Non Equi Join:
Nếu muốn tìm tên những sinh viên không đăng ký học môn kinh tế, truy vấn SQL sẽ có dạng như dưới đây (sử dụng bảng thông tin sinh viên mà Taimienphi.vn đã giới thiệu trong các bài viết trước):
SELECT first_name, last_name, subject
FROM student_details
WHERE subject != 'Economics'
Đầu ra sẽ có dạng như dưới đây:
https://thuthuat.taimienphi.vn/lenh-joins-trong-sql-33474n.aspx
Trên đây là các thông tin chi tiết và ví dụ về lệnh JOINS trong SQL. Về cơ bản lệnh JOINS trong SQL được sử dụng để kết nối các thông tin trong các bảng khác nhau, Ngoài ra, các bạn cũng có thể tìm hiểu thêm lệnh UPDATE trong SQL tại đây. Nếu có thắc mắc hoặc câu hỏi nào cần giải đáp, bạn vui lòng để lại ý kiến trong phần bình luận bên dưới bài viết nhé.
,>=,>,>