Cách tạo một câu hỏi truy vấn (Query) dạng đa bảng trong Access 2016

Trong ví dụ trước, chúng ta đã cùng nhau tìm hiểu về cách tạo query căn bản với chỉ một bảng dữ liệu. Phần lớn các câu hỏi truy vấn được sử dụng trong Access 2016 thường tận dụng nhiều hơn 1 bảng số liệu, bởi vì nó sẽ giúp bạn trả lời được nhiều câu hỏi phức tạp hơn. Trong bài viết này, Học Excel Online sẽ hướng dẫn bạn cách tạo một câu hỏi truy vấn (Query) dạng đa bảng trong Access 2016

Lên bố cục nội dung của query

Trước khi bắt tay tạo lập 1 query mới, bạn cần thực hiện 4 bước sau:

  • Xác định rõ ràng thông tin bạn cần biết. Nếu bạn cần 1 thông tin từ cơ sở dữ liệu thì đó có thể là gì? Việc xây dựng query sẽ phức tạp hơn việc đặt 1 câu hỏi thông thường, nhưng có lẽ biết rõ câu hỏi cần trả lời sẽ cực kỳ có ích trong việc tạo lập query hoạt động hiệu quả
  • Xác định đúng loại thông tin bạn muốn xuất hiện trong kết quả truy vấn. Mục nào chứa các thông tin đó?
  • Xác định vị trí các mục cần điền vào nội dung của query. Các mục này đang nằm ở bảng dữ liệu nào?
  • Xác định các tiêu chí ràng buộc mà dữ liệu đầu vào của mỗi mục cần phải đáp ứng. Nghĩ kỹ về nội dung của câu hỏi. Với mỗi loại thông tin thì bạn cần tìm ở mục nào? Thông tin bạn cần là gì? Cách tìm chúng như thế nào?

Ta sẽ sử dụng ví dụ về dữ liệu liên quan đến tiệm bánh mỳ để minh họa cho các bước trên.

Bước 1: Xác định câu hỏi cần hỏi

Tiệm bánh thường có danh sách rất nhiều khách hàng, một vài trong số họ chưa từng đặt bất cứ đơn hàng nào nhưng lại có tên trong danh sách khách hàng bởi đơn giản họ đã đăng ký nhận thư từ tiệm bánh. Phần lớn trong số đó sống trong khu vực nội thành, một vài người khác lại sống ở ngoại ô hoặc ở một bang khác. Nhiệm vụ của bạn là phải lôi kéo được những khách hàng ở xa đã từng đặt hàng đến trải nghiệm một lần nữa và thử đặt thêm đơn hàng mới, vì vậy bạn sẽ phải chuẩn bị thư mời dùng phiếu giảm giá của cửa hàng. Thực tế thì ta sẽ không thể gửi thư đến những khách hàng ở quá xa bởi lý do họ chưa chắc sẽ quay lại cửa hàng do khoảng cách địa lý là rất lớn. Ta chỉ cần quan tâm đến những khách hàng sống ở vùng ngoại ô nhưng vẫn nằm trong khu vực thành phố nơi cửa hàng đang hoạt động.

Nói tóm lại, câu hỏi đặt ra là: Ai là khách hàng hiện đang sống trong khu vực thành phố, ở ngoài ngoại ô nhưng đã từng đặt hàng tại tiệm bánh của chúng ta?

Bước 2: Xác định thông tin mình cần

Đâu là những thông tin cần xác minh? Lẽ dĩ nhiên ta cần tên tuổi và thông tin liên lạc của khách hàng – địa chỉ, số điện thoại, và cả hòm thư email nữa. Nhưng làm sao để biết các thông tin trên nếu như khách hàng đã từng đặt hàng rồi? Mỗi đơn hàng đều được ghi chép lại, trong đó xác định rõ ai là người đặt hàng. Nếu ta thêm vào số ID cá nhân của từng khách hàng, thì ta hoàn toàn có thể thu gọn danh sách xuống chỉ còn những người nào đã từng khách hàng cũ của cửa hàng.

Bước 3: Xác định vị trí bảng dữ liệu chứa thông tin cần tìm

Để tạo lập query, bạn cần phải làm quen với các dạng bảng trong cơ sở dữ liệu chung. Với kinh nghiệm đã có từ ví dụ trước, ta đã biết rằng thông tin khách hàng sẽ được lưu ở bảng Customers. Thông tin về mã số ID của đơn hàng sẽ được lưu tại bảng Orders. Ta chỉ cần thêm 2 bảng dữ liệu này vào là có thể tìm được tất cả thông tin mình cần.

