Đăng nhập với Microsoft
Đăng nhập hoặc tạo một tài khoản.
Xin chào,
Chọn một tài khoản khác.
Bạn có nhiều tài khoản
Chọn tài khoản bạn muốn đăng nhập.

Đôi khi bạn có thể muốn sử dụng kết quả của truy vấn dưới dạng một trường trong một truy vấn khác, hoặc là một tiêu chí cho một trường truy vấn. Ví dụ, giả sử bạn muốn xem khoảng cách giữa các đơn hàng cho từng sản phẩm của mình. Để tạo một truy vấn Hiển thị khoảng này, bạn cần phải so sánh mỗi ngày đặt hàng khác cho các ngày khác cho sản phẩm đó. So sánh những ngày đặt hàng này cũng yêu cầu một truy vấn. Bạn có thể lồng truy vấn này bên trong truy vấn chính của bạn bằng cách sử dụng truy vấn con.

Bạn có thể viết truy vấn phụ trong một biểu thức hoặc trong câu lệnh ngôn ngữ truy vấn có cấu trúc (SQL) trong Dạng xem SQL.

Trong bài viết này

Sử dụng kết quả của truy vấn làm trường trong truy vấn khác

Bạn có thể sử dụng truy vấn phụ làm biệt danh trường. Sử dụng truy vấn phụ làm biệt danh trường khi bạn muốn sử dụng kết quả truy vấn phụ làm trường trong truy vấn chính của bạn.

Lưu ý: Truy vấn phụ mà bạn dùng làm biệt danh trường không thể trả về nhiều hơn một trường.

Bạn có thể sử dụng bí danh trường truy vấn phụ để hiển thị các giá trị phụ thuộc vào các giá trị khác trong hàng hiện tại, mà không thể sử dụng truy vấn phụ.

Ví dụ, hãy để chúng tôi trở về ví dụ mà bạn muốn xem khoảng cách giữa các đơn hàng cho từng sản phẩm của mình. Để xác định khoảng thời gian này, bạn cần phải so sánh mỗi ngày đặt hàng đến ngày khác cho sản phẩm đó. Bạn có thể tạo một truy vấn Hiển thị thông tin này bằng cách sử dụng mẫu cơ sở dữ liệu Northwind.

  1. Trên tab Tệp, hãy bấm vào Mới

  2. Bên dưới mẫu sẵn dùng, hãy bấm mẫu mẫu.

  3. Bấm Northwind, rồi bấm vào tạo.

  4. Làm theo hướng dẫn trên trang Northwind Traders (trên tab đối tượng của Màn hình Khởi động) để mở cơ sở dữ liệu, rồi đóng cửa sổ Hộp thoại Đăng nhập.

  5. Trên tab Tạo, trong nhóm Truy vấn, bấm Thiết kế Truy vấn.

  6. Bấm vào tab truy vấn , rồi bấm đúp vào đơn hàng sản phẩm.

  7. Bấm đúp vào trường ID sản phẩm và trường ngày đặt hàng để thêm chúng vào lưới thiết kế truy vấn.

  8. Trong hàng sắp xếp của cột ID sản phẩm của lưới, hãy chọn tăng dần.

  9. Trong hàng sắp xếp của cột ngày đặt hàng của lưới, hãy chọn giảm dần.

  10. Trong cột thứ ba của lưới, bấm chuột phải vào hàng trường , rồi bấm thu phóng trên menu lối tắt.

  11. Trong hộp thoại thu phóng , hãy nhập hoặc dán biểu thức sau đây:

    Prior Date: (SELECT MAX([Order Date]) 
    FROM [Product Orders] AS [Old Orders]
    WHERE [Old Orders].[Order Date] < [Product Orders].[Order Date]
    AND [Old Orders].[Product ID] = [Product Orders].[Product ID])

    Biểu thức này là truy vấn phụ. Đối với mỗi hàng, truy vấn phụ sẽ chọn ngày đặt hàng gần nhất có ít nhất là ngày đặt hàng đã được liên kết với hàng đó. Lưu ý cách bạn sử dụng từ khóa AS để tạo biệt danh bảng, để bạn có thể so sánh các giá trị trong truy vấn phụ vào các giá trị trong hàng hiện tại của truy vấn chính.

  12. Trong cột thứ tư của lưới, trong hàng trường , hãy nhập biểu thức sau đây:

    Interval: [Order Date]-[Prior Date]

    Biểu thức này tính khoảng cách giữa mỗi ngày đặt hàng và ngày đặt hàng trước đó cho sản phẩm đó, sử dụng giá trị cho ngày trước đó mà chúng tôi xác định bằng truy vấn phụ.

  13. Trên tab Thiết kế, trong nhóm Kết quả, bấm Chạy.

    1. Truy vấn chạy và hiển thị danh sách tên sản phẩm, ngày đặt hàng, ngày đặt hàng trước đó và khoảng cách giữa các ngày đặt hàng. Kết quả được sắp xếp theo ID sản phẩm đầu tiên (theo thứ tự tăng dần), rồi theo ngày đặt hàng (theo thứ tự giảm dần).

    2. Lưu ý: Vì ID sản phẩm là trường tra cứu, theo mặc định, Access sẽ hiển thị các giá trị tra cứu (trong trường hợp này, tên sản phẩm) chứ không phải là ID sản phẩm thực tế. Mặc dù điều này thay đổi các giá trị xuất hiện, nó sẽ không thay đổi thứ tự sắp xếp.

  14. Đóng cơ sở dữ liệu Northwind.

