Lệnh Inner Join trong SQL Server – Freetuts

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 link những bảng với nhau trải qua khóa ngoại Foreign Key .

test php

banquyen png

Bài viết này được đăng tại

freetuts.net

, không được copy dưới mọi hình thức.

Hiện có ba những JOIN link khóa ngoại đa phần như sau :

  • Inner Join
  • Left Join
  • Right Join

Tuy nhiên trong bài tiên phong này ta chỉ khám phá Inner Join thôi nhé, hai loại còn lại sẽ được trình diễn ở những 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 những hệ quản trị CSDL quan hệ lúc bấy giờ thì Inner join được sử dụng nhiều nhất trong những loại Join, nó giúp ta link nhiều table với nhau trải qua ràng buộc khóa ngoại .Bài viết này được đăng tại [ không tính tiền tuts. net ]
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 khá đầy đủ, bạn hoàn toà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 hóa 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à tác dụng 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 phản hồi hoặc tham gia nhóm hỏi đáp freetuts để đăng câu hỏi nhé .