INNER JOIN trong SQL Server

INNER JOIN trong SQL Server

Trong hướng dẫn này, bạn sẽ tìm hiểu cách sử dụng mệnh đề INNER JOIN trong SQL Server để truy vấn dữ liệu từ nhiều bảng.

Giới thiệu về INNER JOIN trongSQL Server

INNER JOIN là một trong những loại join được sử dụng phổ biến nhất trong SQL Server. Mệnh đề INNER JOIN cho phép bạn truy vấn dữ liệu từ hai hoặc nhiều bảng liên quan.

Xem các bảng products và bảng categories sau:

Giới thiệu về Inner Join trongSQL Server

Câu lệnh sau lấy thông tin sản phẩm từ bảng production.products:

SELECT
    product_name,
    list_price,
    category_id
FROM
    production.products
ORDER BY
    product_name DESC;

Đây là kết quả:

Giới thiệu về Inner Join trongSQL Server

Truy vấn chỉ trả về một danh sách các id của loại sản phẩm, không phải tên loại sản phẩm. Để bao gồm tên danh mục trong tập kết quả, bạn sử dụng mệnh đề INNER 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;

Đây là kết quả:

Giới thiệu về Inner Join trongSQL Server

Trong truy vấn này:

cp là các bí danh bảng của bảng production.categories  và  production.products. Bằng cách này, khi bạn tham chiếu một cột trong các bảng này, bạn có thể sử dụng alias.column_name thay vì sử dụng table_name.column_name.

Ví dụ: truy vấn sử dụng c.category_id thay vì production.categories.category_id. Do đó, nó giúp bạn tiết kiệm thời gian và truy vấn dễ đọc hơn.

Đối với mỗi bản ghi trong bảng production.products, mệnh đề INNER JOIN khớp với mọi bản ghi trong bảng product.categories dựa trên các giá trị của cột category_id:

  • Nếu cả hai bản ghi có cùng một giá trị trong cột category_id, mệnh đề INNER JOIN tạo thành một bản ghi mới có các cột từ các bản ghi của bảng production.categories và bảng production.products theo các cột trong danh sách kết quả và thêm bản ghi mới này trong tập kết quả.
  • Nếu bản ghi trong bảng production.products không khớp với bản ghi từ bảng production.categories, mệnh đề INNER JOIN sẽ bỏ qua các bản ghi này và không thêm chúng trong tập kết quả.

Cú pháp INNER JOIN trong SQL Server

Sau đây minh họa cú pháp của mệnh đề INNER JOIN trong SQL Server :

SELECT  
    c.id candidate_id,
    c.fullname candidate_name,
    e.id employee_id,
    e.fullname employee_name
FROM 
    hr.candidates c
    INNER JOIN hr.employees e 
        ON e.fullname = c.fullname;

Trong cú pháp này, truy vấn lấy dữ liệu từ cả hai bảng T1 và T2:

  • Đầu tiên, chỉ định bảng chính (T1) trong mệnh đề FROM.
  • Tiếp theo, chỉ định bảng thứ hai (T2) trong mệnh đề INNER JOIN và một biểu thức join. Chỉ các bản ghi có biểu thức join được đánh giá là TRUE mới được đưa vào tập kết quả.

Mệnh đề INNER JOIN so sánh mỗi bản ghi của bảng T1 với bản ghi của bảng T2 để tìm tất cả các cặp bản ghi đáp ứng biểu thức join.

Nếu biểu thức join được đánh giá là TRUE, giá trị các cột của các bản ghi khớp trong bảng T1 và T2 được kết hợp thành một bản ghi mới và được bao gồm trong tập kết quả.

Bảng dưới đây minh họa sự kết hợp bên trong của hai bảng T1 (1,2,3) và T2 (A, B, C). Kết quả bao gồm các bản ghi: (2, A) và (3, B) vì chúng có cùng mẫu.

Cú pháp INNER JOIN trong SQL Server

Lưu ý: từ khóa INNER là tùy chọn, bạn có thể bỏ qua nó như được trình bày trong truy vấn dưới đây.

SELECT
    select_list
FROM
    T1 JOIN T2 ON join_predicate;

Ví dụ INNER JOIN trong SQL Server

Xem các bảng products, categoriesbrands sau đây:

Ví dụ INNER JOIN trong SQL Server

Câu lệnh sau sử dụng hai mệnh đề INNER JOIN để truy vấn dữ liệu từ ba bảng:

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ả:

Ví dụ INNER JOIN trong SQL Server

Trong hướng dẫn này, bạn đã học cách sử dụng mệnh đề INNER JOIN trong SQL Server để truy vấn dữ liệu từ nhiều bảng.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *