Bỏ qua để tới nội dung chính
Đă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 làm trường trong truy vấn khác hoặc làm tiêu chí cho 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 so sánh từng ngày đặt hàng với ngày đặt hàng khác cho sản phẩm đó. Việc so sánh các ngày trong đơn hàng này cũng yêu cầu truy vấn. Bạn có thể lồng truy vấn này vào bên trong truy vấn chính của mình bằng cách sử dụng truy vấn con.

Bạn có thể viết truy vấn con trong một biểu thức hoặc trong một câu lệnh Ngôn ngữ truy vấn có cấu trúc (SQL) 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 một truy vấn khác

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

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

Bạn có thể sử dụng bí danh trường truy vấn con để 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, điều này là không thể thực hiện được nếu không sử dụng truy vấn con.

Ví dụ: hãy để chúng tôi quay lại 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 bạn. Để xác định khoảng thời gian này, bạn cần so sánh ngày đặt hàng với ngày đặt hàng khác cho sản phẩm đó. Bạn có thể tạo 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 có, hãy bấm Mẫu Mẫu.

  3. Bấm Northwind, rồi bấm 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, 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, 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, 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 con. Đối với mỗi hàng, truy vấn con sẽ chọn ngày đặt hàng gần đây nhất thấp hơn 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 con với 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 thời gian 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 cách sử dụng truy vấn con.

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

    1. Truy vấn sẽ 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 thời gian giữa các ngày đặt hàng. Kết quả được sắp xếp trước tiên theo ID Sản phẩm (theo thứ tự tăng dần), sau đó 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 là 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ó 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 con làm tiêu chí cho trường truy vấn

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

Ví dụ: giả sử bạn muốn xem lại danh sách các đơn hàng do nhân viên không phải là đại diện bán hàng xử lý. Để tạo danh sách này, bạn cần so sánh ID nhân viên cho từng đơn hàng với danh sách ID nhân viên cho 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 và sử dụng nó làm tiêu chí trường, bạn sử dụng truy vấn con, như minh họa trong thủ tục 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àng Nhâ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 Chức danh để thêm 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, 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 con. Thao tác này sẽ chọn tất cả ID nhân viên mà nhân viên không có chức danh đại diện bán hàng và nguồn cung cấp kết quả được đặt thành truy vấn chính. Sau đó, truy vấn chính sẽ kiểm tra xem ID nhân viên từ bảng Đơn hàng có nằm trong tập kết quả hay không.

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

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

Đầu Trang

Các từ khóa SQL phổ biến mà bạn có thể sử dụng với truy vấn con

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

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 con, ngoại trừ từ khóa định nghĩa dữ liệu.

  • Tất cả    Sử dụng ALL 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 do truy vấn con trả về.

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

    Để xem danh sách chuyên ngành (và GPA tối thiểu) mà mỗi học viên có chuyên ngành đó 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 ANY 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 ít nhất một hàng mà truy vấn con trả về.

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

    Để xem danh sách các chuyên ngành (và GPA tối thiểu của họ) mà bất kỳ học viên nào có chuyên ngành đó không đáp ứng 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 từ khóa SOME cho cùng một mục đích; từ khóa SOME đồng nghĩa với ANY.

  • EXISTS     Dùng EXISTS trong mệnh đề WHERE để cho biết rằng truy vấn con phải trả về ít nhất một hàng. Bạn cũng có thể bắt đầu EXISTS bằng HÀM NOT để cho biết rằng truy vấn con 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 theo í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]);

    Dùng NOT EXISTS, truy vấn trả về một danh sách các sản phẩm không được tìm thấy theo ít nhất một thứ tự hiện có:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • IN    Sử dụng IN 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 tập hợp mà truy vấn con trả về. Bạn cũng có thể bắt đầu IN bằng NOT để 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 tập hợp mà truy vấn con trả về.

    Ví dụ: truy vấn sau trả về danh sách đơn hàng (kèm theo ngày đặt hàng) do nhân viên không phải là đại diện bán hàng xử lý:

    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 NOT IN, 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?
Khi nhấn gửi, phản hồi của bạn sẽ được sử dụng để cải thiện các sản phẩm và dịch vụ của Microsoft. Người quản trị CNTT của bạn sẽ có thể thu thập dữ liệu này. Điều khoản về quyền riêng tư.

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

×