Left outer join là gì

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

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

Chào những bạn, tất cả chúng ta sẽ liên tục chuỗi những bài viết về SQL cơ bản cho một Data Analyst. Nếu những 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ự hoạt động của nó để tránh những khó khăn về sau.

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

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

Các 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+Các loại JOINs cơ bản Inner, Outer, Left và Right JoinsMột số loại JOINs đặc biệt quan trọng khác Self và Cross, Natural JoinsLàm gì nếu những bạn muốn Join nhiều hơn 2 bảng ( 3 + ) Những chú ý quan tâm khi thực thi Join, đặc biệt quan trọng là từ 3 +Đầu tiên tất cả 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ục1 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?

1 SQL JOINs là gì và tại sao lại cần SQL Join ? 2 4 loại SQL Joins cơ bảnTrả lời cho câu hỏi thứ nhất, “ SQL Join là gì ? ” : những bạn hiểu đơn thuần là lệnh Join trong SQL giúp tất cả chúng ta lấy được tài liệu từ nhiều bảng khác nhau dựa trên một ( hoặc nhiều ) trường tài liệu link .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 tâm lý gì nhiều cho phức tạp cả. Những trường tài liệu link 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 tất cả chúng ta lại phải cần đến SQL Joins ?Đọc xong định nghĩa chắc ai cũng hoàn toàn có thể tự vấn đáp thắc mắc này nhĩ …Đơn giản là tài liệu của tất cả chúng ta sẽ không khi nào 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 trị cơ sở tài liệu ( CSDL ) hiệu suất cao hơn nhiều .Chính thế cho nên tất cả chúng ta luôn cần phải sử dụng SQL joins cho việc lấy tài liệu. Hiện tại mình đang làm một dự án Bất Động Sản cho bộ phận Sale và mình chả nhớ nỗi là mình dùng đến bao nhiêu bảng tài liệu khác nhau ( – _ – ! )

Vậy nên các bạn đừng xem nhẹ phần này nhé. 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 những bài sau .Okay … Vậy phương pháp hoạt động giải trí của SQL Joins cơ bản như thế nào và sử dụng thế nào ?

Cách thức hoạt động và sử dụng cơ bản của SQL Joins

*NguồnSQL Joins được hoạt động giải trí dựa trên nguyên tắc đơn thuần là trải qua trường tài liệu link ( chung ) để lấy tài liệu từ 2 ( hay nhiều ) bảng khác nhau. Nếu những bạn học về Relational Database, thì những trường này sẽ THƯỜNG là những Primary Key và Foreign Key. Nhưng không phải khi nào cũng vậy !Chúng ta hãy làm quen với cú pháp trước nhé .

Cú pháp sử dụng SQL Joins cơ bản

Cách sử dụng lệnh SQL Joins như sauJoin 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 sử dụng:Join phải luôn luôn đi SÁT ngay sau lệnh From2 bảng phải có tối thiểu một trường tài liệu chungCú pháp sử 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. Cụ thể từng loại Join và cách sử 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 cụ thể 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ẽ sử dụng ví dụ trong bài viết trước của mình về việc làm của một data analyst ( ai chưa đọc thì đọc tại đây nhé ) .Chúng ta có 3 bảng tài liệu khác nhau gồm Orders, Returns và People. Và nhu yếu là kiểm tra xem ở tiểu bang X có bao nhiêu Order bị trả về. Để vấn đáp cho nhu yếu này, tất cả chúng ta cần phải có tài liệu từ 2 bảng khác nhau là Orders và Returns .Nhưng để làm được đó, thứ nhất, tất cả 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. Dễ dàng thấy được đó sẽ là Order_ID .Tiếp đến sẽ là những thông tin thiết yếu khác như State và Returned .Cuối cùng tất cả 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 nhé, sau đó sẽ hiểu tại sao lại có lệnh trên nhé .Đối với những bạn còn lại, tất cả 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 _idNó hoạt động giải trí ntn thì đọc tiếp nhé .

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 mở màn nhé

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

Đầu tiên lý giải cái tên trước nhé. Left Join và Left Outer Join là một và bạn hoàn toàn có thể sử 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 thực chất, LEFT JOIN và RIGHT JOIN hoạt động giải trí tựa như 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 ít để những phần sau những phần sau ko phải nói lại. Không phí thời hạn đâu những 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 thuầ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 liên tục nhé