Bước 4: Thiết lập các tiêu chí ràng buộc cho query

Khi thiết lập các tiêu chí ràng buộc tức là bạn đang tự tạo 1 bộ lọc mới quy định rõ ràng query chỉ được truy vấn các thông tin đáp ứng được những tiêu chí nhất định. Dựa trên các mục thông tin được điền vào nội dung của query, theo bạn ta nên đưa ra các tiêu chí gì?

Ta không cần khách hàng sống ở nội thành Raleigh, cho nên tiêu chí đầu tiên phải là chỉ tìm kiếm các bản ghi khách hàng không sống ở trung tâm thành phố Raleigh. Ta cũng không cần các khách hàng sống quá xa. Tất cả các số điện thoại được kích hoạt trong khu vực thành phố đều có mã vùng 919, cho nên tiêu chí thứ hai là chỉ trả về các kết quả trong đó mục số điện thoại di động phải bắt đầu bằng 3 số 919. Tất cả chỉ để đảm bảo rằng ta sẽ chỉ gửi phiếu giảm giá cho những khách hàng sống ở khu vực gần vừa đủ sao cho họ có khả năng có thể quay lại mua bánh tại cửa hàng.

Ta sẽ không thêm các tiêu chí khác liên quan đến mã ID hay bất cứ các mục nào khác bởi vì ta cần phải kiểm tra tất cả các đơn hàng được đặt bởi các khách hàng đáp ứng đủ 2 tiêu chí trên:

Lưu ý: Để viết được 1 query hay thì bạn cần phải đặt các tiêu chí phù hợp với ngôn ngữ soạn thảo của Access. Như hình ở trên, tiêu chí yêu cầu các số điện thoại khách hàng phải bắt đầu bằng 3 số 919 cần phải được viết như sau: Like(“919”).

Kết hợp bảng dữ liệu trong query

Bước cuối cùng bạn cần quan tâm là làm sao để kết hợp bảng dữ liệu vào trong nội dung của query. Khi bạn bổ sung 2 bảng dữ liệu vào nội dung của query trong Access, cửa sổ Object Relationship sẽ có hình dạng như sau:

Đường gạch giữa 2 bảng được gọi là đường nối. Nhìn hơi giống mũi tên phải không?  Đó là bởi vì nó thể hiện thứ tự query sẽ truy vấn dữ liệu. Trong ảnh trên, dấu mũi tên hướng từ trái sang phải, có nghĩa là query sẽ truy vấn dữ liệu ở bảng bên trái trước rồi sau đó sẽ đối chiếu các giá trị tương ứng tương đồng bên bảng dữ liệu bên phải.

Đôi khi các bảng dữ liệu sẽ không được kết hợp giống như vậy. Đôi khi Access sẽ mặc định kết hợp theo chiều từ phải sang. Trong cả 2 trường hợp, bạn đều cần phải thay đổi chiều truy vấn để đảm bảo rằng query thu thập đúng thông tin. Chiều truy vấn sẽ quyết định đến loại thông tin được tìm kiếm.

Để hình dung rõ hơn, ta sẽ xem xét ví dụ sau. Để thiết lập query, ta cần phải biết danh sách các khách hàng đã từng đặt hàng tại tiệm bánh, vì vậy ta sẽ kết hợp hai bảng số liệu Customers và Orders lại với nhau. Dưới đây là ảnh minh họa:

Bạn có thể thấy trong ảnh thể hiện điều gì? Thứ nhất, mỗi đơn hàng trong bảng Orders đều được gán cho 1 khách hàng nhất định trong bảng Customers – cũng chính là khách hàng đã thực hiện đơn hàng đó. Tuy vậy, khi nhìn sang bảng Customers, ta có thể thấy rằng có những khách hàng lại đặt nhiều hơn 1 đơn hàng cùng lúc, trong khi có những khách hàng lại chưa mua bánh bao giờ cho nên không được gán cho bất cứ đơn hàng nào cả. Từ đó, bạn có thể thấy rằng khi kết hợp 2 bảng dữ liệu lại thì vẫn có khả năng các bản ghi của hai bảng không hề có mỗi quan hệ tương ứng.

Vậy điều gì sẽ xảy ra nếu Access quy định chiều truy vấn từ trái sang phải? Nó sẽ bắt đầu bằng việc rút tất cả các bản ghi có trong bảng Customers bên trái…

Và sau đó truy vấn các bản ghi có mối liên hệ tương ứng từ bảng Orders bên phải.

