Lệnh Inner Join trong SQL Server
Trong bài này ta sẽ học cách sử dụng lệnh INNERR JOIN trong SQL Server, nó sẽ giúp bạn liên kết các bảng với nhau thông qua khóa ngoại Foreign Key.
Hiện có ba các JOIN liên kết khóa ngoại chủ yếu như sau:
- Inner Join
- Left Join
- Right Join
Tuy nhiên trong bài đầu tiên này ta chỉ tìm hiểu Inner Join thôi nhé, hai loại còn lại sẽ được trình bày ở các bài tiếp theo.
1. Giới thiệu Inner Join trong SQL Server
Không chỉ SQL Server mà ở hầu hết các hệ quản trị CSDL quan hệ hiện nay thì Inner join được sử dụng nhiều nhất trong các loại Join, nó giúp ta liên kết nhiều table với nhau thông qua ràng buộc khóa ngoại.
Bài viết này được đăng tại [free tuts .net]
Giả sử ta có hai table như sau:
Bảng products có một khóa ngoại liên kêt đến bảng categories: products.category_id = categories.category_id
.
Câu hỏi đặt ra là làm sao lấy được thông tin của mỗi sản phẩm và chuyên mục mà sản phẩm đó thuộc về. Nếu bạn nghĩ đến truy vấn hai bảng thì đó là phép tích đề cát, và đương nhiên kết quả sẽ không như mong đợi.
SELECT * FROM products, categories
Nó sẽ trả ra kết quả là cấp số nhân của tổng record của hai bảng. Ví dụ bảng products
có 10 sản phẩm, bảng categories
có 2 chuyên mục thì nó trả về tổng cộng 20 record (10 x 2 = 20).
Đây là dữ liệu không đúng, vì vậy ta sẽ phải sử dụng một phép tích khác, đó là phép Inner Join.
Cú pháp của Inner Join như sau:
SELECT select_list FROM T1 INNER JOIN T2 ON join_predicate;
Trong đó:
select_list
là danh sách các field bạn muốn chọn ở hai bảng.T1
vàT2
là hai table cần JOIN với nhau.INNER JOIN
là toán tử JOINON join_predicate
là điều kiện JOIN.
Như table trên thì ta sẽ viết câu truy vấn JOIN như sau:
SELECT product_name, category_name, list_price FROM production.products p INNER JOIN production.categories c ON c.category_id = p.category_id ORDER BY product_name DESC;
Hãy chú ý c.category_id = p.category_id
chính là điều kiện JOIN giữa hai bảng. Nó sẽ so sánh record giữa hai bảng nếu có giá trị category_id
trùng nhau thì sẽ chọn. Vì vậy kết quả sẽ chính xác hơn.
Kêt quả:
Hãy xem bức ảnh dưới đây để hiểu hơn lệnh Inner Join.
Giữa hai bảng chỉ có hai cặp trùng nhau đó là 2 - A
và 3 - B
.
Lưu ý rằng Inner Join là từ khóa đầy đủ, bạn có thể rút gọn bằng cách viết JOIN mà thôi.
SELECT select_list FROM T1 JOIN T2 ON join_predicate;
SQL Server sẽ tự động hiểu đây là loại INNER JOIN.
2. Ví dụ về Inner Join trong SQL Server
Bây giờ ta sẽ làm một ví dụ phức tạp hơn đó là mối liên hệ giữa ba bảng.
Hãy xem cấu trúc của ba bảng như sau:
Bảng products
sẽ có hai mối liên hệ. Mỗi sản phẩm sẽ thuộc một category
và thuộc một brand
.
Bây giờ có bài toán yêu cầu như sau: Hãy lấy danh sách sản phẩm kèm thông tin về chuyên mục và thương hiệu mà nó thuộc về.
Để làm bài này thì ta thực hiện phép JOIN giữa ba bảng với nhau, và bảng products
là bảng chính bởi nó có các khóa ngoại liên kết để hai bảng còn lại.
SELECT product_name, category_name, brand_name, list_price FROM production.products p INNER JOIN production.categories c ON c.category_id = p.category_id INNER JOIN production.brands b ON b.brand_id = p.brand_id ORDER BY product_name DESC;
Đây là kết quả trả về từ câu truy vấn này.
Trên là những thông tin cơ bản về phép Inner Join trong SQL Server. Hy vọng bạn hiểu bài, nếu có vướng mắc gì hãy bình luận hoặc tham gia nhóm hỏi đáp freetuts để đăng câu hỏi nhé.