Lồng truy vấn vào một truy vấn khác hoặc vào một biểu thức bằng cách dùng truy vấn phụ

Quan trọng:  Bài viết này là dịch máy, hãy xem tuyên bố miễn trừ trách nhiệm. Bạn hãy tìm phiên bản tiếng Anh của bài viết này tại đây để tham khảo.

Đôi khi bạn có thể muốn dùng kết quả của truy vấn làm một trường trong một truy vấn khác hoặc làm một tiêu chí trong trường truy vấn. Ví dụ, giả sử bạn muốn xem thời khoảng giữa các đơn hàng của mỗi sản phẩm của mình. Để tạo một truy vấn cho thấy thời khoảng này, bạn cần so sánh ngày của từng đơn hàng với ngày của các đơn hàng khác của sản phẩm đó. Việc so sánh ngày đặt hàng này cũng đòi hỏi phải có một truy vấn. Bạn có thể lồng truy vấn này bên trong truy vấn chính bằng cách 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 một câu lệnh Ngôn ngữ Truy vấn Cấu trúc (SQL) trongDạng xem SQL.

Trong bài viết này

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

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

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

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

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

Ghi chú: Truy vấn phụ mà bạn dùng làm bí danh của trường sẽ không thể trả về nhiều hơn một trường.

Bạn có thể dùng bí danh trường của truy vấn phụ để hiển thị giá trị phụ thuộc vào các giá trị khác trong hàng hiện tại, không phải là có thể xảy ra mà không dùng truy vấn phụ. Ví dụ, hãy trở lại ví dụ nơi 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 mỗi ngày đặt hàng sang ngày tháng thứ tự 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ủa Northwind 2007.

Cho tôi cách thiết lập Northwind 2007

  1. Bấm vào Nút Microsoft Office Ảnh nút , rồi bấm vào Mới.

  2. Trong ngăn bên trái, bên dưới Thể loại mẫu, bấm Mẫu cục bộ.

  3. Bên dưới Cục bộ mẫu, bấm Northwind 2007, và sau đó 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.

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

  2. Trong hộp thoại Hiện Bảng, hãy bấm vào tab Truy vấn, rồi bấm đúp vào Đơn hàng Sản phẩm.

  3. Đóng hộp thoại Hiện Bảng.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

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

    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, biểu thức phụ chọn ngày đặt hàng gần nhất nhưng không gần đây bằng ngày đặt hàng đã được gắn với hàng đó. Hãy lưu ý cách sử dụng từ khóa AS để tạo bí danh bảng, để bạn có thể so sánh các giá trị trong truy vấn phụ với các giá trị trong hàng hiện thời của truy vấn chính.

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

Interval: [Order Date]-[Prior Date]

Biểu thức này tính toán thời khoảng 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ị của ngày trước đó mà chúng ta đã xác định bằng truy vấn phụ.

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

    Truy vấn trả về 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à thời khoảng giữa các ngày đặt hàng. Kết quả được sắp xếp trước hết theo ID Sản phẩm (theo thứ tự tăng dần), rồi theo Ngày Đặt hàng (theo thứ tự giảm dần).

    Ghi chú: Vì trường ID Sản phẩm là trường tra cứu, cho nên theo mặc định, Access 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 ID Sản phẩm thực tế. Mặc dù điều này làm thay đổi những giá trị xuất hiện, nhưng nó không thay đổi thứ tự sắp xếp.

  2. Đó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 một tiêu chí của trường. Sử dụng truy vấn phụ làm một tiêu chí của trường khi bạn muốn sử dụng các kết quả của truy vấn phụ để giới hạn các giá trị trường Hiển thị.

Ví dụ, giả sử bạn muốn xem lại 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 của từng đơn hàng với danh sách các ID nhân viên của 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à dùng nó làm tiêu chí trường, bạn hãy dùng truy vấn phụ, như nêu trong quy trình sau đây:

  1. Mở Northwind 2007.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 Thiết kế Truy vấn.

  4. Trong hộp thoại Hiện Bảng, trên tab Bảng, bấm đúp vào Đơn hàngNhân viên.

  5. Đóng hộp thoại Hiện Bảng.

  6. 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 Công việc để thêm nó vào lưới thiết kế.

  7. 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.

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

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

    Đây là truy vấn phụ. Nó chọn tất cả những ID nhân viên khi mà nhân viên đó không có chức danh công việc là Đại diện Bán hàng, rồi nó cung cấp kết quả đó cho 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ả không.

  9. 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 thể hiện 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.

Đầ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ể dùng với truy vấn phụ:

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

  • ALL    Hãy dùng từ khóa ALL trong mệnh đề WHERE để truy xuất những hàng thỏa mãn điều kiện khi so sánh với mỗi hàng mà truy vấn phụ trả về.

    Ví dụ, giả sử bạn đang phân tích dữ liệu về sinh viên của một trường đại học. Sinh viên phải duy trì điểm GPA tối thiểu, mà điểm này khác nhau tùy thuộc vào từng chuyên ngành. Các chuyên ngành chính và điểm GPA tối thiểu được lưu giữ trong một bảng có tên là Chuyên ngành chính và thông tin có liên quan của sinh viên được lưu trong bảng Hồ sơ Sinh viên.

    Để xem danh sách các chuyên ngành chính (và điểm GPA tối thiểu cho chuyên ngành đó) mà trong đó mọi sinh viên chuyên ngành đó có điểm GPA cao hơn điểm GPA tối thiểu, bạn có thể 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    Hãy dùng từ khóa ANY trong mệnh đề WHERE để truy xuất những hàng thỏa mãn điều kiện khi so sánh với ít nhất một trong các hàng mà truy vấn phụ trả về.

    Ví dụ, giả sử bạn đang phân tích dữ liệu về sinh viên của một trường đại học. Sinh viên phải duy trì điểm GPA tối thiểu, mà điểm này khác nhau tùy thuộc vào từng chuyên ngành. Các chuyên ngành chính và điểm GPA tối thiểu được lưu giữ trong một bảng có tên là Chuyên ngành chính và thông tin có liên quan của sinh viên được lưu trong bảng Hồ sơ Sinh viên.

    Để xem danh sách các chuyên ngành chính (và điểm GPA tối thiểu cho chuyên ngành đó) mà trong đó bất kỳ sinh viên nào của chuyên ngành đó không đạt điểm GPA tối thiểu, bạn có thể 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]);

    Ghi chú: Bạn cũng có thể dùng từ khóa SOME cho cùng mục đích này; từ khóa SOME đồng nghĩa với ANY.

  • EXISTS    Hãy dùng từ khóa EXISTS trong mệnh đề WHERE để chỉ ra rằng một truy vấn phụ phải trả về ít nhất một hàng. Bạn cũng có thể đặt từ khóa NOT trước từ khóa EXISTS để chỉ ra rằng truy vấn phụ đó không được 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]);

    Khi dùng NOT EXISTS, truy vấn 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    Dùng từ khóa IN trong mệnh đề WHERE để xác thực rằng một giá trị trong hàng hiện thời của truy vấn chính là một phần của tập hợp mà truy vấn phụ trả về. Bạn cũng có thể đặt từ khóa NOT trước từ khóa IN để xác thực rằng giá trị trong hàng hiện thờ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 phụ trả về.

    Ví dụ, truy vấn sau đây trả về danh sách các đơn hàng (với ngày đặt 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:

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

    Bằng cách dùng NOT IN, bạn có thể viết cùng một truy vấn đó như sau:

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

Đầu Trang

Ghi chú: Tuyên bố miễn trừ trách nhiệm Dịch Máy: Bài viết này do một hệ thống máy tính dịch mà không có sự can thiệp của con người. Microsoft cung cấp những bản dịch máy này để giúp người dùng không nói tiếng Anh hiểu nội dung về các sản phẩm, dịch vụ và công nghệ của Microsoft. Do bài viết này được dịch máy nên có thể có các lỗi về từ vựng, cú pháp hoặc ngữ pháp.

Phát triển các kỹ năng của bạn
Khám phá nội dung đào tạo
Sở hữu tính năng mới đầu tiên
Tham gia Người dùng nội bộ Office

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

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

Cảm ơn bạn đã phản hồi! Để trợ giúp tốt hơn, có lẽ chúng tôi sẽ kết nối bạn với một trong những nhân viên hỗ trợ Office của chúng tôi.

×