Subquery trong SQL (Nested query) hay còn được gọi là truy vấn nội bộ, là khái niệm để mô tả việc một truy vấn sử dụng kết quả của một truy vấn nội bộ khác trong mệnh đề truy vấn WHERE của các hệ thống sử dụng cấu trúc truy vấn dữ liệu theo ngôn ngữ SQL. Các kết quả trả về của truy vấn con trong một câu lệnh truy vấn thường được sử dụng để đặt giới hạn và hạn chế kết quả trả về của truy vấn cha trong những query phức tạp cần tham chiếu đến dữ liệu của nhiều bảng với điều kiện kết lọc phức tạp mà 1 query không thể nào xử lý được.

Là một trong những kỹ thuật truy vấn sql nâng cao, tuy nhiên nested query thường không được sử dụng rộng rãi và hạn chế trong các tác vụ truy vấn dữ liệu phức tạp cần đáp ứng trả về nhanh. Một trong các tiêu chí tối ưu trong việc quản lý các hệ sơ sở dữ liệu quan hệ RDBMS (relational database management system). 

Cú pháp truy vấn phụ

Thường không có tài liệu rõ ràng về cấu trúc trong việc tạo ra một sub query, tuy nhiên đa phần các subquery thường được đặt trong cặp đấu “()” và được bỏ trong mệnh đề WHERE của truy vấn cha gần nhất của nó.

SELECT column-names
FROM table-name1
WHERE value IN (SELECT column-name
                   FROM table-name2 
                  WHERE condition)

Hoặc sử dụng thẳng trong mệnh đề SELECT của truy vấn cha

SELECT column1 = (SELECT column-name FROM table-name WHERE condition),
       column-names
FROM table-name
WEHRE condition

Ví dụ về một trường hợp sử dụng truy vấn subquery với yêu cầu trả về kết quả các sản phẩm được bán có Quantity >100

Bảng dữ liệu SQL mẫu

Bảng dữ liệu SQL mẫu

SELECT ProductName
FROM Product 
WHERE Id IN (SELECT ProductId 
                FROM OrderItem
               WHERE Quantity > 100)

Kết quả trả về sẽ như mẫu dữ liệu sau:

PoductName
Guaraná Fantástica
Schoggi Schokolade
Chartreuse verte
Jack's New England Clam Chowder
Rogede sild
Manjimup Dried Apples
Perth Pasties

 

 

About the author

Kevin Dang

Hey there! My name is Kevin Dang, I am website, software, mobile app develop, web admin system. Expert living in Hồ Chí Minh (Việt Nam). I am very interested in digital marketing with: SEO, Facebook, Google Ads ... This blog is where I will share the experiences, techniques and knowledge I have learned.