Đầu Trang

Sử dụng truy vấn phụ làm một tiêu chí cho một trường truy vấn

Bạn có thể sử dụng truy vấn phụ làm tiêu chí trường. Sử dụng truy vấn phụ làm tiêu chí trường khi bạn muốn sử dụng kết quả của truy vấn phụ để giới hạn giá trị mà trường đó hiển thị.

Ví dụ, giả sử bạn muốn xem lại một danh sách các đơn hàng đã được xử lý bởi những nhân viên không phải là đại diện bán hàng. Để tạo danh sách này, bạn cần so sánh ID nhân viên cho mỗi đơn hàng với danh sách ID nhân viên đối với nhân viên không phải là đại diện bán hàng. Để tạo danh sách này và dùng nó dưới dạng tiêu chí trường, bạn sử dụng truy vấn phụ, như được hiển thị trong quy trình sau đây:

  1. Mở Northwind. accdb và bật nội dung của nó.

  2. Đóng biểu mẫu đăng nhập.

  3. Trên tab Tạo, trong nhóm Khác, bấm vào Thiết kế Truy vấn.

  4. Trên tab bảng , bấm đúp vào đơn hàngnhân viên.

  5. Trong bảng đơn hàng, bấm đúp vào trường ID nhân viên , trường ID đơn hàng và trường ngày đặt hàng để thêm chúng vào lưới thiết kế truy vấn. Trong bảng nhân viên, bấm đúp vào trường tiêu đề công việc để thêm nó vào lưới thiết kế.

  6. Bấm chuột phải vào hàng tiêu chí của cột ID nhân viên, rồi bấm thu phóng trên menu lối tắt.

  7. Trong hộp thu phóng , hãy nhập hoặc dán biểu thức sau đây:

    IN (SELECT [ID] FROM [Employees] 
    WHERE [Job Title]<>'Sales Representative')

    Đây là truy vấn phụ. Nó sẽ chọn tất cả các ID của nhân viên mà nhân viên không có tiêu đề doanh số bán hàng và nguồn cung cấp cho kết quả đó được đặt thành truy vấn chính. Truy vấn chính sau đó kiểm tra xem liệu các ID nhân viên từ bảng đơn hàng nằm trong tập kết quả.

  8. Trên tab Thiết kế, trong nhóm Kết quả, bấm Chạy.

    Truy vấn sẽ chạy và kết quả truy vấn Hiển thị danh sách các đơn hàng đã được xử lý bởi những nhân viên không phải là đại diện bán hàng.

Đầu Trang

Các từ khóa SQL thông thường mà bạn có thể sử dụng với truy vấn phụ

Có một vài từ khóa SQL mà bạn có thể sử dụng với truy vấn phụ:

Lưu ý: Danh sách này không đầy đủ. Bạn có thể sử dụng bất kỳ từ khóa SQL hợp lệ nào trong truy vấn phụ, ngoại trừ từ khóa định nghĩa dữ liệu.

  • THÔI    Sử dụng tất cả trong mệnh đề WHERE để truy xuất các hàng thỏa mãn điều kiện khi so sánh với mỗi hàng được trả về bởi truy vấn phụ.

    Ví dụ, giả sử bạn đang phân tích dữ liệu của học sinh tại một trường đại học. Các học viên phải duy trì tối thiểu là GPA, vốn có thể thay đổi chính yếu thành lớn. Các chuyên ngành và GPAs tối thiểu của họ được lưu trữ trong bảng có tên là chuyên ngành và thông tin sinh viên liên quan được lưu trữ trong bảng có tên là Student_Records.

    Để xem danh sách các chuyên ngành (và GPAs tối thiểu của chúng), mà mọi học viên có số lượng lớn vượt quá GPA tối thiểu, bạn có thể sử dụng truy vấn sau đây:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • ANY     Sử dụng bất kỳ mệnh đề WHERE nào để truy xuất các hàng đáp ứng điều kiện khi so sánh với ít nhất một trong các hàng được trả về bởi truy vấn phụ.

    Ví dụ, giả sử bạn đang phân tích dữ liệu của học sinh tại một trường đại học. Các học viên phải duy trì tối thiểu là GPA, vốn có thể thay đổi chính yếu thành lớn. Các chuyên ngành và GPAs tối thiểu của họ được lưu trữ trong bảng có tên là chuyên ngành và thông tin sinh viên liên quan được lưu trữ trong bảng có tên là Student_Records.

    Để xem danh sách các chuyên ngành (và GPAs tối thiểu của họ) mà bất kỳ học viên nào không đáp ứng điểm GPA tối thiểu, bạn có thể sử dụng truy vấn sau đây:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] > ANY
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);

    Lưu ý: Bạn cũng có thể sử dụng một số từ khóa cho cùng mục đích này; MỘT số từ khóa đồng nghĩa với bất kỳ.

  • EXISTS     Sử dụng tồn tại trong mệnh đề WHERE để cho biết rằng một truy vấn phụ nên trả về ít nhất một hàng. Bạn cũng có thể tồn tại những lời nói với không, để cho biết rằng một truy vấn phụ không nên trả về bất kỳ hàng nào.

    Ví dụ, truy vấn sau đây trả về danh sách các sản phẩm được tìm thấy trong ít nhất một đơn hàng hiện có:

    SELECT *
    FROM [Products]
    WHERE EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);

    Việc sử dụng không tồn tại, truy vấn sẽ trả về danh sách các sản phẩm không được tìm thấy trong ít nhất một đơn hàng hiện có:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • IN    Sử dụng trong mệnh đề WHERE để xác minh rằng một giá trị trong hàng hiện tại của truy vấn chính là một phần của bộ truy vấn phụ trả về. Bạn cũng có thể có lời nói đầu với không, để xác minh rằng một giá trị trong hàng hiện tại của truy vấn chính không phải là một phần của bộ truy vấn phụ trả về.

    Ví dụ, truy vấn sau đây trả về danh sách đơn hàng (với ngày đặt hàng) đã được các nhân viên xử lý không phải là đại diện bán hàng:

    SELECT [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]<>'Sales Representative');

    Bằng cách sử dụng không có, bạn có thể viết cùng một truy vấn theo cách này:

    SELECT [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] NOT IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]='Sales Representative');

Đầu Trang

Bạn cần thêm trợ giúp?

Bạn muốn xem các tùy chọn khác?

Khám phá các lợi ích của gói đăng ký, xem qua các khóa đào tạo, tìm hiểu cách bảo mật thiết bị của bạn và hơn thế nữa.

Cộng đồng giúp bạn đặt và trả lời các câu hỏi, cung cấp phản hồi và lắng nghe ý kiến từ các chuyên gia có kiến thức phong phú.

Thông tin này có hữu ích không?

Bạn hài lòng đến đâu với chất lượng dịch thuật?
Điều gì ảnh hưởng đến trải nghiệm của bạn?

Cảm ơn phản hồi của bạn!

×