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.

Giả sử ta có hai table như sau:

products categories png

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.
  • T1T2 là hai table cần JOIN với nhau.
  • INNER JOIN là toán tử JOIN
  • ON 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ả:

SQL Server Inner Join example png

Hãy xem bức ảnh dưới đây để hiểu hơn lệnh Inner Join.

SQL Server INNER JOIN png

Giữa hai bảng chỉ có hai cặp trùng nhau đó là 2 - A3 - 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:

products categories brands png

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.

SQL Server Inner Join clause select from three tables example png

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é.

Ngẫu nhiên