Bài viết Left Outer Join Là Gì thuộc chủ đề về Hỏi Đáp đang được rất nhiều bạn quan tâm đúng không nào !! Hôm nay, Hãy cùng TruongGiaThien.Com.Vn tìm hiểu Left Outer Join Là Gì trong bài viết hôm nay nha !
Các bạn đang xem nội dung về : “Left Outer Join Là Gì”

Học SQL Joins cơ bản: một trong số những khái niệm quan trọng nhất trong dùng SQL cho Data Analyst.

Bạn đang xem: Left outer join là gì

Chào các bạn, chúng ta sẽ tiếp tục chuỗi các bài viết về SQL cơ bản cho một Data Analyst. Nếu các bạn chưa đọc phần 0 thì đọc bài trước tại đây. Còn những bạn khác thì “enjoy your time”.

Trong bài viết lần này chúng ta sẽ làm quen với khái niệm mà bắt buộc các bạn phải nắm vững. Mình xin nhấn mạnh lại là các bạn phải thật sự hiểu được sự vận hành của nó để tránh những điều kiện về sau.

Như tiêu đề, trong loạt bài này mình sẽ giải thích những loại JOINs khác nhau trong SQL và những chú ý khi dùng JOINs.

những loại JOINs cơ bản Inner, Outer, Left và Right JoinsMột số loại JOINs đặc biệt khác Self và Cross, Natural JoinsLàm gì nếu các bạn muốn Join nhiều hơn 2 bảng (3+)Những lưu ý khi thực hiện Join, đặc biệt là từ 3+

Đầu tiên chúng ta cần hiểu được SQL Join là gì và vì sao vận dụng đúng SQL Join lại cực kỳ quan trọng?

Mục Lục

1 SQL JOINs là gì và tại sao lại cần SQL Join?2 4 loại SQL Joins cơ bản

SQL JOINs là gì và tại sao lại cần SQL Join?

Trả lời cho câu hỏi thứ nhất, “SQL Join là gì?”: các bạn hiểu đơn giản là lệnh Join trong SQL giúp chúng ta lấy được dữ liệu từ nhiều bảng khác nhau dựa trên một (hoặc nhiều) trường dữ liệu kết nối.

Một định nghĩa bằng tiếng anh từ W3school:

“A JOIN clause is used to combine rows from two or more tables, based on a related column between them.”

Chỉ có vậy thôi. Không cần suy nghĩ gì nhiều cho phức tạp cả. Những trường dữ liệu kết nối này thường sẽ là một mã (ID) nào đó, hoặc là ngày tháng hoặc một thành phố,…

Vậy tại sao chúng ta lại phải cần đến SQL Joins?

Đọc xong định nghĩa chắc ai cũng khả năng tự trả lời câu hỏi này nhĩ…

đơn giản là dữ liệu của chúng ta sẽ không bao giờ nằm ở một bảng mà sẽ được chia ra nhiều bảng khác nhau. Điều này giúp việc quản lý cơ sở dữ liệu (CSDL) hiệu quả hơn nhiều.

chính vì thế chúng ta luôn cần phải dùng SQL joins cho việc lấy dữ liệu. hiện nay mình đang làm một dự án cho bộ phận Sale và mình chả nhớ nỗi là mình dùng đến bao nhiêu bảng dữ liệu khác nhau (-_-!)

Vậy nên các bạn đừng xem nhẹ phần này nha. Theo mình cảm nhận thì SQL Joins, nếu không quan trọng nhất thì cũng đứng thứ 2.

Cái còn lại sẽ được nói trong các bài sau.

Okay… Vậy cách thức vận hành của SQL Joins cơ bản như thế nào và dùng ra sao?

Cách thức vận hành và dùng cơ bản của SQL Joins

*

Nguồn

