Hệ thống quản lý cơ sở dữ liệu (DBMS) - Kết hợp cơ sở dữ liệu: Hướng dẫn thân thiện cho người mới bắt đầu
Xin chào các nhà pháp sư cơ sở dữ liệu tương lai! Hôm nay, chúng ta sẽ bắt đầu một hành trình thú vị vào thế giới của các kết hợp cơ sở dữ liệu. Đừng lo lắng nếu bạn chưa bao giờ viết một dòng mã trước đây - tôi sẽ là hướng dẫn viên thân thiện của bạn, và chúng ta sẽ giải quyết chủ đề này từng bước một. Cuối cùng của bài hướng dẫn này, bạn sẽ kết hợp các bảng như một chuyên gia!
Kết hợp cơ sở dữ liệu là gì?
Trước khi chúng ta nhảy vào các loại kết hợp khác nhau, hãy hiểu xem kết hợp thực sự là gì. Hãy tưởng tượng bạn có hai danh sách riêng biệt: một danh sách có tên học sinh và màu sắc yêu thích của họ, và một danh sách có tên học sinh và điểm số của họ. Kết hợp giống như keo ma thuật kết hợp các danh sách này dựa trên một yếu tố chung (trong trường hợp này là tên học sinh) để cho bạn một cái nhìn toàn diện hơn về dữ liệu.
Bây giờ, hãy khám phá các loại kết hợp khác nhau!
Kết hợp Theta (θ)
Kết hợp Theta giống như tổ tiên thông thái của tất cả các kết hợp. Nó rất linh hoạt và cho phép chúng ta kết hợp các bảng dựa trên bất kỳ điều kiện nào chúng ta chỉ định. Ký tự θ (theta) trong tên của nó đại diện cho điều kiện này.
Hãy xem một ví dụ:
SELECT *
FROM Students S, Grades G
WHERE S.StudentID = G.StudentID AND S.Age > 18
Trong ví dụ này, chúng ta đang kết hợp bảng Students với bảng Grades dựa trên hai điều kiện:
- StudentID trong cả hai bảng phải khớp
- Tuổi của học sinh phải lớn hơn 18
Kết hợp này sẽ cho chúng ta kết quả bao gồm tất cả các cột từ cả hai bảng, nhưng chỉ cho học sinh trên 18 tuổi.
Kết hợp Equijoin
Kết hợp Equijoin là một trường hợp đặc biệt của kết hợp Theta, trong đó điều kiện luôn là một so sánh bình đẳng. Nó giống như nói, "Chỉ kết hợp các bảng này khi cột này khớp chính xác."
Dưới đây là một ví dụ:
SELECT S.Name, G.Subject, G.Grade
FROM Students S, Grades G
WHERE S.StudentID = G.StudentID
Truy vấn này sẽ cho chúng ta danh sách các tên học sinh, môn học và điểm số, nhưng chỉ khi StudentID khớp trong cả hai bảng.
Kết hợp Natural (⋈)
Kết hợp Natural giống như người bạn tốt nhất của lập trình viên lười biếng. Nó tự động kết hợp các bảng dựa trên các cột có cùng tên. Nó tiện lợi, nhưng hãy cẩn thận - nó có thể cho kết quả không mong muốn nếu bạn không để ý tất cả các tên cột của mình!
Dưới đây là cách nó trông như thế nào:
SELECT *
FROM Students NATURAL JOIN Grades
Điều này sẽ kết hợp bảng Students và Grades dựa trên tất cả các cột chung (presumably StudentID trong trường hợp này).
Kết hợp Outer
Bây giờ, hãy nói về các kết hợp Outer. Chúng đặc biệt hữu ích khi bạn muốn giữ lại tất cả các bản ghi từ một hoặc cả hai bảng, ngay cả khi không có khớp trong bảng còn lại. Có ba loại kết hợp outer:
Kết hợp Left Outer (R ⟕ S)
Kết hợp Left Outer giữ lại tất cả các bản ghi từ bảng bên trái (R), ngay cả khi không có khớp trong bảng bên phải (S).
Ví dụ:
SELECT S.Name, G.Subject, G.Grade
FROM Students S LEFT OUTER JOIN Grades G
ON S.StudentID = G.StudentID
Truy vấn này sẽ liệt kê tất cả các học sinh, ngay cả những học sinh không có điểm số ghi lại.
Kết hợp Right Outer (R ⟖ S)
Kết hợp Right Outer là ngược lại với Kết hợp Left Outer. Nó giữ lại tất cả các bản ghi từ bảng bên phải (S), ngay cả khi không có khớp trong bảng bên trái (R).
Ví dụ:
SELECT S.Name, G.Subject, G.Grade
FROM Students S RIGHT OUTER JOIN Grades G
ON S.StudentID = G.StudentID
Truy vấn này sẽ liệt kê tất cả các điểm số, ngay cả cho những học sinh có thể đã bị xóa khỏi bảng Students.
Kết hợp Full Outer (R ⟗ S)
Kết hợp Full Outer giống như nói, "Tôi muốn tất cả!" Nó giữ lại tất cả các bản ghi từ cả hai bảng, bất kể có khớp hay không.
Ví dụ:
SELECT S.Name, G.Subject, G.Grade
FROM Students S FULL OUTER JOIN Grades G
ON S.StudentID = G.StudentID
Truy vấn này sẽ cho chúng ta tất cả các học sinh và tất cả các điểm số, ngay cả khi một học sinh không có điểm số hoặc một điểm số không có học sinh tương ứng.
So sánh các loại kết hợp
Để giúp bạn nhớ tất cả các kết hợp này, hãy để chúng ta đặt chúng vào một bảng tiện lợi:
Loại kết hợp | Mô tả | Giữ lại bản ghi không khớp từ |
---|---|---|
Kết hợp Theta | Kết hợp dựa trên bất kỳ điều kiện nào | Cả hai bảng |
Kết hợp Equijoin | Kết hợp dựa trên bình đẳng | Cả hai bảng |
Kết hợp Natural | Tự động kết hợp trên các cột chung | Cả hai bảng |
Kết hợp Left Outer | Giữ lại tất cả bản ghi từ bảng bên trái | Bảng bên trái |
Kết hợp Right Outer | Giữ lại tất cả bản ghi từ bảng bên phải | Bảng bên phải |
Kết hợp Full Outer | Giữ lại tất cả bản ghi từ cả hai bảng | Cả hai bảng |
Và thế là bạn đã bước đầu vào thế giới của các kết hợp cơ sở dữ liệu. Nhớ rằng, thực hành làm nên完美, vì vậy đừng ngần ngại thử nghiệm các loại kết hợp khác nhau trên các bộ dữ liệu của riêng bạn.
Giống như học骑自行车, nó có thể cảm thấy不稳定起初, nhưng sớm bạn sẽ dễ dàng zoom qua dữ liệu của mình. Và biết đâu, có lẽ một ngày nào đó bạn sẽ là người dạy người khác về phép thuật của các kết hợp cơ sở dữ liệu!
Tiếp tục mã hóa, tiếp tục học hỏi, và quan trọng nhất, hãy vui vẻ với những cuộc phiêu lưu dữ liệu của bạn!
Credits: Image by storyset