Thứ Ba, 25 tháng 7, 2023

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.

Mục lục

  • 1. Giới thiệu Inner Join trong SQL Server
  • 2. Ví dụ về Inner Join trong SQL Server

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:

1
2
3
4
5
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ử 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:

1
2
3
4
5
6
7
8
9
10
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 - 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.

1
2
3
4
5
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.

1
2
3
4
5
6
7
8
9
10
11
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 để đăng câu hỏi nhé.

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master