Vậy LEFT JOIN và RIGHT JOIN hoạt động ntn?

Các bạn xem hình sau trước nhé :…Bây giờ nhìn hình chắc hiểu sơ sơ rồi ha .Để lý giải kỹ hơn mình sẽ khởi đầu bằng cú pháp trước nhé

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 tài liệu TT, tất cả chúng ta triển khai gộp ( JOIN ) những bảng tài 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ụ nhé .

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

Để minh họa đơn cử mình sẽ sử dụng 2 bảng tài 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 nhé .*Tiếp theo tất cả 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 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 giá trị của các đơn hàng bị trả lạiHãy cho biết tổng giá trị của những đơn hàng bị trả lại và không bị trả lạiHãy cho biết tổng giá trị của những đơ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 sử 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_IDTraHangTongGiaTriCA-2017-125451nullnull2.22CA-2017-156391CA-2017-156391Yes2.224CA-2015-146829nullnull2.224US-2017-102288nullnull2.264US-2015-128090US-2015-128090Yes2.304Lúc này bạn sẽ thấy ở cột TraHang và cột R.Order _ID, sẽ có những ô với giá trị là Yes và những ô khác sẽ có giá trị NULL. Cột TraHang và R.Order _ID là cột tài 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 tiễn nếu bạn thấy NULL có nghĩa là ô đó đang trống và ko có tài liệu gì cả .Lưu ý chỗ này quan trọng nè :Những ô có giá trị Yes là những ô có giá trị Order_ID cùng Open ở cả bảng Orders và bảng Returns. Tất cả tài liệu khác đều được giữ lại. Và …

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

Đây là nguyên do tại sao tất cả chúng ta có bảng tài liệu trên .Tiếp đến mạng lưới hệ thống sẽ thực thi gộp những tài liệu trên thành nhóm là yes hoặc null. Và ở đầu cuối sẽ là triển khai phép tính tổng giá trị cho mỗi nhóm. Cuối cùng tất cả chúng ta được tác dụng sau :TraHangTongGiaTrinull10599341Yes888721.3Lúc này tất cả chúng ta sẽ có được bảng tài liệu cho thấy sự khác nhau giữa giá trị của những đơn hàng bị trả lại và những đơn hàng thành công xuất sắc .Nhìn lại hình của LEFT JOIN chút nha .

Tổng kết: với SQL Left Join, mọi 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 liên kết theo điều kiện cụ thể. Những ô dữ liệu ko có liên kết từ bảng phụ sẽ được hiển thị là null (ko có giá trị)

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

Câu thứ 2: RIGHT JOIN

Nguyên tắc tương tự như như với LEFT JOIN nhé, chỉ khác nhau một vài điểm thôiĐầu tiên là lệnh SQL, tất cả chúng ta thay LEFT thành RIGHTSelect 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 tài liệu sau khi RIGHT JOIN sẽ gồm có hàng loạt tài liệu ở bảng Returns ( bảng phụ ) và chỉ những tài liệu được link ở bảng Orders ( bảng chính ). Chúng ta sẽ có hiệu quả như bảng :Order_IDOrder_IDTraHangTongGiaTriCA-2017-140151CA-2017-140151Yes55999.84CA-2017-100111CA-2017-100111Yes31769.4CA-2017-123491CA-2017-123491Yes23829.68CA-2017-166093CA-2017-166093Yes22664.61US-2015-126214US-2015-126214Yes21038.81Trường hợp này tất cả chúng ta sẽ ko thấy giá trị null vì toàn bộ những Order_ID ở bảng Returns đều xuất hiện ở bảng Orders. Nếu những bạn thêm vào một vài điều kiện kèm theo khác, tất cả chúng ta sẽ có thấy có giá trị null. Bài viết sau sẽ đi sâu vào yếu tố này .Và ở đầu cuối, mạng lưới hệ thống sẽ thống kê giám sát và trả lại tác dụng sauTraHangTongGiaTriYes888721.3Cùng nhìn lại quy mô của RIGHT Join nhé

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 liên kết từ bảng chính (Table A). Những ô dữ liệu ko có liên kết từ bảng chính sẽ có giá trị là null.

