I. Giới thiệu về truy vấn
3 Truy vấn nâng cao
7. 3.1. Truy vấn tham số (Parameter Query)
a) Khái niệm
Một số truy vấn địi hỏi người dùng phải tự nhập điều kiện từ bàn phím trong mỗi lần thi hành. Các truy vấn này đa phần là các truy vấn thường được thực hiện nhiều lần, mỗi lần lại với một giá trị điều kiện khác nhau, thay vì phải thiết kế lại truy vấn sau mỗi lần thực hiện, cĩ thể tiết kiệm thời gian bằng cách tạo truy vấn tham số. Khi thực hiện loại này Access sẽ nhắc nhập điều kiện chọn trong hộp thoại Enter Parameter Value. Khi thực hiện truy vấn tham số, dữ liệu trong bảng kết quả của nĩ trình bày cĩ thể chỉnh sửa được.
Ví dụ:
61 Hình 3.25. Hộp thoại “Enter Parameter Value”
b) Các bước thực hiện truy vấn tham số
Từ cửa sổ “Database”, click vào đối tưọng “Queries”
Chọn nút “New” Chọn “Design View” chọn “OK” hoặc double-click trên “Create Query in Design View”. Hộp
thoại “Show Table” xuất hiện.
Trong bảng “Show Table” chọn tab “tables” để hiển thị các bảng tham gia vào truy vấn hoặc tab “Queries” để hiện các query hoặc tab “Both” để hiện cả tables và queries.
Hình 3.26.Cửa sổ New Query
Chọn table hoặc query mà bạn muốn dùng trong query đang tạo và nhấn nút “Add” để hiển thị trong cửa sổ Select Query, lặp lại cho tất cả bảng và truy vấn cần dùng, sau đĩ nhấn “Close” để đĩng hộp thoại Show
Table.
Đưa các trường từ các bảng (hoặc truy vấn) vào tham gia truy vấn mới bằng cách kéo các trường và thả vào hàng Field trong vùng lưới QBE (hoặc double- click vào tên trường cần hiển thị). Nếu hiển thị tất cả các trường trong một bảng thì double-click
vào * ở mỗi bảng. Hình 3.27.Cửa sổ Show Table
Trong hàng Sort: Sắp xếp dữ liệu (nếu cĩ) (Ascending: tăng dần, Descending: giảm dần)
Show: Cĩ hiển thị trường trong truy vấn hay khơng
Trong hàng Criteria: Gõ vào chuỗi nhắc tham số cho các trường cĩ điều kiện (nếu cĩ)
62
Chú ý: Chuỗi nhắc tham số phải nằm giữa 2 dấu ngoặc vuơng ([]) và cĩ thể là
hằng, số, chuỗi, ngày… nhưng khơng được là một biểu thức.
Chúng ta cĩ thể quy định kiểu dữ liệu cho tham số hoặc khơng chọn cũng được, nếu khơng quy định kiểu dữ liệu cho tham số thì Access sẽ mặc định chọn dữ liệu trùng với kiểu dữ liệu được thiết kế cho trường ở bảng biểu, quy định kiểu dữ liệu tham số bằng cách Chọn Queries/ Parameter Query. Trong hộp thoại Query parameters: Trong mục parameter chọn tham số, trong mục DataType chọn kiểu dữ liệu tương ứng
Click vào nút “Run” trên thanh cơng cụ để xem kết quả chạy Query vừa tạo.
Lưu truy vấn
Như vậy, các bước thực hiện truy vấn tham số cũng giống như thực hiện truy vấn chọn, chỉ khác là gõ vào chuỗi nhắc tham số cho các trường chứa điều kiện tại hàng Criteria thay vì gõ vào điều kiện như truy vấn chọn.
c) Ví dụ:
Truy vấn tham số 1: Hãy lọc những thơng tin về Sinh Viên, cĩ nơi sinh nhập từ bàn
phím
Tạo truy vấn chọn và đưa bảng SinhVien vào tham gia truy vấn
Đưa tất cả các trường trong bảng SinhVien vào vùng lưới QBE
Tại hàng Criteria của trường NoiSinh gõ vào chuỗi nhắc tham số [Hãy nhập vào nơi sinh]
Chọn Queries/ Parameter Query, chọn kiểu tham số là Text
Hình 3.28. Vùng lưới QBE thiết kế và cửa sổ Query Parameters cho truy vấn tham số 1
63
Sau khi chạy truy vấn thì xuất hiện thơng báo yêu cầu nhập vào nơi sinh
Hình 3.29. Cửa sổ yêu cầu nhập tham số truy vấn tham số 1
Truy vấn tham số 2: Tạo một truy vấn hiển thị danh sách Sinh viên cĩ ngày sinh
trong khoảng thời gian nào đĩ (Thời gian được nhập từ bàn phím) Truy vấn này cĩ nhiều tham số trên cùng một trường là NgaySinh
Tạo truy vấn chọn và đưa bảng SinhVien vào tham gia truy vấn
Đưa tất cả các trường vào vùng lưới QBE
Tại hàng Criteria của trường NGAYSINH gõ vào chuỗi nhắc tham số: Between[Từ ngày] and [Đến ngày]
Hình 3.30. Vùng lưới QBE thiết kế truy vấn tham số 2
64 Hình 3.31. Cửa sổ Query Parameters thiết kế truy vấn tham số 2
Khi chạy truy vấn sẽ cho kết quả sau
Hình 3.32. Cửa sổ yêu cầu nhập tham số truy vấn tham số 2
Truy vấn tham số 3: Hãy tạo một truy vấn để thể hiện tổng học bổng của một khoa
nào đĩ (Makhoa được nhập từ bàn phím), thơng tin hiển thị gồm: MaKhoa, TenKhoa, TongHB.
Đây là truy vấn tham số kết hợp với truy vấn tính tổng, chúng ta phải tiến hành tính tổng học bổng của trên mỗi khoa được gom nhĩm, và đưa chuỗi nhắc tham số vào trường mã khoa để khi chạy truy vấn thì nhập vào mã khoa
Tạo một truy vấn chọn đưa bảng SinhVien và DMkhoa vào tham gia truy vấn.
Đưa các trường MaKhoa, TenKhoa, HocBong vào vùng lưới QBE
Chọn View/ Totals
Trong hàng Total: Chọn Group by đối với trường MaKhoa, TenKhoa và Sum đối với trường HocBong
Trong hàng Criteria đối của trường MaKH ta chọn tham số sau: [Nhập mã khoa]
65
8. 3.2. Truy vấn chéo (Crosstab Query)
a) Khái niệm
Truy vấn chéo là loại truy vấn dùng để tĩm lược dữ liệu theo chủng loại và trình bày kết quả dưới hình thức của một bảng thống kê, thể hiện các dịng dữ liệu lưu trữ trong bảng thành các cột khi chuyển ra ngồi. Truy vấn chéo thường dùng để so sánh dữ liệu. Khi thực hiện truy vấn chéo, dữ liệu trong bảng kết quả của nĩ trình bày khơng thể chỉnh sửa được
Ví dụ: Hãy thống kê mỗi khoa cĩ bao nhiêu sinh viên nam và bao nhiêu sinh viên
nữ
Hình 3.34. Bảng kết quả của thí dụ trên
Một yêu cầu như vậy phải dùng Crosstab Query. Đĩ là loại truy vấn duy nhất cĩ khả năng tạo bảng tham chiếu chéo: Tổng hợp từ một đến nhiều chỉ tiêu theo hàng (Row Heading), trên một hàng lại tổng hợp (chỉ một) chỉ tiêu khác theo cột (Column Heading), vùng giao nhau giữa hàng và cột thì hiện chỉ số tổng hợp của một (chỉ một) chỉ tiêu thứ ba (Value)
b) Xác định các yếu tố trong truy vấn chéo
Tiêu đề cột (Column Heading): - Chỉ cĩ duy nhất một trường
- Giá trị của cột trong bảng làm tên cột trong query thì tên cột trong bảng làm tiêu đề cột
Tiêu đề dịng (Row Heading): - Cĩ một hoặc nhiều trường
- Các tên cột cịn lại trong query sẽ là tiêu đề dịng
Giá trị (Value)
- Duy nhất một trường (thơng thường là trường khĩa chính) - Vùng giao nhau giữa hàng và cột thể hiện chỉ số tổng hợp
Với ví dụ trên, ta thấy rằng 2 cột “Nam” và “Nữ” chính là giá trị của trường GioiTinh trong bảng SinhVien, nên trường GioiTinh chính là tiêu đề cột (chỉ cĩ duy nhất một trường), ngồi 2 cột “Nam” và “Nữ” cịn cĩ 2 cột cịn lại là MaKhoa và
66 TenKhoa chính là tiêu đề dịng, vùng giao giữa cột và hàng là số lượng sinh viên nên cột giá trị chính là MaSV (chỉ cĩ duy nhất một cột)
Hình 3.35. Bảng SinhVien trong CSDL QuanLySinhVien.mdb c) Các bước thực hiện tạo truy vấn chéo
Từ cửa sổ “Database”, click vào đối tưọng “Queries”
Chọn nút “New” Chọn “Design View” chọn “OK” hoặc double-click trên “Create Query in Design View”. Hộp thoại “Show Table” xuất hiện.
Trong bảng “Show Table” chọn tab “tables” để hiển thị các bảng tham gia vào truy vấn hoặc tab “Queries” để hiện các query hoặc tab “Both” để hiện cả tables và queries.
Chọn table hoặc query mà bạn muốn dùng trong query đang tạo và nhấn nút “Add” để hiển thị trong cửa sổ Crosstab Query, lặp lại cho tất cả bảng và truy vấn cần dùng, sau đĩ nhấn “Close” để đĩng hộp thoại Show Table.
Chọn Query/ Crosstab Query, lúc này cửa sổ hiện thêm một hàng mới là Crosstab
67 Hình 3.36. Cửa sổ thiết kế truy vấn chéo
Đưa các trường tiêu đề cột, tiêu đề dịng và giá trị vào trong vùng lưới QBE
Tiêu đề cột:
- Tại hàng Total: Bắt buộc chọn phép tốn Group by - Tại hàng Crosstab: Chọn Column heading
Tiêu đề dịng:
- Tại hàng Total: Ít nhất một trong các trường phải chọn phép tốn Group by - Tại hàng Crosstab: Chọn Row Heading
Giá trị:
- Tại hàng Total: Chọn phép tốn thích hợp - Tại hàng Crosstab: Chọn Value
Trong hàng Sort: Sắp xếp dữ liệu (nếu cĩ)
Show: Cĩ hiển thị trường trong truy vấn hay khơng
Trong hàng Criteria: Đặt điều kiện (nếu cĩ)
Click vào nút “Run” trên thanh cơng cụ để xem kết quả chạy Query vừa tạo.
Lưu truy vấn d) Ví dụ
Truy vấn chéo 1: Hãy thống kê mỗi khoa cĩ bao nhiêu sinh viên nam và bao nhiêu
sinh viên nữ
Các yếu tố về tiêu đề cột, tiêu đề dịng và giá trị thì như đã phân tích xác định ở trên.
68
Chọn Query/ Crosstab Query, đưa các trường GioiTinh, MaKh, TenKhoa, MaSV vào vùng lưới QBE
Trường GioiTinh
- Tại hàng Total: Chọn Group by
- Tại hàng Crosstab: Chọn Column heading
Trường MaKh, TenKhoa
- Tại hàng Total: Chọn Group by
- Tại hàng Crosstab: Chọn Row heading
Trường MaSV:
- Tại hàng Total: Chọn Count - Tại hàng Crosstab: Chọn Value
Hình 3.37. Vùng lưới QBE thiết kế truy vấn chéo 1
Truy vấn chéo 2: Hãy tính tổng học bổng và đếm số lượng sinh viên theo giới tính
của mỗi khoa, theo mẫu sau:
Hình 3.38. Yêu cầu kết quả truy vấn chéo 2
Với ví dụ trên, 2 cột “Nam” và “Nữ” chính là giá trị của trường GioiTinh trong bảng SinhVien, nên trường GioiTinh chính là tiêu đề cột (Groupby), ngồi 2 cột “Nam” và “Nữ” cịn cĩ 2 cột cịn lại là TenKhoa và TongSV chính là tiêu đề dịng (TenKhoa dùng phép tốn Groupby cịn TongSV thì dùng Count trên trường MaSV), vùng giao giữa cột và hàng là tổng học bổng nên cột giá trị chính là HocBong (dùng
69 phép tốn Sum). Như vậy, qua ví dụ trên chúng ta thấy rằng khơng phải lúc nào các trường tiêu đề dịng cũng dùng phép tốn Group by mà chỉ cần ít nhất một phép tốn Group by là được, cịn trường giá trị khơng phải lúc nào cũng là trường làm khĩa chính mà thơng thường là trường khĩa chính, cịn ở ví dụ này là trường HocBong.
Tạo truy vấn, đưa các bảng DMkhoa và SinhVien vào tham gia truy vấn
Chọn Query/ Crosstab Query, đưa các trường GioiTinh, TenKhoa, MaSV, HocBong vào vùng lưới QBE
Trường GioiTinh
- Tại hàng Total: Chọn Group by
- Tại hàng Crosstab: Chọn Column heading
Trường TenKhoa
- Tại hàng Total: Chọn Group by
- Tại hàng Crosstab: Chọn Row heading
Trường MaSV: Đổi tên thành TongSV - Tại hàng Total: Chọn Count
- Tại hàng Crosstab: Chọn Row heading
Trường MaSV:
- Tại hàng Total: Chọn Count - Tại hàng Crosstab: Chọn Value
70