James Perry, Richard Newmark
Chương 4
Tạo và dùng câu truy vấn
Tìm các nhân viên làm việc lâu hơn thời gian làm việc trung bình
Việc tìm những nhân viên đang làm việc cho The Coffee Merchant dài hơn thời gian làm việc trung bình của mọi nhân viên là một ví dụ khác cho thấy lệnh SQL có thể giúp tìm đáp án đúng dễ hơn. Hãy chia bài toán thành hai phần. Đầu tiên, làm sao viết được một truy vấn Access để tính thời gian trung bình của mọi nhân viên đang làm việc cho The Coffee Merchant? Bạn có thể giải bằng một truy vấn Totals chứa biểu thức trong dòng Field để tính thời gian đã qua giữa thời điểm hôm nay và thời điểm tuyển dụng của từng nhân viên. Sau đó, bạn chọn hàm trung bình Avg trong dòng Total bên dưới biểu thức thời gian tuyển dụng để tính thời gian làm việc trung bình. Một khi có được giá trị đó, bước kế là chọn tất cả nhân viên trong bảng tblEmployee có thời gian làm việc dài hơn thời gian trung bình của mọi nhân viên.
Dùng kỹ thuật tương tự ví dụ SQL trước đây, bạn có thể tạo một truy vấn để trả về tập động dynaset. Khi thi hành truy vấn, Access sẽ tính thời gian làm việc trung bình rồi so với thời gian làm việc của từng dòng nhân viên. Nếu thời gian làm việc của dòng nhân viên hiện thời lớn hơn thời gian làm việc trung bình, các cột đã chọn từ dòng nhân viên đó sẽ xuất hiện trong tập động dynaset. Quá trình so sánh sẽ lặp cho đến khi Access xử lý hết mọi dòng nhân viên. Như vậy, bạn cảm nhận rằng đây có thể là quá trình tính toán mất nhiều thời gian. Ta hãy viết truy vấn này hoàn toàn bằng SQL. Bạn sẽ tính thời gian làm việc theo ngày nhưng hiển thị theo tuần, tuy khoảng bất kỳ đủ nhỏ có thể chấp nhận được (ngoại trừ theo năm).
BÀI TẬP 4.16: TÌM THỜI GIAN LÀM VIỆC DÀI HƠN TRUNG BÌNH CỦA CÁC NHÂN VIÊN
1. Kích CREATE tab rồi kích Query Design trong nhóm Queries.
2. Kích nút Close trong hộp thoại Show Table. Để ý rằng Access hiển thị SQL trong nút View ở nhóm Results thuộc tab ngữ cảnh DESIGN.
3. Kích SQL trong nhóm Results thuộc tab ngữ cảnh DESIGN. Một khung văn bản lớn mở ra. Ở đây bạn sẽ viết một lệnh SELECT để tính toán.
4. Gõ lệnh SQL sau. Cần hết sức cẩn thận và kiểm tra kỹ nội dung viết ra ở đây trước khi bạn kích nút Run. Hãy viết với đúng số dòng được trình bày ở đây, mỗi lần nhấn Enter để sang dòng mới.
SELECT EmpFName, EmpLName, DateDiff('w',EmpHireDate,Now()) AS Weeks
FROM tblEmployee
WHERE Now()-EmpHireDate >
(SELECT AVG(Now()-EmpHireDate) FROM tblEmployee)
ORDER BY 3 DESC;
5. Kích nút Run (dấu chấm than màu đỏ) trong nhóm Results thuộc tab ngữ cảnh DESIGN để xem kết quả (xem Hình 4.33). Các giá trị nhận được sẽ phụ thuộc thời điểm bạn thi hành truy vấn. Nếu Access hiển thị lỗi, kích OK để đóng thông báo lỗi, kiểm tra lệnh SQL so với lệnh ở trên. Sửa lỗi rồi chạy lại. Kết quả sẽ hiển thị 10 nhân viên đang làm việc cho The Coffee Merchant dài hơn thời gian làm việc trung bình.
Hình 4.33 Tập động dynaset phát sinh từ một lệnh SQL được người dùng viết.
6. Kích nút Save trên thanh công cụ truy xuất nhanh Quick Access Toolbar, gõ MySQLQuery2, rồi kích OK để lưu. Đóng truy vấn.
Mặc dù rất có thể bạn không cần viết truy vấn bằng SQL, đôi khi bạn cần biết rằng bạn có thể viết và hiểu cách vận hành của nó.
Không có nhận xét nào:
Đăng nhận xét