SQL Joins được vận hành dựa trên nguyên tắc đơn giản là thông qua trường dữ liệu kết nối (chung) để lấy dữ liệu từ 2 (hay nhiều) bảng khác nhau. Nếu các bạn học về Relational Database, thì những trường này sẽ THƯỜNG là các Primary Key và Foreign Key. Nhưng không phải lúc nào cũng vậy!

Chúng ta hãy làm quen với cú pháp trước nha.

Cú pháp dùng SQL Joins cơ bản

Cách dùng lệnh SQL Joins như sau

Join phải luôn luôn đi SÁT ngay sau lệnh From2 bảng phải có ít nhất một trường dữ liệu chungCú pháp dùng:

select Table1 as t1 — bắt buộc Table2 as t2 — bắt buộcTrong đó Table1 và Table2 là 2 bảng chúng ta cần nối lại để lấy thông tin. T1 và T2 là tên viết tắt (tên thay thế ngắn gọn) của Table1 và Table2. t1.ID = t2.ID là điều kiện chúng ta nối bảng. Và sẽ quyết định dữ liệu chúng ta lấy ra sẽ có kết quả ntn. chi tiết từng loại Join và cách dùng sẽ được giải thích ở phần sau. Trước tiên chúng ta đến phần giải thích chi tiết hơn cách dùng. 

Cách gộp 2 bảng dữ liệu – SQL Join cơ bản

Để minh họa cho phần này, mình sẽ dùng ví dụ trong bài viết trước của mình về công việc của một data analyst (ai chưa đọc thì đọc tại đây nha).

Chúng ta có 3 bảng dữ liệu khác nhau gồm Orders, Returns và People. Và bắt buộc là kiểm tra xem ở tiểu bang X có bao nhiêu Order bị trả về. Để trả lời cho bắt buộc này, chúng ta cần phải có dữ liệu từ 2 bảng khác nhau là Orders và Returns.

Bài Nổi Bật  Chuyển nhượng là gì trong bóng đá? Mùa chuyển nhượng kéo dài bao lâu?

Nhưng để làm được đó, trước tiên, chúng ta cần tìm xem trong bảng Orders và Returns thì cột nào là chung của cả 2 bảng. đơn giản thấy được đó sẽ là Order_ID.

Tiếp đến sẽ là những thông tin rất cần thiết khác như State và Returned.

Cuối cùng chúng ta sẽ có đoạn mã sau đây:

Selec O.State, count (R.Order_ID) as Num_ReturnsFrom Orders as O Right Join Returns as R on R.Order_id = O.Order_idWhere O.State = ‘X’Đối với những bạn chưa đọc bài cơ bản thì đọc lại trước nha, sau đó sẽ hiểu tại sao lại có lệnh trên nha.

Đối với các bạn còn lại, chúng ta sẽ thấy có một đoạn code mới ở đây là Right Join Returns as R on R.Order_id = O.Order_id

Nó vận hành ntn thì đọc tiếp nha.

4 loại SQL Joins cơ bản

Trong phần này chúng ta sẽ làm quen với 4 loại SQL Join cơ bản mà gần như ngày nào mình cũng dùng ít nhất một. Đặc biệt là LEFT JOIN, đây là kinh nghiệm được sếp chia sẻ (lý do được giải thích phần sau)

Bây giờ mình bắt đầu nha

Left (Outer) Join và Right (Outer) Join

Đầu tiên giải thích cái tên trước nha. Left Join và Left Outer Join là một và bạn khả năng dùng cái nào mình thích. Không có gì khác nhau ở đây. Tương tự với Right Join và Right Outer Join. Vì về mặt bản chất, LEFT JOIN và RIGHT JOIN vận hành tương tự nhau nên mình gộp chung lại 1 phần.

Phần này mình sẽ nói kỹ một chút để các phần sau các phần sau ko phải nói lại. Không phí thời gian đâu các bạn ha. Cứ hiểu cái gốc xong sau này khỏe lắm.