Đến đây kỳ vọng là những bạn hiểu được phương pháp hoạt động giải trí của LEFT JOIN và RIGHT JOIN. Nếu chưa hiểu thì… hmmm …Đọc lại lần nữa nhé ( – _ * )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 lý giải những bạn thử nhìn hình đoán nghĩa trước nhé .Các bạn có 1 p để tâm lý. Bắt đầu*…Sao nào ? Dựa theo hình bạn hoàn toàn có thể đoán được phương pháp hoạt động giải trí của Inner Join chưa nào ?Nếu những bạn đoán được thì chúc mừng nhé. Còn nếu chưa đoán được thì mình cũng chúc mừng vì bạn đã nỗ lực tâm lý .Cách thức hoạt động giải trí của Inner Join khá đơn thuần. Nó sẽ chỉ trả về những tài liệu được link giữa 2 bảng. Có nghĩa là chỉ những row có tài liệu chung thuộc cả 2 bảng mới được giữ lại .Với 2 bảng tài liệu trên tất cả 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_IDTraHangTongGiaTriCA-2017-140151CA-2017-140151Yes55999.84CA-2017-100111CA-2017-100111Yes31769.4CA-2017-123491CA-2017-123491Yes23829.68CA-2017-166093CA-2017-166093Yes22664.61US-2015-126214US-2015-126214Yes21038.81Bạ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à toàn bộ những Order_ID đều lấy từ bảng Orders gốc. Nếu tất cả chúng ta thêm vào một số ít điều kiện kèm theo thì tác dụng sẽ khác đi. ( Giới thiệu trong bài viết sau )Cuối cùng tất cả chúng ta có hiệu quả sau :TraHangTongGiaTriYes888721.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 liên kết 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 liên tục với xem hình đoán ý nghĩa nhé .Các bạn có 1 p. Bắt đầu !Hy vọng lần này 100 % những bạn sẽ đoán được ý nghĩa của Full Join. Comment phần tác dụng của bạn nhé !*…Giờ đến lượt mình !Hiểu đơn thuần thế này, nó sẽ lấy hàng loạt tài liệu từ chung từ Table A và Table B cộng với những tài liệu riêng của từng bảng. Những dòng tài liệu nào ko có link sẽ có giá trị null .Chúng ta thử Full Join với 2 bảng tài 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 những bạn sẽ có bảng tài liệu sau khi JOIN tựa như như LEFT JOIN phía trên. Lý do là vì bảng Orders có tổng thể Order_ID trong bảng Returns. Với những điều kiện kèm theo phụ tất cả chúng ta hoàn toàn có thể sẽ có 2 hiệu quả khác nhau ( lý giải trong bài sau )O.Order_IDR.Order_IDTraHangTongGiaTriCA-2017-125451nullnull2.22CA-2017-156391CA-2017-156391Yes2.224CA-2015-146829nullnull2.224US-2017-102288nullnull2.264US-2015-128090US-2015-128090Yes2.304Và ở đầu cuối tất cả chúng ta sẽ có được tác dụng giống hệt với LEFT JOINTraHangTongGiaTrinull10599341Yes888721.3

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

Tổng kết

Bài này mình dự kiến sẽ viết chung tổng thể 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 những bạn đã được ra mắt 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ẽ gồm có 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ấtNhững “ biến thể ” từ những SQL Joins cơ bảnNhững loại SQL Joins đặc biệt quan trọng khácNếu bạn muốn join nhiều hơn 2 bảng thì sao ( 3 + ) Những chú ý quan tâm đặc biệt quan trọng khi dùng SQL Joins Những kinh nghiệm tay nghề để dùng SQL Joins một cách hiệu suất cao nhất

Thực hành

Phần việc của mình cũng xong rồi. Đến lượt những bạn thực hành thực tế rồi nhé. Cách tốt nhất để hiểu là thực hành thực tế thôi những bạn .Vậy thực hành thực tế ntn ?Các bạn đã có được database mẫu của mình rồi, giờ đây những bạn triển khai lại toàn bộ những câu lệnh SQL Join cơ bản trên và sử dụng bảng People và Orders nhé. 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 nhé ! Và san sẻ quan điểm cũng như kinh nghiệm tay nghề .Chúc những bạn vui tươi ! Và hẹn gặp lại những 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 nhé !
Chuyên mục: Chuyên mục : Hỏi Đáp

5/5 - (1 vote)

Bài viết liên quan

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments