21/11/2018, 23:45

Loạt series về SQL: Mọi thứ bạn cần biết về SQL JOINs

Gộp bảng là một trong những thử thách lớn nhất khi bạn mới bắt đầu học về SQL. Thông thường, bạn sẽ không thể nào có được hết mọi thứ mình cần trong một bảng nên sẽ cần phải gộp nhiều bảng lại để sử dụng. Nếu bạn đã quen thuộc với VLOOKUP function trong Excel, thì sẽ có thời gian làm ...

Gộp bảng là một trong những thử thách lớn nhất khi bạn mới bắt đầu học về SQL. Thông thường, bạn sẽ không thể nào có được hết mọi thứ mình cần trong một bảng nên sẽ cần phải gộp nhiều bảng lại để sử dụng.

Nếu bạn đã quen thuộc với VLOOKUP function trong Excel, thì sẽ có thời gian làm quen với SQL JOIN dễ dàng hơn.

T-SQL cung cấp 3 hàm cross, inner và outer JOIN, và UNION operators để kết hợp các bảng dataset lại với nhau. Trong khi đã có nhiều hướng dẫn khác nhau về JOINs, bài viết này sẽ cung cấp những ví dụ và hình ảnh để bạn dễ hình dung và tiếp thu hơn.

INNER JOIN

INNER join, hay còn gọi là JOIN, được dùng khi bạn muốn lấy phần chung giữa hai bảng. Nói cách khác, bạn cần có một key trên cả hai bảng để có thể xác nhập vào (Join ON). Mọi kết quả mà không phù hợp sẽ bị bỏ.

LEFT OUTER JOIN

Hãy dùng LEFT OUTER join khi bạn muốn tìm điểm chung giữa 2 bảng, nhưng đồng thời cho ra Null nếu không có điểm giống nào từ bảng bên phải. Tương tự như INNER JOIN bạn cũng cần phải có một key để xác nhập chúng (Join ON).

Mặt khác, RIGHT OUTER JOIN cũng làm điều tương tự nhưng sẽ ngược lại với bảng bên trái.

CROSS JOIN

Một CROSS JOIN sẽ sát nhập mọi thứ lại với nhau. Do đó mà không hề cần tới key và nó thường tạo ra những dataset rất lớn. Do đó mà hãy cẩn thận khi dùng hàm này.

UNION

Trong khi hàm JOIN kết hợp các hàng của các cột theo hướng ngang thì UNION kết hợp theo hướng dọc. Sử dụng UNION sẽ kết hợp kết quả của 2 queries vào một cột và những kết quả bị lặp. Nếu query có nhiều cột, chúng sẽ cần được ở đúng vị trí để có thể thực hiện UNION.

UNION ALL

Hàm UNION ALL sẽ kết hợp tất cả kết quả đến từ hai queries tương tự như UNION nhưng giữ cả phần lập lại.

Techtalk via Dev.to

0