Login>>  Nick Pass

 Học tập : Hệ quản trị CSDL : Microsoft Access
    Tìm hiểu về các truy vấn SQL với Ms Access
 

Bạn hãy click vào tên Diễn đàn con (phía trên) nếu muốn gửi Chủ đề mới
hoặc cuộn xuống cuối trang để trả lời cho Chủ đề này.


    
Tác giả Nội dung
dem_arap
Normal_Member

Ngày gia nhập:
19/02/2005 - 09:45:43
Số bài gửi: 81
Offline
Tìm hiểu về các truy vấn SQL với Ms Access
Ngày gửi : 01/10/2005 lúc 09:02:04 - Lượt xem: 1302

Quay về đầu        
huudung
Normal Member

Ngày gia nhập:
06/06/2004 - 02:24:02
Số bài gửi: 1936
Offline
truy vấn SELECT
Ngày gửi : 01/10/2005 lúc 10:36:29

cú pháp SELECT [predicate] <*|danh sách trường> FROM tableexpression [, ...] [IN externaldatabase] [WHERE <điều kiện lọc bản ghi>] [GROUP BY ] [HAVING <điều kiện lọc nhóm> ] [ORDER BY [ASC | DESC ]] trong đó Predicate: có thể nhận 1 trong số các giá trị sau ALL: giá trị này là mặc định, tất cả các bản ghi (thỏa mãn câu lệnh SQL) sẽ được lấy vd: SELECT ALL * FROM tblTacgia DISTINCT: trong kết quả trả ra sẽ không có các bản ghi trùng lặp trên các trường được lấy ra (chỉ có bản ghi đầu tiên có giá trị được lấy ) vd: lấy ra các bản ghi trừ các bản ghi trùng nhau trên trường sHoten, tNgaysinh SELECT Distinct sHoten, tNgaysinh FROM tblTacgia DISTINCTROW: trong kết quả trả ra sẽ không có các bản ghi trùng lặp cả bản ghi (toàn bộ các trường trong bảng) và chỉ có bản ghi đầu tiên có giá trị được lấy TOP N [Percent] chỉ lấy ra N (hoặc N %) bản ghi đầu tiên thoả mãn câu lệnh SQL <*|danh sách trường> Phần dùng để chỉ định những trường sẽ được lấy ra, vd: select sHoten From tblTacgia truy vấn này sẽ lấy ra tất cả các bản ghi từ tblTacgia với 1 trường sHoten trong kết quả. Những trường được chỉ định này có thể là các trường đã có sẵn trong các bảng dữ liệu hoặc là biểu thức tính toán để trả ra dữ liệu (gọi là các trường tính toán). vd: Select sHoten, Year(date())-year([tNgaysinh]) From tblTacgia Truy vấn này sẽ trả ra các bản ghi với 2 trường dữ liệu trong đó trường sHoten là trường của bảng tblTacgia còn trường thứ 2 được tính toán theo biểu thức Year(date())-year([tNgaysinh]). Lưu ý rằng Microsoft Jet (Engine - bộ máy dữ liệu của Ms Access) qui định phải đặt các tên trường (nếu có chứa dấu cách, kí tự đặc biệt hoặc sử dụng trường làm đối số cho các hàm) trong dấu ngoặc vuông [] để phân biệt với xâu dữ liệu. Trong trường hợp ta lấy dữ liệu từ nhiều bảng khác nhau (chỉ định bởi mệnh đề FROM), nếu các bảng đó có chứa các trường trùng tên thì trong truy vấn ta phải chỉ định rõ ta lấy trường đó từ bảng nào bằng cú pháp .. Các trường trong ds trường được phân cách nhau bởi dấu phẩy (,) - thứ tự của các trường trong mệnh đề Select sẽ qui định thứ tự các cột trong kết quả trả về Ta có thể chỉ định việc lấy tất cả các trường bằng cách chỉ định dấu * vd: Select * From tblTacgia Jet sẽ hiểu rằng "truy vấn này muốn lấy ra tất cả các trường của bảng tblTacgia". Tuy nhiên, việc lấy ra tất cả các trường của bảng là một việc làm giảmg hiệu suất của truy vấn. Nhất là khi ta chỉ cần đến một số hữu hạn cụ thể các trường - tốt nhất ta nên chỉ định tường minh tên trường và thứ tự của các trường cần lấy ra. FROM tableexpression [, ...] Còn nữa ...
Quay về đầu       
huudung
Normal Member

Ngày gia nhập:
06/06/2004 - 02:24:02
Số bài gửi: 1936
Offline
FROM tableexpression [, ...]
Ngày gửi : 03/10/2005 lúc 08:50:49

FROM tableexpression [, ...] Ta sử dụng mệnh đề From để chỉ ra cho Jet biết truy vấn sẽ lấy bản ghi từ đâu. TableExpression có thể là danh sách các bảng dữ liệu, các truy vấn chứa sẵn(Access:Query / SQL Server: Storeprocedure/ View). Thông thường ta lấy các bản ghi từ 1 bảng/query Select tblSach.sTieude From tblSach xong ta có thể lấy dữ liệu từ nhiều bảng/query bằng cách chỉ định tên các table/query đó sau mệnh đề From Select tblSach.sTieude, tblTacgia.sHoten From tblTacgia, tblSach ...... (truy vấn này chưa hoàn thiện) Cần lưu ý là khi ta lấy dữ liệu từ nhiều bảng/query, ta phải chỉ định biểu thức để liên kết (so khớp) các bản ghi ở các bảng/query đó với nhau bằng cách sử dụng mệnh đề JOIN hoặc điều kiện WHERE. Trong truy vấn (không có biểu thức liên kết dữ liệu) trên, nếu bảng tblTacgia có 2 bản ghi còn bảng tblSach có 9 bản ghi --> kết quả ta sẽ lấy ra 9*2=18 bản ghi --> đây là điều không mong muốn. (hãy sửa lại truy vấn trên thành Select tblSach.sTieude, tblTacgia.sHoten From tblTacgia INNER JOIN tblSach ON tblTacgia.iTacgiaID=tblSach.iTacgiaID Hoặc Select tblSach.sTieude, tblTacgia.sHoten From tblTacgia , tblSach WHERE tblTacgia.iTacgiaID=tblSach.iTacgiaID và theo dõi các bài viết sau để tìm hiểu về JOIN và Where)
Quay về đầu       
huudung
Normal Member

Ngày gia nhập:
06/06/2004 - 02:24:02
Số bài gửi: 1936
Offline
[IN externaldatabase]
Ngày gửi : 03/10/2005 lúc 08:55:17

[IN externaldatabase] Mệnh đề IN trong Ms Access Jet chỉ ra cho Jet Engine biết rằng phải lấy dữ liệu từ 1 Database bên ngoài chứ không phải từ database này. vd: Mở csdl Thuvien.mdb và thực hiện truy vấn Select mathietbi, tenthietbi From THIETBI IN 'c:\data\qlThietbi.mdb' kết quả sẽ cho ta xem các bản ghi từ bảng THIETBI trong csdl qlThietbi.mdb
Quay về đầu       
huudung
Normal Member

Ngày gia nhập:
06/06/2004 - 02:24:02
Số bài gửi: 1936
Offline
[WHERE <điều kiện lọc bản ghi>]
Ngày gửi : 03/10/2005 lúc 09:31:48

[WHERE <điều kiện lọc bản ghi>] Ta sử dụng mệnh đề này để giới hạn bản ghi được trả về theo một hay nhiều tiêu chí lọc mà ta cung cấp. Mỗi tiêu chí lọc (điều kiện) là một biểu thức điều kiện (có giá trị True/False) như A>0 hay T='Hà Nội'. ví dụ: Lấy ra các nam tác giả Select sHoten, tNgaysinh From tblTacgia Where bGioitinh=Yes Ta có thể kết hợp nhiều tiêu chí lọc bằng AND hay OR ví dụ: lấy ra các nữ tác giả sinh năm 1978 Select sHoten, tNgaysinh From tblTacgia Where bGioitinh=No And Year(tNgaysinh)=1978 Các toán tử có thể sử dụng trong tiêu chí lọc của mệnh đề Where có thể là >, >=, <, <=, =, <>, BETWEEN, LIKE, IN
Quay về đầu       
huudung
Normal Member

Ngày gia nhập:
06/06/2004 - 02:24:02
Số bài gửi: 1936
Offline
chú ý với tên trường trong truy vấn với Access
Ngày gửi : 04/10/2005 lúc 12:33:00

Vì Access cho phép ta đặt tên trường với dấu cách (space) nên với Query, Access yêu cầu ta sử dụng dấu ngoặc vuông [] đối với tên trường dữ liệu. Điều này cũng tương tự như khi bạn viết biểu thức ở thuộc tính Default Value, Validation Rules vd: year(Date()) - Year([tNgaysinh])>=15 Một điểm đáng chú ý ở đây là: Với những gì được đặt trong dấu [], Access sẽ mặc định hiểu đó là 1 trường (field) và đi tìm trường đó trong nguồn dữ liệu được chỉ định bới mệnh đề From. Nếu bạn đưa vào trong [] một giá trị không phải là tên 1 trường nào trong các nguồn dữ liệu ví dụ: select [sHoten], [abc] From tblTacgia Access sẽ hiểu đó là 1 tham số, khi thực hiện truy vấn, Access sẽ hiển thị thông báo yêu cầu bạn nhập dữ liệu cho [abc] vì [abc] không phải là 1 trường của tblTacgia. Ta còn có thể áp dụng điều này cho các Query để có thể thực hiện theo các giá trị so sánh không biết trước vd: Select sHoten, tNgaysinh From tblTacgia Where tblTacgia.iNgaysinh Between [từ ngày] And [đến ngày]
Quay về đầu       
anonymous
Normal_Member

Ngày gia nhập:
01/11/2004 - 01:20:49
Số bài gửi: 108
Offline
thầy:...và theo dõi các bài viết sau để tìm hiểu về JOIN và Where)
Ngày gửi : 01/01/2006 lúc 10:10:27

:D.Thầy post lên đi chứ ạ.Em đang muốn coi lém :D
Quay về đầu       

 

 

 

| Quay về đầu trang |  





© 2004 Trung tâm Công nghệ đào tạo trực tuyến - Khoa Công nghệ Tin học - Đại học Mở Hà Nội