Thứ Ba, 25 tháng 7, 2023

Lệnh Left Join trong SQL Server

Trong bài này chúng ta sẽ tìm hiểu Left Join trong SQL Server. Nếu Inner Join là tích hai bảng và chỉ lấy các dòng trùng khóa ngoại với nhau thì Left Join sẽ lấy thêm cả các dòng mà bảng bên trái có nhưng bên phải không có.

Mục lục

  • 1. Cú pháp Left Join trong SQL Server
  • 2. Ví dụ về Left Join trong SQL Server
  • 3. Thêm lệnh Where trong Left Join

1. Cú pháp Left Join trong SQL Server

Left Join sẽ hợp hai bảng lại và lấy những cặp record thỏa mãn ở điều kiện ON + Những dòng dữ liệu ở bảng bên trái có nhưng bảng bên phải không có.

Bạn có đọc phần lý tuyết về Left Join trong SQL để hiểu rõ hơn. Trong bài này mình chỉ nói đến cú pháp và cách dùng mà thôi.

Cú pháp:

1
2
3
4
5
6
SELECT
    select_list
FROM
    T1
LEFT JOIN T2 ON
    join_predicate;

Trong đó select_list là những field mà bạn muốn câu lệnh này tra về. Bạn có thể chọn các field bất kì, miễn là nó thuộc một trong hai bảng T1 và T2.

join_predicate chính là điều kiện kiểm tra ràng buộc giữa hai bảng. Nếu dòng record nào thỏa điều kiện này thì ta gọi là thỏa điều kiện ON.

Left Join sẽ trả về những dòng thỏa điện kiện ở ON với nhau và những dòng mà bảng T1 có dữ liệu nhưng bảng T2 không có.

SQL Server LEFT JOIN png

2. Ví dụ về Left Join trong SQL Server

Hãy thực hành ví dụ để bạn hiểu rõ hơn lệnh Left Join trong SQL Server.

Giả sử ta có ba table gồm: productsorder_items và orders có mối liên hệ như lược đồ diagram sau:

orders order items products png

Mỗi đơn hàng sẽ có nhiều sản phẩm, vì vậy ta sẽ có bảng trung gian nằm giữa để chia mối quan hệ (n - n) này thành hai mối quan hệ mới:

  • Gữa products và order_items là (1 - n)
  • Giữa orders và order_items là (1 - n)

Bây giờ cần lấy danh sách tên sản phẩm và mã số order_id của các đơn hàng, nhưng với điều kiện là lấy luôn những sản phẩm không có đơn nào, vì vậy ta sẽ đặt bảng products nằm bên trái và order_items nằm bên phải.

1
2
3
4
5
6
7
8
SELECT
    product_name,
    order_id
FROM
    production.products p
LEFT JOIN sales.order_items o ON o.product_id = p.product_id
ORDER BY
    order_id;

SQL Server Left Join example png

Như bạn thấy, có một số sản phẩm không có đơn hàng nào và cung có một số sản phẩm có nhiều đơn hàng. Như trong hình thì ta thấy có nhiều sản phẩm nằm trong đơn hàng có order_id = 1.

Đấy là join 2 bảng, bây giờ ta sẽ làm một ví dụ join 3 bảng với nhau.

1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT
    p.product_name,
    o.order_id,
    i.item_id,
    o.order_date
FROM
    production.products p
    LEFT JOIN sales.order_items i
        ON i.product_id = p.product_id
    LEFT JOIN sales.orders o
        ON o.order_id = i.order_id
ORDER BY
    order_id;

Với trường hợp này thì SQL Server sẽ thực hiện 2 lần Join như sau:

  • Lần thứ nhất join bảng products với order_items => tạo ra danh sách các record và nói là một bảng tạm. Lúc này bảng products là bảng bên trái.
  • Lần thứ hai join bảng tạm đó với bảng orders, lúc này bảng tạm chính là bảng bên trái.

Và đây là kết quả:

SQL Server LEFT JOIN join three tables png

3. Thêm lệnh Where trong Left Join

Nếu bạn muốn lọc thêm điều kiện thì hãy đặt nó trong lệnh WHERE nhé.

Giả sử mình cần lấy thông tin tên các sản phẩm mã đơn hàng của đơn hàng có order_id = 100.

1
2
3
4
5
6
7
8
9
10
SELECT
    product_name,
    order_id
FROM
    production.products p
LEFT JOIN sales.order_items o
   ON o.product_id = p.product_id
WHERE order_id = 100
ORDER BY
    order_id;

Như bạn thấy mình đã đặt thêm điều kiện WHERE order_id = 100 để lọc dữ liệu theo yêu cầu bài toán.

SQL Server Left Join and WHERE clause png

Hãy thử di chuyển order_id = 100 vào ON xem thế nào nhé.

1
2
3
4
5
6
7
8
9
10
11
SELECT
    p.product_id,
    product_name,
    order_id
FROM
    production.products p
    LEFT JOIN sales.order_items o
         ON o.product_id = p.product_id AND
            o.order_id = 100
ORDER BY
    order_id DESC;

SQL Server LEFT JOIN move condition to ON clause png

Kết quả hoàn toàn khác, bởi vì ta đang sử dụng Left Join nên nó trả về luôn cả những record mà bảng bên trái có dữ liệu mà bảng bên phải không có.

Trên là tất cả những kiến thức cơ bản về lệnh Left Join trong SQL Server. Nếu còn vướng mắc thì hãy đặt câu hỏi ở phần bình luận 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