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

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:
Bài viết này được đăng tại [free tuts .net]
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ó.

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: products, order_items và orders có mối liên hệ như lược đồ diagram sau:

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 
productsvàorder_itemslà (1 - n) - Giữa 
ordersvàorder_itemslà (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.
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;
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.
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 
productsvớiorder_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ảngproductslà 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ả:

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

Hãy thử di chuyển order_id = 100 vào ON xem thế nào nhé.
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;
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é.

            Thiết lập ID tăng tự động với Identity trong SQL Server        
            Khóa ngoại (Foreign Key) trong MySQL        
            Mô hình thực thể mối kết hợp (ER)        
            Gộp dữ liệu với UNION và UNION ALL trong SQL        
            Hàm Hàm TO_DATE trong Oracle        
                Cách khai báo biến trong PHP, các loại biến thường gặp            
                Download và cài đặt Vertrigo Server            
                Thẻ li trong HTML            
                Thẻ article trong HTML5            
                Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên            
                Cách dùng thẻ img trong HTML và các thuộc tính của img            
                Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng