Hướng dẫn nhanh về JOINS trong SQL
Một JOIN trong SQL kết hợp các cột từ một hoặc nhiều bảng để trích xuất dữ liệu cần thiết. Khi được sử dụng hiệu quả, các join có thể đơn giản hóa các truy vấn và tiết kiệm rất nhiều thời gian. Trong bài viết này, chúng ta sẽ xem cách dễ dàng để trực quan hóa dữ liệu được bắt bởi các join khác nhau bằng các sơ đồ Venn và tương đương SQL của chúng.
Một số join này chỉ có sẵn trong một số cơ sở dữ liệu quan hệ cụ thể; vì sự đơn giản, chúng ta chỉ xem xét các cơ sở dữ liệu nguồn mở phổ biến nhất trong bài viết này - MySQL và PostgreSQL.
Các loại join được đề cập trong bài viết này:
INNER JOIN
LEFT JOIN
RIGHT JOIN
FULL OUTER JOIN
LEFT JOIN LOẠI TRỪ INNER JOIN
RIGHT JOIN LOẠI TRỪ INNER JOIN
OUTER JOIN LOẠI TRỪ INNER JOIN
Chúng ta sử dụng hai bảng giống hệt nhau, A và B, với hai cột - id và val. Chúng ta đã tạo bảng trong cả MySQL và PostgreSQL và chèn hai giá trị vào mỗi bảng.
<Hình ảnh>
INNER JOIN
Inner join trả về các giá trị chung trong cả hai bảng dựa trên cột khóa. Cả MySQL và PostgreSQL đều hỗ trợ nó một cách tự nhiên.
<Hình ảnh>
LEFT JOIN
Left join hoặc left outer join trả về tất cả các giá trị trong các bảng bên trái dựa trên cột khóa, ngay cả khi không có dòng khớp nào trong bảng bên phải. Đối với các hàng không có trong các bảng khác, NULL sẽ được hiển thị cho các cột của bảng khác. Cả MySQL và PostgreSQL đều hỗ trợ nó một cách tự nhiên.
<Hình ảnh>
RIGHT JOIN
Right join hoặc right outer join trả về tất cả các giá trị trong các bảng bên phải dựa trên cột khóa, ngay cả khi không có dòng khớp nào trong bảng bên trái. Đối với các hàng không có trong các bảng khác, NULL sẽ được hiển thị cho các cột của bảng khác. Cả MySQL và PostgreSQL đều hỗ trợ nó một cách tự nhiên.
<Hình ảnh>
LEFT JOIN LOẠI TRỪ INNER JOIN
Left join loại trừ inner join trả về các giá trị trong bảng bên trái và loại trừ các giá trị chung trong cả hai bảng. Đối với các hàng không có trong các bảng khác, NULL sẽ được hiển thị cho các cột của bảng khác. Điều này không được MySQL hoặc Postgres hỗ trợ một cách tự nhiên, và chúng ta phải đặt một điều kiện where để có kết quả mong muốn.
<Hình ảnh>
RIGHT JOIN LOẠI TRỪ INNER JOIN
Right join loại trừ inner join trả về các giá trị trong bảng bên phải và loại trừ các giá trị chung trong cả hai bảng. Đối với các hàng không có trong các bảng khác, NULL sẽ được hiển thị cho các cột của bảng khác. Điều này không được MySQL hoặc Postgres hỗ trợ một cách tự nhiên, và chúng ta phải đặt điều kiện để có kết quả mong muốn.
<Hình ảnh>
FULL OUTER JOIN
Full outer join kết hợp tập kết quả của cả left join và right join và trả về các giá trị chung giữa cả hai cũng như các giá trị không khớp. Nó được hỗ trợ bởi Postgres, nhưng không được hỗ trợ một cách tự nhiên trong MySQL. Đối với MySQL, chúng ta phải sử dụng UNION để kết hợp kết quả của left và right join.
<Hình ảnh>
OUTER JOIN LOẠI TRỪ INNER JOIN
Outer join loại trừ inner join trả về các giá trị không chung trong cả hai bảng. Các giá trị khớp bị bỏ qua ở đây. Nó không được Postgres và MySQL hỗ trợ một cách tự nhiên. Đối với MySQL, chúng ta phải sử dụng UNION để kết hợp kết quả của left và right join và thêm một điều kiện where. Đối với Postgres, chúng ta phải sử dụng outer join và điều kiện where.
<Hình ảnh>
UNION và UNION ALL
Cả UNION và UNION ALL đều kết hợp tập kết quả của hai hoặc nhiều truy vấn select thành một tập kết quả duy nhất.
UNION tạo ra một tập kết quả riêng biệt nơi các giá trị trùng lặp không được hiển thị. UNION ALL tạo ra một tập kết quả hiển thị kết quả từ tất cả các truy vấn select. Các giá trị trùng lặp không bị bỏ qua; chúng cũng được hiển thị.
<Hình ảnh>
TỔNG KẾT
Như vậy, các join trong SQL là một kỹ năng quan trọng cho bất kỳ người dùng cơ sở dữ liệu nào. Nó giúp cải thiện hiệu suất truy vấn, trích xuất dữ liệu liên quan và cung cấp cái nhìn sâu sắc. Trong bài viết này, Chúng ta đã đề cập đến các truy vấn thường được sử dụng nhất để trích xuất dữ liệu giữa hai bảng. Tùy thuộc vào các điều kiện cụ thể, các truy vấn có thể được sửa đổi thêm để lọc dữ liệu không liên quan theo nhu cầu của bạn. Việc sử dụng và hiểu các join sẽ giúp dễ dàng tạo các truy vấn phức tạp và hỗ trợ trong việc truy xuất và phân tích dữ liệu. Sử dụng sai các join cũng có thể làm chậm truy vấn của bạn; luôn kiểm tra hiệu suất truy vấn bằng cách sử dụng EXPLAIN để tối ưu hóa và các sửa đổi tiếp theo trong truy vấn.
Comments
Post a Comment