Trước đây mình hời hợt với phần này vì nghĩ nó đơn giản. Đến lúc đi làm lại loài ra cả núi vấn để. Thế là phải đi đọc lại.

Ok, mình tiếp tục nha

Vậy LEFT JOIN và RIGHT JOIN vận hành ntn?

Các bạn xem hình sau trước nha:

Bây giờ nhìn hình chắc hiểu nhẹ nhẹ rồi ha.

Để giải thích kỹ hơn mình sẽ bắt đầu bằng cú pháp trước nha

Select *From TableA as TALeft (Right) Join TableB as TB on TA.ID = TB.IDKhi các bạn thực hiện bất cứ một phép SQL JOINS nào cũng nên nhớ là Table ở lệnh FROM sẽ là trung tâm chính của cả khối lệnh. Trong ví dụ trên sẽ là TableA.

Sau khi đã có được bảng dữ liệu trung tâm, chúng ta thực hiện gộp (JOIN) các bảng dữ liệu khác đến sau vào với bảng chính, ở đây là TableB.

Tiếp đến nó sẽ lấy ra toàn bộ dữ liệu của bảng chính hoặc bảng phụ tùy thuộc vào lệnh LEFT hay RIGHT và một phần dữ liệu trùng nhau ở bảng còn lại.

Nếu là LEFT nó sẽ lấy toàn bộ dữ liệu ở bảng chính còn RIGHT sẽ là toàn bộ dữ liệu từ bảng phụ. Và phần dữ liệu chung của bảng còn lại.

Xem thêm: Melamine Là Gì – Cấu Tạo Và ưu Nhược điểm

Lưu ý: dữ liệu chung ở đây được tính theo mỗi dòng dữ liệu (1 row) thỏa điều kiện đưa ra và nó sẽ bao gồm dữ liệu của tất cả các cột (all columns). Hiểu đơn giản là các bạn filter bảng phụ theo điều kiện trước sau đó thực hiện phép Join.

Các bạn xem tiếp phần ví dụ nha.

Left (Outer) Join và Right (Outer) Join (tt)

Để minh họa chi tiết mình sẽ dùng 2 bảng dữ liệu là Orders và Returns trong bài viết trước của mình. Nhìn lại hình bên dưới nếu bạn quên nha.

*

Tiếp theo chúng ta sẽ phân biệt 2 lệnh LEFT và RIGHT qua 2 câu hỏi sau:

Hãy cho biết tổng tổng giá trị của các đơn hàng bị trả lại và không bị trả lạiHãy cho biết tổng tổng giá trị của các đơn hàng bị trả lại

Trả lời cho câu 1: LEFT JOIN

Chúng ta sẽ có được lệnh SQL như sau

Select R.Returned as TraHang, — yes/nullsum(O.Sales * O.Quantity) as TongGiaTriFrom Order as OLeft join Returns as R on O.Order_id = R.Order IDGroup by TraHangĐầu tiên, vì chúng ta dùng LEFT JOIN nên hệ thống sẽ lấy tất cả dữ liệu của bảng Orders trước. Sau đó sẽ thêm những dữ liệu từ bảng Returns tương ứng với điều kiện O.Order_id = R.Order_ID. Chúng ta sẽ có được bảng tương tự như sau

O.Order_IDR.Order_IDTraHangTongGiaTri
CA-2017-125451nullnull2.22
CA-2017-156391CA-2017-156391Yes2.224
CA-2015-146829nullnull2.224
US-2017-102288nullnull2.264
US-2015-128090US-2015-128090Yes2.304
Bài Nổi Bật  Chứng Quyền Có Bảo Đảm Là Gì ? Hướng Dẫn Toàn Tập Về Chứng Quyền (2021)

Lúc này bạn sẽ thấy ở cột TraHang và cột R.Order_ID, sẽ có những ô với tổng giá trị là Yes và những ô khác sẽ có tổng giá trị NULL. Cột TraHang và R.Order_ID là cột dữ liệu lấy từ bảng Returns.

Thật ra chữ NULL là mình tự gắn vào, trên thực tế nếu bạn thấy NULL có nghĩa là ô đó đang trống và ko có dữ liệu gì cả.

Lưu ý chỗ này quan trọng nè:

Những ô có tổng giá trị Yes là những ô có tổng giá trị Order_ID cùng xuất hiện ở cả bảng Orders và bảng Returns. Tất cả dữ liệu khác đều được giữ lại. Và …

Những ô có tổng giá trị Order_ID ko kết nối ở bảng Orders sẽ được giữ lại toàn bộ và những trường lấy từ Returns sẽ có tổng giá trị NULL (ko có gì cả). Nhưng những ô có tổng giá trị Oder_ID ko kết nối ở bảng returns sẽ bị loại bỏ tất cả.

Đây là lý do tại sao chúng ta có bảng dữ liệu trên.

Tiếp đến hệ thống sẽ thực hiện gộp các dữ liệu trên thành nhóm là yes hoặc null. Và sau cùng sẽ là thực hiện phép tính tổng tổng giá trị cho mỗi nhóm. Cuối cùng chúng ta được kết quả sau:

TraHangTongGiaTri
null10599341
Yes888721.3

Lúc này chúng ta sẽ có được bảng dữ liệu chỉ ra rằng rằng sự khác nhau giữa tổng giá trị của các đơn hàng bị trả lại và những đơn hàng thành công.

Nhìn lại hình của LEFT JOIN chút nha.

Tổng kết: với SQL Left Join, mọi tổng giá trị của bảng dữ liệu chính (Table A) sẽ được giữ nguyên và chỉ lấy thêm những cột dữ liệu từ bảng phụ (Table B) được kết nối theo điều kiện chi tiết. Những ô dữ liệu ko có kết nối từ bảng phụ sẽ được hiển thị là null (ko có tổng giá trị)

Với nguyên tắc tương tự chúng ta đến với câu thứ 2

Câu thứ 2: RIGHT JOIN

Nguyên tắc tương tự như với LEFT JOIN nha, chỉ khác nhau một vài điểm thôi

Đầu tiên là lệnh SQL, chúng ta thay LEFT thành RIGHT

Select R.Returned as TraHang, — yes/nullsum(O.Sales * O.Quantity) as TongGiaTriFrom Order as ORight join Returns as R on O.Order_id = R.Order IDGroup by TraHangNgược lại với lệnh LEFT JOIN, bảng dữ liệu sau khi RIGHT JOIN sẽ bao gồm toàn bộ dữ liệu ở bảng Returns (bảng phụ) và chỉ những dữ liệu được kết nối ở bảng Orders (bảng chính). Chúng ta sẽ có kết quả như bảng:

Order_IDOrder_IDTraHangTongGiaTri
CA-2017-140151CA-2017-140151Yes55999.84
CA-2017-100111CA-2017-100111Yes31769.4
CA-2017-123491CA-2017-123491Yes23829.68
CA-2017-166093CA-2017-166093Yes22664.61
US-2015-126214US-2015-126214Yes21038.81

Trường hợp này chúng ta sẽ ko thấy tổng giá trị null vì tất cả các Order_ID ở bảng Returns đều có mặt ở bảng Orders. Nếu các bạn thêm vào một vài điều kiện khác, chúng ta sẽ có thấy có tổng giá trị null. Bài viết sau sẽ đi sâu vào vấn đề này.

Và cuối cùng, hệ thống sẽ tính toán và trả lại kết quả sau

TraHangTongGiaTri
Yes888721.3

Cùng nhìn lại mô hình của RIGHT Join nha

Tổng kết: Với SQL Right Join, toàn bộ dữ liệu ở bảng phụ (Table B) sẽ được giữ lại cộng với dữ cột liệu kết nối từ bảng chính (Table A). Những ô dữ liệu ko có kết nối từ bảng chính sẽ có tổng giá trị là null.

Đến đây hy vọng là các bạn hiểu được cách thức vận hành của LEFT JOIN và RIGHT JOIN. Nếu chưa hiểu thì

… hmmm …

Đọc lại lần nữa nha (-_*)

Từ phần sau mình sẽ dựa trên nguyên tắc phía trên và đi khá nhanh.

Inner Join (Join)

Trước khi mình giải thích các bạn thử nhìn hình đoán nghĩa trước nha.

Các bạn có 1p để suy nghĩ. Bắt đầu

*

Sao nào? Dựa theo hình bạn khả năng đoán được cách thức vận hành của Inner Join chưa nào?

Nếu các bạn đoán được thì chúc mừng nha. Còn nếu chưa đoán được thì mình cũng chúc mừng vì bạn đã cố gắng suy nghĩ.

Cách thức vận hành của Inner Join khá đơn giản. Nó sẽ chỉ trả về những dữ liệu được kết nối giữa 2 bảng. Có nghĩa là chỉ những row có dữ liệu chung thuộc cả 2 bảng mới được giữ lại.

Với 2 bảng dữ liệu trên chúng ta sẽ có lệnh SQL như sau

Select R.Returned as TraHang, — yes/nullsum(O.Sales * O.Quantity) as TongGiaTriFrom Order as OInner Join Returns as R on O.Order_id = R.Order IDGroup by TraHangBảng dữ liệu sau khi Join sẽ giống như sau.

Xem thêm: Bán Lẻ Tiếng Anh Là Gì

Order_IDOrder_IDTraHangTongGiaTri
CA-2017-140151CA-2017-140151Yes55999.84
CA-2017-100111CA-2017-100111Yes31769.4
CA-2017-123491CA-2017-123491Yes23829.68
CA-2017-166093CA-2017-166093Yes22664.61
US-2015-126214US-2015-126214Yes21038.81
Bài Nổi Bật  resolved là gì

Bạn sẽ thấy nó giống như là với RIGHT JOIN. đơn giản là vì trong trường hợp này, bảng Returns là bảng con của Orders và tất cả các Order_ID đều lấy từ bảng Orders gốc. Nếu chúng ta thêm vào một vài điều kiện thì kết quả sẽ khác đi. (Giới thiệu trong bài viết sau)

Cuối cùng chúng ta có kết quả sau:

TraHangTongGiaTri
Yes888721.3

Tổng kết: với SQL Inner Join, dữ liệu cuối cùng sẽ chỉ bao gồm những dữ liệu thỏa mãn điều kiện kết nối có ở cả 2 bảng

Full (Outer) Join

Đọc tên thôi chắc cũng hiểu sơ ý nghĩa của nó rồi ha. Chúng ta tiếp tục với xem hình đoán ý nghĩa nha.

Các bạn có 1p. Bắt đầu!

Hy vọng lần này 100% các bạn sẽ đoán được ý nghĩa của Full Join. Comment phần kết quả của bạn nha!

*

Giờ đến lượt mình!

Hiểu đơn giản thế này, nó sẽ lấy toàn bộ dữ liệu từ chung từ Table A và Table B cộng với những dữ liệu riêng của từng bảng. Những dòng dữ liệu nào ko có kết nối sẽ có tổng giá trị null.

Chúng ta thử Full Join với 2 bảng dữ liệu trên:

Select R.Returned as TraHang, — yes/nullsum(O.Sales * O.Quantity) as TongGiaTriFrom Order as OFull Outer Join Returns as R on O.Order_id = R.Order IDGroup by TraHangLúc này các bạn sẽ có bảng dữ liệu sau khi JOIN tương tự như LEFT JOIN phía trên. Lý do là vì bảng Orders có tất cả Order_ID trong bảng Returns. Với những điều kiện phụ chúng ta khả năng sẽ có 2 kết quả khác nhau (giải thích trong bài sau)

O.Order_IDR.Order_IDTraHangTongGiaTri
CA-2017-125451nullnull2.22
CA-2017-156391CA-2017-156391Yes2.224
CA-2015-146829nullnull2.224
US-2017-102288nullnull2.264
US-2015-128090US-2015-128090Yes2.304

Và cuối cùng chúng ta sẽ có được kết quả giống hệt với LEFT JOIN

TraHangTongGiaTri
null10599341
Yes888721.3

Tổng kết: vơi FULL Outer Join, chúng ta sẽ có được dữ liệu kết nối từ 2 bảng chính và phụ cộng thêm với những dữ liệu ko kết nối từ cả 2 bảng. Những ô dữ liệu ko kết nối sẽ có tổng giá trị 

Tổng kết

Bài này mình dự kiến sẽ viết chung tất cả nhưng đến lúc viết thì nội dung hơi dài nên sẽ chia ra làm 2 phần. Phần này các bạn đã được giới thiệu sơ về những kiểu SQL Joins cơ bản. Trong phần tiếp theo mình sẽ đi sâu hơn một tí về Join. Viết luôn một lần sau này khỏi phải viết lại. Bài sau sẽ bao gồm những nội dung sau:

Những “biến thể” từ những SQL Joins cơ bảnNhững loại SQL Joins đặc biệt khácNếu bạn muốn join nhiều hơn 2 bảng thì sao (3+)Những lưu ý đặc biệt khi dùng SQL Joins Những kinh nghiệm để dùng SQL Joins một cách hiệu quả nhất

Thực hành

Phần việc của mình cũng xong rồi. Đến lượt các bạn thực hành rồi nha. Cách tốt nhất để hiểu là thực hành thôi các bạn.

Vậy thực hành ntn?

Các bạn đã có được database mẫu của mình rồi, bây giờ các bạn thực hiện lại tất cả những câu lệnh SQL Join cơ bản trên và dùng bảng People và Orders nha. Nếu chưa có thì lấy nó ở link này

Chắc tốn của các bạn tầm 15p là tối đa cho bài thực hành này thôi.

Nhớ là comment phần code của bạn lên đây nha! Và chia sẻ ý kiến cũng như kinh nghiệm.

Chúc các bạn vui vẻ! Và hẹn gặp lại các bạn trong phần sau của bài viết với những thông tin nâng cao hơn chút nha!

Chuyên mục: Hỏi Đáp

Các câu hỏi về Left Outer Join Là Gì


Nếu có bắt kỳ câu hỏi thắc mắt nào vê Left Outer Join Là Gì hãy cho chúng mình biết nha, mõi thắt mắt hay góp ý của các bạn sẽ giúp mình nâng cao hơn hơn trong các bài sau nha <3Bài viết Left Outer Join Là Gì ! được mình và team xem xét cũng như tổng hợp từ nhiều nguồn. Nếu thấy bài viết Left Outer Join Là Gì Cực hay ! Hay thì hãy ủng hộ team Like hoặc share. Nếu thấy bài viết Left Outer Join Là Gì rât hay ! chưa hay, hoặc cần bổ sung. Bạn góp ý giúp mình nha!!

Các Hình Ảnh Về Left Outer Join Là Gì

Left Outer Join Là Gì

Các từ khóa tìm kiếm cho bài viết #Left #Outer #Join #Là #Gì

Tra cứu thêm thông tin về Left Outer Join Là Gì tại WikiPedia

Bạn khả năng tìm thông tin chi tiết về Left Outer Join Là Gì từ web Wikipedia tiếng Việt.◄

Tham Gia Cộng Đồng Tại

💝 Nguồn Tin tại: https://truonggiathien.com.vn/

💝 Xem Thêm Chủ Đề Liên Quan tại : https://truonggiathien.com.vn/hoi-dap/

Give a Comment