Mọi thứ bạn cần biết về truy vấn phụ SQL
Các truy vấn SQL là thịt và khoai tây của RDBMS CRUD (tạo, đọc, cập nhật, xóa). Nhưng khi ứng dụng hoặc cơ sở dữ liệu doanh nghiệp của bạn phát triển, nhu cầu về các truy vấn thông minh để truy xuất dữ liệu có điều kiện, yêu cầu cụ thể trở thành điều bắt buộc phải có.
SQL tương đối toàn diện, bao gồm nhiều chức năng — mỗi chức năng đều rất phù hợp cho các mục đích sử dụng kinh doanh khác nhau. Một trong những chức năng như vậy bao gồm việc sử dụng các truy vấn phụ.
Để làm cho mã của bạn hiệu quả và hiệu quả, bạn có thể sử dụng các truy vấn phụ trong mã SQL của mình để tìm nạp dữ liệu, thao tác với các biến hiện có và đạt được nhiều mục tiêu trong một lần.
Mục Lục
Truy vấn phụ SQL là gì?
Truy vấn phụ là một truy vấn lồng nhau, hoạt động như một tham số trong một truy vấn chính khác. Truy vấn phụ là một truy vấn bên trong, trong khi truy vấn chính là truy vấn bên ngoài.
Truy vấn phụ được cho là trả về dữ liệu dưới dạng đối số trong ngoặc đơn cho truy vấn chính, trong khi truy vấn chính lấy thêm kết quả cuối cùng.
Truy vấn phụ được nhúng trong Lựa chọn tuyên bố hoặc trong Ở đâu mệnh đề. Cấu trúc như vậy cho phép truy vấn con hoạt động như một điều kiện lọc dữ liệu được mô tả tốt. Thật không may, các truy vấn phụ chỉ có thể sử dụng Nhóm theo lệnh và không Đặt bởi các lệnh, vì chúng chỉ được phép trong truy vấn chính.
Thông thường, mỗi truy vấn phụ bao gồm một cột duy nhất với Lựa chọn mệnh đề. Tuy nhiên, có những trường hợp trong đó truy vấn chính có nhiều cột. Một truy vấn con có thể được lồng trong một truy vấn con khác, làm cho nó trở thành một truy vấn con lồng nhau.
Độ nghiêm ngặt của truy vấn phụ như sau:
Select column_name from table where condition=
(SELECT conditional_column FROM table) as alias;
Ví dụ: giả sử bạn có bảng sau:
| TÔI | Họ | Tên thứ hai | Phí cơ quan |
| 1 | John | Tim | 5000 |
| 2 | Robert | Graham | 4000 |
| 3 | Stephen | Hicks | 8000 |
| 4 | Bob | Marley | 1000 |
| 5 | Mary | Ellen | 9000 |
Trong bảng này, để lấy tên của những người đang có thu nhập cao hơn phí đại lý trung bình, bạn có thể viết một truy vấn phụ, thay vì viết nhiều dòng mã.
Đây là cách truy vấn trông như thế nào:
Select * from agent_details
where Agency_Fee > (select avg(Agency_Fee) from agent_details);
Lệnh trước > dấu hiệu là truy vấn bên ngoài, trong khi mọi thứ sau dấu > dấu hiệu là truy vấn bên trong.
Truy vấn bên trong sẽ tính phí đại lý trung bình trong truy vấn phụ và truy vấn bên ngoài sẽ hiển thị tất cả các giá trị lớn hơn giá trị trung bình được tính toán.
Làm thế nào để sử dụng truy vấn con trong SQL?
Có một số cách khác nhau mà bạn có thể sử dụng truy vấn con trong SQL.
Truy vấn phụ với mệnh đề Where
Một trong những cấu trúc cơ bản nhất của truy vấn con trong SQL nằm trong mệnh đề Where. Đó là cách đơn giản nhất để xác định những gì bạn đang tìm kiếm. Câu lệnh select trả về các giá trị theo (các) điều kiện truy vấn phụ và sử dụng nó làm tham số cho truy vấn chính.
Cấu trúc truy vấn:
select * from table_name
where column_name = (select column_name from table_name);
Hãy giải thích điều này bằng một ví dụ.
Giả sử bạn muốn tìm phí đại lý cao thứ hai từ bảng agency_details. Để làm như vậy, có các hàm thay thế trong SQL; Tuy nhiên, phương pháp tốt nhất là sử dụng một truy vấn phụ.
Đây là cách bạn có thể xác định truy vấn phụ:
select *, max(Agency_fee)
from agent_details
where Agency_fee < (select max(Agency_fee) from agent_details);
Câu lệnh kết quả sẽ cho bạn thấy 8000, là mức phí cao thứ hai trong bảng nhất định. Khi truy vấn chạy, truy vấn phụ sẽ tính giá trị lớn nhất từ danh sách phí. Số tiền phí cao nhất (9000) được lưu trữ trong bộ nhớ.
Sau khi phần này được tính toán, phần thứ hai của truy vấn sẽ được tính toán, phần này sẽ tìm ra mức phí cao thứ hai từ bảng (vì < dấu hiệu được sử dụng). Kết quả cuối cùng là 8000, là mức phí cao thứ hai trong bảng.
Truy vấn phụ trong mệnh đề từ
Một biến thể khác trong các truy vấn phụ là chuyển điều kiện trong từ mệnh đề. Như một khái niệm tương tự, truy vấn bên trong được xử lý trước và truy vấn bên ngoài được xử lý sau đó. Truy vấn bên trong sẽ lọc dữ liệu và hiển thị kết quả trong đó ID = 3.
Đây là truy vấn để tham khảo:
select a.* from (
select agency_fee from agent_details
where ID= 3) as a;
Đây là một cấu trúc rất cơ bản; tuy nhiên, bảng dữ liệu của bạn càng phức tạp, bạn sẽ nhận được nhiều hàng dữ liệu hơn, phù hợp với điều kiện của bạn.
Sử dụng truy vấn phụ với câu lệnh chèn vào
Nếu bạn muốn cập nhật bảng hiện có với một số hàng dữ liệu mới, bạn có thể sử dụng Chèn vào bản tường trình. Một truy vấn phụ có thể tỏ ra khá hữu ích, nếu bạn muốn thêm các giá trị dựa trên (các) điều kiện cụ thể.
Cấu trúc truy vấn:
insert into table_name
select * from table_name
where column_name = conditions;
select * from table_name;
Dưới đây là một ví dụ về cách bạn có thể sử dụng câu lệnh chèn vào với truy vấn phụ:
insert into agent_details
select * from agent_details
where agency_fee in (1000, 5000);
select * from agent_details;
Khi truy vấn chạy, các giá trị phù hợp với điều kiện sẽ lại được chèn vào bảng hiện có. Các lựa chọn * tham chiếu chọn tất cả các cột cùng nhau và chèn nó vào bảng agent_details như nó vốn có. Các trong câu lệnh được sử dụng để xác định nhiều điều kiện lọc cùng một lúc.
Sử dụng truy vấn phụ với câu lệnh cập nhật
Có những tình huống trong đó bạn muốn cập nhật các bảng bên dưới trong khi chạy các truy vấn. Để làm như vậy, bạn có thể sử dụng cập nhật cùng với các lệnh truy vấn.
Đây là cách bạn sẽ viết truy vấn phụ để cập nhật thông tin trong bảng trong một trường hợp:
update table_name
set column_name = new_value
where column_name =
(select column_name from table_name where = );
Dưới đây là một ví dụ minh họa việc sử dụng câu lệnh cập nhật:
UPDATE agent_details
SET agency_fee = 35000
WHERE agency_fee =
(SELECT agency_fee FROM agent_details WHERE First_name='John');
select * from agent_details;
Truy vấn phụ sẽ lọc trên cột agency_fee và chọn ra (các) hàng nơi First_Name khớp John. Truy vấn bên ngoài được thực hiện tiếp theo, trong đó phí đại lý được cập nhật lên 35000 cho John Wick.
Bạn có thể vượt qua một lựa chọn * tuyên bố để kiểm tra kết quả cuối cùng; bạn sẽ nhận thấy phí đại lý cho John Wick được cập nhật lên 35000, vì chỉ có trường hợp phù hợp với các điều kiện được xác định trong truy vấn.
Sử dụng truy vấn phụ với câu lệnh xóa
Cũng giống như câu lệnh cập nhật, trong đó bạn đang cập nhật các hàng dữ liệu trong bảng hiện có, xóa bỏ câu lệnh xóa (các) hàng dữ liệu dựa trên một điều kiện.
Cấu trúc câu lệnh xóa là:
delete from table_name where variable/column name =
(select column_name from table_name where = condition);
Đây là một ví dụ:
Delete from agent_details
where First_name IN
(select First_name from agent_details where agency_fee = 9000);
select * from agent_details;
Sử dụng truy vấn con trong SQL
Truy vấn phụ là một tính năng tuyệt vời trong SQL, có thể giúp bạn không phải viết vô số dòng mã không cần thiết. Khi bạn có thể sử dụng các chức năng cơ bản của các truy vấn con để thực hiện việc đặt giá thầu, bạn sẽ không bao giờ muốn lo lắng về sự phức tạp của mã hóa SQL.
Tốt nhất bạn nên nâng cao kiến thức SQL hiện có của mình để đảm bảo bạn luôn dẫn đầu trò chơi của mình. Hãy yên tâm, các bảng gian lận SQL có thể cung cấp cho bạn một ý tưởng hay về cách hoàn thiện những điều cơ bản của bạn chỉ trong nháy mắt.
Đọc tiếp
Giới thiệu về tác giả