SQL: Truy vấn con vs THAM GIA
Truy vấn con và liên kết là hai khái niệm quan trọng trong SQL, ngôn ngữ lập trình tiêu chuẩn để quản lý và thao tác cơ sở dữ liệu. Trong blog này, chúng ta sẽ khám phá truy vấn con và liên kết là gì, chúng khác nhau như thế nào và khi nào thì sử dụng từng truy vấn con trong truy vấn SQL của bạn.
Truy vấn con là gì?
Truy vấn con là một truy vấn trong một truy vấn. Đó là một cách để lồng một câu lệnh CHỌN bên trong một câu lệnh CHỌN, CHÈN, CẬP NHẬT hoặc XÓA khác hoặc bên trong một câu lệnh CREATE VIEW. Truy vấn con có thể được sử dụng để thực hiện nhiều nhiệm vụ khác nhau, chẳng hạn như:
- Lọc các hàng dựa trên một điều kiện
- Tính toán các giá trị để sử dụng trong truy vấn bên ngoài
- Trả về một hoặc nhiều giá trị như một phần của truy vấn bên ngoài
Nối là một cách để kết hợp các hàng từ hai hoặc nhiều bảng dựa trên một cột có liên quan giữa chúng. Có một số kiểu liên kết, bao gồm INNER JOIN, OUTER JOIN và CROSS JOIN.
INNER JOIN chỉ trả về các hàng khớp với điều kiện nối.
OUTER JOIN trả về tất cả các hàng từ cả hai bảng, kể cả những hàng không khớp với điều kiện nối. Có hai kiểu nối ngoài: LEFT JOIN và RIGHT JOIN. THAM GIA TRÁI trả về tất cả các hàng từ bảng bên trái (bảng đầu tiên trong truy vấn) và bất kỳ hàng phù hợp nào từ bảng bên phải. THAM GIA RIGHT trả về tất cả các hàng từ bảng bên phải (bảng thứ hai trong truy vấn) và bất kỳ hàng phù hợp nào từ bảng bên trái.
THAM GIA CHÉO trả về tích Descartes của hai bảng, là sự kết hợp của tất cả các hàng từ cả hai bảng.
Ví dụ thực tế:
Trong trường hợp này, chúng tôi có cơ sở dữ liệu Hogwarts và các bảng sau đây được liệt kê bên dưới:
- Course_table: Bảng này chứa dữ liệu liên quan đến tên khóa học và được xác định bằng khóa chính duy nhất
- student_table: Bảng này chứa dữ liệu liên quan đến tên sinh viên được xác định bởi một khóa chính duy nhất
- register_table: Bảng này là bảng THAM GIA thiết lập mối quan hệ giữa sinh viên và khóa học. Mỗi khi một sinh viên đăng ký vào một khóa học, một bản ghi mới được tạo ra. Course_id là khóa ngoại để xác định một khóa học từ Course_table và student_id là khóa ngoại để xác định một sinh viên từ student_table.
course:
+─────+────────────────────────────────+
| id | course |
+─────+────────────────────────────────+
| 1 | Defense against the dark arts |
| 2 | Potions |
| 3 | History of magic |
+─────+────────────────────────────────+
student:
+─────+────────────────────────────────+
| id | student |
+─────+────────────────────────────────+
| 1 | Harry Potter |
| 2 | Hermione Granger |
| 3 | Ron Weasly |
| 4 | Voldemort |
| 5 | Draco Malfoy |
+─────+────────────────────────────────+
enrollment:
+─────+────────────+─────────────+
| id | course_id | student_id |
+─────+────────────+─────────────+
| 1 | 1 | 1 |
| 2 | 2 | 1 |
| 3 | 3 | 2 |
| 4 | 2 | 3 |
| 5 | 3 | 4 |
| 6 | 1 | 5 |
| 7 | 3 | 1 |
| 8 | 1 | 4 |
+─────+────────────+─────────────+
Liệt kê dưới đây là một ví dụ về cách tiếp cận Subquery.
SELECT * FROM enrollment
WHERE enrollment.course_id IN (SELECT * FROM courses WHERE course_id = 1);
THAM GIA
Liệt kê dưới đây là phương pháp Tham gia.
SELECT * FROM course AS c
LEFT JOIN enrollment AS e ON c.id = e.course_id
WHERE e.course_id = 1
Khi nào nên sử dụng truy vấn phụ và tham gia
Truy vấn con và liên kết đều có thể được sử dụng để truy xuất dữ liệu từ nhiều bảng, nhưng chúng có các trường hợp sử dụng khác nhau. Truy vấn con thường được sử dụng khi bạn muốn sử dụng kết quả của truy vấn bên trong trong mệnh đề WHERE hoặc HAVING của truy vấn bên ngoài. Chúng cũng hữu ích khi bạn muốn trả về một hoặc nhiều giá trị như một phần của truy vấn bên ngoài.
Phép nối thường được sử dụng khi bạn muốn truy xuất dữ liệu từ nhiều bảng dựa trên một cột có liên quan giữa chúng. Chúng cũng hữu ích khi bạn muốn trả về tất cả các hàng từ cả hai bảng, kể cả những hàng không khớp với điều kiện nối.
Nói chung, truy vấn con có xu hướng hiệu quả hơn khi bạn chỉ cần trả về một vài hàng, trong khi phép nối hiệu quả hơn khi bạn cần trả về một số lượng lớn hàng. Tuy nhiên, sự khác biệt về hiệu suất giữa hai loại có thể khác nhau tùy thuộc vào kích thước của bảng và độ phức tạp của truy vấn.
Tóm lại, truy vấn con và liên kết là hai công cụ quan trọng để truy xuất dữ liệu từ nhiều bảng trong SQL. Truy vấn con rất hữu ích để lọc các hàng và trả về giá trị như một phần của truy vấn bên ngoài, trong khi phép nối hữu ích để kết hợp các hàng từ nhiều bảng dựa trên một cột có liên quan. Cả hai đều có thể được sử dụng để đạt được các mục tiêu tương tự, nhưng việc lựa chọn sử dụng mục tiêu nào tùy thuộc vào các yêu cầu cụ thể của truy vấn của bạn.

![Dù sao thì một danh sách được liên kết là gì? [Phần 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































