SQLite - Subqueries: A Beginner's Guide
Xin chào, các bạn có chí hướng trở thành lập trình viên! Hôm nay, chúng ta sẽ bắt đầu một hành trình thú vị vào thế giới các truy vấn con trong SQLite. Đừng lo lắng nếu bạn mới bắt đầu học lập trình - tôi sẽ là người hướng dẫn thân thiện của bạn, giải thích mọi thứ từng bước một. Hãy cùng nhau khám phá nhé!
What are Subqueries?
Trước khi chúng ta đi vào chi tiết, hãy hiểu thế nào là truy vấn con. Hãy tưởng tượng bạn đang lên kế hoạch cho một buổi tiệc và cần tạo một danh sách khách mời. Bạn có thể đầu tiên liệt kê tất cả bạn bè của mình, sau đó thu hẹp lại danh sách những người sống gần. Trong SQL, một truy vấn con giống như bước thứ hai đó - một truy vấn trong một truy vấn giúp bạn tinh chỉnh kết quả của mình.
Subqueries with SELECT Statement
Hãy bắt đầu với cách sử dụng phổ biến nhất của truy vấn con - trong các câu lệnh SELECT.
Basic Subquery Example
SELECT name
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
Trong ví dụ này, chúng ta đang tìm kiếm các nhân viên có mức lương cao hơn mức trung bình. Truy vấn trong (SELECT AVG(salary) FROM employees)
tính toán mức lương trung bình, và truy vấn ngoài sử dụng kết quả này để lọc các nhân viên.
Subquery in FROM Clause
SELECT department, avg_salary
FROM (
SELECT department, AVG(salary) as avg_salary
FROM employees
GROUP BY department
) AS dept_salaries
WHERE avg_salary > 50000;
Ở đây, chúng ta đang tạo một bảng tạm với mức lương trung bình theo phòng ban, sau đó chọn các phòng ban có mức lương trung bình trên 50.000.
Subqueries with INSERT Statement
Truy vấn con cũng có thể được sử dụng để chèn dữ liệu dựa trên thông tin hiện có.
INSERT INTO high_earners (employee_id, name)
SELECT id, name
FROM employees
WHERE salary > (SELECT AVG(salary) * 1.5 FROM employees);
Truy vấn này chèn các nhân viên có mức lương hơn 1,5 lần mức lương trung bình vào bảng 'high_earners'.
Subqueries with UPDATE Statement
Cập nhật dữ liệu dựa trên truy vấn con là một tính năng mạnh mẽ khác.
UPDATE employees
SET bonus = salary * 0.1
WHERE department_id IN (
SELECT id
FROM departments
WHERE performance_rating > 8
);
Truy vấn này tặng một phần thưởng 10% cho nhân viên thuộc các phòng ban có hiệu suất cao.
Subqueries with DELETE Statement
Cuối cùng, hãy xem cách truy vấn con có thể giúp xóa dữ liệu.
DELETE FROM products
WHERE id NOT IN (
SELECT product_id
FROM orders
WHERE order_date > DATE('now', '-1 year')
);
Truy vấn này xóa các sản phẩm không được đặt hàng trong một năm qua.
Subquery Methods
Dưới đây là bảng tóm tắt các phương pháp chúng ta đã xem xét:
Phương pháp | Mô tả | Ví dụ |
---|---|---|
SELECT with Subquery | Sử dụng truy vấn con để lọc hoặc tính toán giá trị cho truy vấn chính | SELECT ... WHERE column > (SELECT AVG(...)) |
Subquery in FROM | Tạo một bảng衍生物 để truy vấn từ | SELECT ... FROM (SELECT ...) AS derived_table |
INSERT with Subquery | Chèn dữ liệu dựa trên truy vấn con | INSERT INTO ... SELECT ... WHERE ... |
UPDATE with Subquery | Cập nhật dữ liệu dựa trên truy vấn con | UPDATE ... SET ... WHERE column IN (SELECT ...) |
DELETE with Subquery | Xóa dữ liệu dựa trên truy vấn con | DELETE FROM ... WHERE column NOT IN (SELECT ...) |
Conclusion
Chúc mừng! Bạn đã vừa迈出进入SQLite子查询世界的第一步。 Nhớ rằng, như việc học骑自行车, thành thạo truy vấn con cần phải thực hành. Đừng nản lòng nếu bạn không ngay lập tức hiểu được - tiếp tục thử nghiệm với các truy vấn khác nhau, và sớm bạn sẽ viết các truy vấn con phức tạp một cách dễ dàng.
Khi chúng ta kết thúc, đây là một câu chuyện nhỏ từ kinh nghiệm giảng dạy của tôi: Tôi từng có một học sinh rất khó khăn với truy vấn con. Cô ấy so sánh chúng với các dolls Nga嵌套 - truy vấn trong truy vấn. Analogy này giúp cô ấy hình dung khái niệm, và không lâu sau cô ấy trở thành một trong những người giỏi nhất trong lớp trong việc viết truy vấn con.
Vậy, bất kể bạn coi truy vấn con là dolls嵌套, hay có thể là một cuộc săn kho báu mà mỗi truy vấn dẫn bạn gần hơn đến phần thưởng, tiếp tục thực hành và khám phá. Thế giới dữ liệu là rộng lớn và thú vị, và truy vấn con là chìa khóa để bạn mở khóa bí mật của nó!
Chúc các bạn có những trải nghiệm thú vị với truy vấn, và nhớ rằng - trong thế giới cơ sở dữ liệu, sự tò mò là bạn tốt nhất của bạn. Tiếp tục đặt câu hỏi, và bạn sẽ tiếp tục tìm thấy câu trả lời!
Credits: Image by storyset