Bởi vì việc kết hợp 2 bảng diễn ra theo chiều từ bảng Customers sang cho nên dữ liệu truy vấn ban đầu sẽ bao gồm bản ghi liên quan đến tất cả các khách hàng của tiệm bánh, kể cả những khách chưa từng mua hàng ở tiệm bao giờ. Điều này là hơi thừa bởi vì ta chỉ cần thông tin về các khách hàng đã từng đặt hàng tại tiệm bánh mà thôi.

May thay ta có thể giải quyết vấn đề này bằng cách thay đổi chiều truy vấn giữa 2 bảng. Nếu ta kết hợp theo chiều từ phải sang trái, Access sẽ truy vấn các giá trị về đơn hàng trong bảng Orders trước:

Và sau đó mới tìm kiếm các bản ghi của các khách hàng có liên hệ với bất cứ đơn hàng nào ở bên phải:

Đến lúc này ta đã có được thông tin mình cần: danh sách tất cả các khách hàng đã từng đặt hàng và chỉ những khách hàng đó mà thôi. Việc kết hợp bảng dữ liệu đúng chiều đóng vai trò vô cùng quan trọng để ta có thể tìm kiếm được đúng thông tin cần thiết.

Lưu ý: Trong quá trình thiết lập query, ta sẽ sử dụng chiều từ trái sang phải, tuy nhiên hướng kết hợp đúng sẽ tùy thuộc vào thông tin mà bạn cần cũng như vị trí thông tin. Khi thêm bảng dữ liệu vào query thì Access sẽ tự động kết hợp bảng dữ liệu giúp bạn, tuy nhiên phần lớn kết quả lại bị lỗi sai chiều kết hợp. Điều quan trọng là bạn phải luôn để ý và kiểm tra lại chiều truy vấn của bảng trước khi thực hiện việc tạo lập query

Cách tạo lập một query dạng đa bảng

Bước 1: Chọn lệnh Query Design từ thanh tác vụ tab Create trên thanh Ribbon

Bước 2: Trong hộp thoại xuất hiện, lựa chọn bảng dữ liệu mà bạn muốn thêm vào query, sau đó click Add. Bạn có thể bấm giữ phím Ctrl để lựa chọn cùng lúc nhiều bảng hơn. Sau khi chuẩn bị nội dung của query, ta biết rằng mình sẽ sử dụng thông tin trong 2 bảng Customers và Orders, vì vậy ta sẽ thêm 2 bảng này vào nội dung query.

Bước 3: Sau khi thêm hết các bảng dữ liệu, click Close để đóng hộp thoại

Bước 4: Khi đó bảng dữ liệu sẽ xuất hiện trong màn hình Object Relationship, được nối bằng đường nối liên hệ. Click đúp vào nét giữa của đường nối để có thể thay đổi chiều kết hợp.

Bước 5: Hộp thoại Join Properties sẽ xuất hiện. Lựa chọn hướng kết hợp 2 bảng. Ở đây ta sẽ click vào lựa chọn thứ 3 bởi vì ta cần hướng kết hợp từ phải sang trái

Bước 6: Trong cửa sổ làm việc với bảng dữ liệu, click đúp vào tên từng đầu mục mà bạn muốn xuất hiện trong query. Khi đó tên các mục sẽ được thêm vào bảng tóm tắt dạng lưới ở phía dưới màn hình. Trong ví dụ này, ta sẽ thêm phần lớn các mục của bảng Customers: First NameLast NameStreet AddressCityStateZip Code cũng như mục ID Number từ bảng Orders nữa.

 

Bước 7:  Đặt tiêu chí ràng buộc bằng cách điền vào từng dòng tương ứng với từng tên đầu mục. Ta sẽ đặt 2 tiêu chí sau: Not in (“Raleigh”) trong mục City, Like (“919*”) trong mục Phone Number. Thiết lập này sẽ giúp lọc các kết quả về khách hàng không sống tại thành phố Raleigh nhưng vẫn sinh sống trong khu vực có mã vùng 919.

 

Bước 8: Sau khi hoàn thành các bước thiết lập, hãy chạy query bằng cách click vào lệnh Run trên thanh tác vụ Design

Bước 9: Kết quả của query sẽ được thể hiện trong cửa sổ Datasheet, được bố trí như dạng bảng. Bạn có thể lưu lại query bằng lệnh Save trong thanh công cụ Truy cập nhanh. Khi được hỏi về tên gọi, hãy đặt tên cho query của mình và bấm OK là xong.