3.2.1 Các loại truy vấn
+Select Query : Truy vấn chọn
+ Crosstab Query : Truy vấn tham khỏa chéo (Thể hiện dòng và cột) + Truy vấn tạo bảng (make table Query )
+ Truy vấn nối (append Query ) + Truy vấn cập nhật ( Update Query)
+ Truy vấn xóa dữ liệu ( Delete Query ) SQL Query : Truy vấn đƣợc viết bởi ngôn ngữSQL.
Trong đó Select Query là truy vấn quan trọng nhất vì Select query là loại truy vấn dùng trích - lọc - kết xuất dữ liệu từ nhiều nguồn khác nhau từ CSDL ra một bảng kết quả. Ví dụ:
- Đƣa ra thông tin chi tiết bảng lƣơng tháng 8; - Đƣa ra danh sách cán bộ là Đảng viên;
- Đƣa ra thông tin chi tiết về các hoá đơn bán ra trong ngày hôm nay; - Đƣa ra doanh thu bán hàng của một tháng nào đó;
- …
Tất cả những yêu cầu dạng nhƣ vậy (đƣa ra một danh sách kết quả) đều có thể sử dụng SELECT query để đáp ứng. Mỗi yêu cầu xử lý dữ liệu cần phải tạo ra một Select query đáp ứng; mỗi query sẽ có một tên gọi (nhƣ cách đặt tên bảng dữ liệu); query sau khi đã tạo ra đều có thể chỉnh sửa lại đƣợc cấu trúc cũng nhƣ nội dung; qui trình để đáp ứng mỗi yêu cầu trên nhƣ sau: tạo một query đáp ứng đƣợc các yêu cầu thi hành query đã tạo để thu nhận kết quả.
3.2.2 Các chế độ hiển thị truy vấn
- Cửa sổ thiết kế truy vấn (Design view).
Trong chế độ này, ngƣời sử dụng có thể tạo, sửa chữa một truy vấn nào đó. Màn hình truy vấn chứa hai phần, phần thứ nhất chứa các bảng (hoặc truy vấn) tham gia truy vấn, phần thứ hai gọi là vùng lƣới QBE (Query By Example).
- Cửa sổ hiển thị truy vấn (DataSheet view). Sử dụng chế độ này để xem kết quả.
- Cửa sổ lệnh SQL (SQL view).
Sử dụng chế độ này để xem mã lệnh của truy vấn đang tạo
3.2.3 Tạo truy vấn
3.2.3.1 Tạo một truy vấn mới
Bƣớc 1: Từ cửa sổ Database, click vào menu Create, Bấm chọn Query Design
Bƣớc 2: Trong bảng Show Table chọn tables để hiển thị các bảng, chọn các bảng tham gia vào truy vấn và nhấn nút Add, sau đó nhấn Close. (Nếu chọn Queries thì hiển thị truy vấn, chọn both thì hiển thị cả truy vấn và bảng dữ liệu).
Bƣớc 3: Đƣa các trƣờng từ các bảng vào tham gia truy vần bằng cách kéo các trƣờng và thả vào hàng Field trong vùng lƣới QBE.
Trong hang Sort: Sắp xếp dữ liệu ( nếu có)
Trong hàng Criteria đặt tiêu chuẩn ( nếu có). Lƣu truy vấn
Hình 3.2. Khai báo thông tin cho Query
Chú ý: Mỗi truy vấn có :
+ Tối đa 32 bảng tham gia. Tối đa 255 trƣờng
+ Kích thƣớc tối đa cảu bảng dữ liệu ( do truy vấn tạo ra) là 1 gigabyte. Số trƣờng dung làm khóa sắp xếp tối đa là 10
+ Số truy vấn lồng nhau tối đa là 50 cấp.
+ Số ký tự tối đô trong ô của vùng lƣới là 1024.
+ Số ký tự tối đa trong dòng lệnh SQL là 64000. Số ký tự tối đa trong tham số là 255.
3.2.3.2 Các thao tác với truy vấn
Các trƣờng trong truy vấn sẽ hiển thị theo thứ tự nhƣ xuất hiện trong vùng lƣới QBE.
a. Thay đổi thứ tự của trƣờng
Đƣa con trỏ vào thanh chọn sao cho con trỏ biển thành hình mũi tên trỏ xuống Click để chọn trƣờng. Drag để thay đổi vị trí
b. Xóa trƣờng
Đƣa con trỏ vào thanh chọn sao cho con trỏ biến thành hình mũi tên trỏ xuống Click để chọn trƣờng
Nhấn phím delete (Nếu muốn xoá tất cả các trƣờng trong vùng lƣới QBE: chọn Home/Delete)
c. Làm việc với vùng lƣới QBE
Muốn biết tên trƣờng hiện tại trong vùng lƣới QBE là của tên bảng nào, tại chế độ Design View ngƣời sử dụng thực hiện bấm View
d. Xem kết quả truy vấn
Tại cửa sổ thiết kế truy vấn thực hiện chọn Menu Design/View hoặc chọn Menu Design /Run
e. Đổi tiêu đề cột trong truy vấn
Đổi tên tiêu đề cột trong truy vấn mục đích là làm cho bảng kết xuất dễ đọc hơn (Trừ khi đã quy định thuộc tính Caption).
Muốn đổi tiêu đề cột thực hiện các bƣớc sau:
Bƣớc 1: Mở truy vấn ở chế độ Design View. Sau đó chọn vào bên trái ký tự đầu tiên của tên trƣờng trong vùng lƣới QBE
Bƣớc 2: Gõ vào tên mới, theo sau là dấu 2 chấm(:) Ví dụ:
Hình 3.3. Ví dụ đổi tiêu đề cột trong truy vấn
f. Định thứ tự sắp xếp
Có thể sử dụng nhanh trong chế độ datasheet View .
Có thể tạo sắp xếp trong khi thiết kế truy vấn bằng cách chọn Ascending (tăng dần) hoặc Descending (giám dần) trong hàng Sort của vùng lƣới QBE .
* Chú ý: Nếu có nhiều trƣờng định vị sắp xếp thì theo thứ tự ƣu tiên từ trái sang phải.
g. Che dấu hay thể hiện các trƣờng trong Dynaset
Tại hàng Show ứng với trƣờng cần che dấu chúng ta không chọn mặt dù nó vẫn tồn tại, vẫn tham gia truy vấn
- Mối quan hệ giữa thuộc tình của trƣờng trong truy vấn và trong bảng dữ liệu Theo mặc nhiên, các trƣờng trong truy vấn kế thừa tất cả các thuộc tính của trƣờng trong bảng làm nguồn dữ liệu. Nếu không quy định lại trong truy vấn, các
trƣờng trong Dynaset hoặc snapshot luôn kế thừa các thuộc tính của bảng làm nguồn dữ liệu. Nếu thay đổi thiết kế trong bảng làm nguồn dữ liệu và thay đổi thuộc tính của các trƣờng thì thuộc tính này cũng đƣợc thay đổi trong truy vấn. Tuy nhiên, nếu quy định lại các thuộc tính cho các trƣờng trong truy vấn thì các thuộc tính của các trƣờng trong bảng làm nguồn dữ liệu không thay đổi.
Hình 3.4. Che dấu hay thể hiện các trường trong Dynaset
h. Các phép toán hỗ trợ khi thiết kế Query - Bảng các phép toán số học Phép toán Ý nghĩa ^ Phép lũy thừa. * Phép nhân. / Phép chia. \ Phép chia nguyên. + Phép cộng. - Phép trừ. mod Phép chia dƣ. ( ) Phép toán gộp. - Bảng các phép toán chuỗi Phép toán Ý nghĩa & Phép ghép chuỗi. - Bảng các phép toán so sánh Phép toán Ý nghĩa = So sánh bằng <> So sánh khác > So sánh lớn hơn <= So sánh nhỏ hơn hoặc bằng < So sánh nhỏ hơn >= So sánh lớn hơn hoặc bằng
- Bảng các phép toán logic Phép toán phủ định: Not A Not A True False False True Phép toán và: AND A B A and B
True True True
True False False
False True False
False False False
Phép toán hoặc : OR
A B A OR B
True True True
True False True
False True True
False False False
- Phép đối sánh mẫu
Cú pháp
<Field> like <mẫu dữ liệu>
So sánh giá trị của Field với <mẫu dữ liệu>. Nếu giống thì trả về giá trị True, ngƣợc lại trả về False.
Có thể sử dụng các ký tự đại diện sau để so sánh: Ký tự *: đại diện cho một chuỗi ký tự. Ký tự ?: đại diện cho một ký tự.
Ký tự #: đại diện cho một ký số.
Ví dụ: Tenkh like “Cong ty TNHH *”→Tìm các khách hàng có tên bắt đầu là “Cong ty TNHH”.
Ví dụ: Holot like “Nguyen *” → Tìm các nhân viên có họ “Nguyen”. - Phép toán “Between … And …”
Cú pháp
Tìm giá trị Field nằm trong một phạm vi. Nếu tìm thấy sẽ cho giá trị True, ngƣợc lại trả về False.
Ví dụ: Ngaylaphd between #01/01/02# and #31/12/02# → Tìm các hóa đơn lập trong năm 2002.
- Phép toán “IN”
Cú pháp
<Field> in(<giá trị 1>;<giá trị 2>; …)
Tìm các giá trị của Field phù hợp với một trong các <giá trị n> trong ngoặc. Nếu tìm thấy thì trả về True, ngƣợc lại trả về False.
Ví dụ: Thanhpho in(“Bien Hoa”;”Ha Noi”;”TpHCM”) →Tìm các khách hàng ở các thành phố: Bien Hoa, Ha Noi, TpHCM.
Ví dụ: Month(Ngaylaphd) in(9;10) → Tìm các hóa đơn lập trong tháng 9 hoặc 10.
- Phép toán “Is Null” “Is not Null “
Cú pháp
<Field> is Null <Field> Is not Null Kiểm tra giá trị của Field có rỗng hay không.
Ví dụ: Dienthoaikh Is Null → Tìm các khách hàng chƣa có điện thoại. Ví dụ: Dienthoaikh Is not Null → Tìm các khách hàng đã có điện thoại. Ví dụ: Ngaynhan Is Null→ Tìm các hóa đơn chƣa giao hàng.
- Một số hàm thƣờng dung trong Query
TT Hàm Ý nghĩa
1 IIf(<điều kiện>;<giá trị 1>;<giá trị 2>) Kiểm tra điều kiện Ví dụ:
IIf(ngaylaphd between #1/1/04# and #30/6/04#;”6 tháng đầu”;”6 tháng cuối”)
2 Month(<ngày>) Trả về giá trị tháng
Ví dụ: Month(#15/12/04#) → 12
3 Year(<ngày>) Trả về giá trị năm
Ví dụ: Year(#15/12/04#) → 2004
4 Day(<ngày>) Trả về giá trị ngày
5 Datepart(“mã ngày tháng năm”;<ngày>) Trả về khoảng phần của ngày Ví dụ:
Datepart(“m”;ngaylaphd) → Trả về các giá trị tháng trong ngày lập đơn (1 – 12)
Datepart(“q”;ngaylaphd) → Trả về các giá trị quý trong ngày lập đơn (1 – 4)
Datepart(“yyyy”;ngaylaphd) → Trả về các giá trị năm trong ngày lập đơn
6 Val(<ký số>) Trả về giá trị số
Ví dụ: Val(“12345”) → số 12345
7 Round(<số>;<cách làm tròn) Làm tròn số Ví dụ: Round(123.45;1) →123.5
3.2.3.3 Liên kết các bảng trong truy vấn
Khi các bảng dữ liệu đƣợc thiết lập mối quan hệ thì trƣờng nối với nhau gọi là trƣờng liên kết, trong access phân biệt 3 loại liên kết sau
a. Liên kết nội (Inner join)
Đây là loại liên kết rất phổ biến nhất giữa 2 bảng dữ liệu. Trong đó dữ liệu khi thể hiện trên Dynaset sẽ gồm những bản ghi mà dữ liệu chứa trong trƣờng liên kết ở hai bảng phải giống nhau hoàn toàn.
b. Liên kết ngoại (Outer join)
Đây là loại liên kết cho phép dữ liệu thể hiện trên Dynaset của một trong hai bảng tham gia có nội dung trƣờng liên kết không giống nội dung trong trƣờng tƣơng ứng của bảng còn lại. Liên kết ngoại đƣợc chia làm hai loại
Left Outer Join: Trong kiểu liên kết này, dữ liệu ở bảng bên "1" thể hiện toàn bộ trên Dynaset và chỉ những bản ghi bên bảng "nhiều" có nội dung trong trƣờng liên kết giống trƣờng tƣơng ứng bên bảng "1".
Right Outer Join: Trong kiểu liên kết này, dữ liệu ở bảng bên "nhiều" thể hiện toàn bộ trên Dynaset và chỉ những bản ghi bên bảng "1" có nội dung trong trƣờng liên kết giống trƣờng tƣơng ứng bên bảng "nhiều".
c.Tự liên kết (Seft join)
Là kiểu liên kết của một bảng dữ liệu với chính nó. Trong đó một bản ghi trong bảng dữ liệu sẽ liên kết với những bản ghi khác trong bảng dữ liệu đó. Tự liên kết có thể hiểu nhƣ là liên kết nội hay liên kết ngoại từ một bảng vào một bảng sao chính nó. Để thực hiện việc tạo tự liên kết chúng ta phải đƣa một bảng vào tham gia truy vấn 2 lần.
d. Tạo liên kết ngoại
Muốn tạo liên kết ngoại giữa 2 bảng dữ liệu ta thực hiện nhƣ sau: Database Tools/Relationships
Double click vào đƣờng liên kết giữa 2 bảng dữ liệu, chọn Join Type
Hình 3.5. Tạo liên kết ngoại
Trong hộp thoại Join Properties chọn mục 2 hoặc mục 3. e. Tạo một tự liên kết
Để tạo một tự liên kết chúng ta thực hiện
Tạo truy vấn mới và đƣa bảng dữ liệu vào truy vấn 2 lần Tạo các liên kết
Ví dụ:Cho bảng Dsdiem(Masv, Hoten, Diem_lan1, Diem_lan2)
Tạo truy vấn để hiển thị danh sách những sinh viên có điểm thi Lần 1 bằng điểm thi lần 2...
Tạo truy vấn mới và đƣa bảng Dsdiem vào tham gia truy vấn 2 lần Tạo liên kết nội (Inner join) giữa 2 trƣờng Masv
Tạo liên kết nội từ trƣờng Diem_lan1 vào Diem_lan2 Đƣa các trƣờng vào vùng lƣới QBE và xem kết quả