3-1
Tài liệu giảng dạy Microsoft Access 1 Trung Tâm Tin Học-Trường ĐH KHTN TP. HCM
Bài 3
Truy vấn dữ liệuNội dung Tổng quan về truy vấn dữ liệu 3
Thực hiện truy vấn bằng ngôn ngữ SQL 5
Giới thiệu công cụ truy vấn bằng QBE 15
Tham số trong truy vấn 2
0
Bài tập 23
3-2
Tài liệu giảng dạy Microsoft Access 1 Trung Tâm Tin Học-Trường ĐH KHTN TP. HCM
Giới thiệu Lý thuyết
18 Tiết
- Thực hiện các truy vấn bằng ngôn ngữ SQL
Ý nghóa sử dụng của các loại truy vấn
Cú pháp SQL của từng loại
- Công cụ hỗ trợ tạo truy vấn của Microsoft Access: QBE
- Tham số của truy vấn
tác liên quan đến nguồn dữ liệu đang được lưu trữ trong bảng. Các thao tác thông thường trên nguồn
dữ liệu là tìm kiếm thông tin, cập nhật nguồn dữ liệu, hiển thò dữ liệu ở những dạng khác nhau, ….
Để thực hiện được những thao tác đó, trong môi trường của hệ quản trò cơ sở dữ liệu ta sẽ sử dụng
ngôn ngữ truy vấn có cấu trúc (SQL) để tạo ra những câu truy vấn thao tác trên dữ liệu.
Các truy vấn được tạo trong môi trường của Access gọi là Query. Ta có thể tạo Query bằng 2 cách:
viết trực tiếp trong cửa sổ viết lệnh SQL hay là tạo bằng công cụ hỗ trợ QBE của Access.
Các loại truy vấn
Truy vấn chọn lựa (Select Query)
Loại truy vấn này chỉ mang tính chất cung cấp thông tin đã được lưu trữ trong bảng, không làm thay
đổi dữ liệu của bảng. Tập kết quả của truy vấn có thể được chọn lựa theo điều kiện cần xem thông
tin, có thể tạo ra các cột tính toán hay thống kê dữ liệu trên bảng khi hiển thò.
Tập dữ liệu của truy vấn hoàn toàn giống với những gì được lưu trong các bảng nhưng có thể hiển
thò gọn gàng và chứa nhiều thông tin không.
Ví dụ Tru
y
vấn tìm các NV Tổ 1
3-4
Tài liệu giảng dạy Microsoft Access 1 Trung Tâm Tin Học-Trường ĐH KHTN TP. HCM
Truy vấn tạo bảng(Make-Table Query)
Loại truy vấn này hoàn toàn giống với Select Query về mặt cú pháp và tập dữ liệu kết quả. Điểm
khác biệt duy nhất ở chỗ tập kết quả của Make-Table Query là tạo ra một bảng mới chứa dữ liệu.
Bảng được tạo có cấu trúc và các mẫu tin giống với những field có trong câu lệnh SQL tạo ra truy
Nội dung
SQL là ngôn ngữ dùng để làm
việc với các CSDL. Với SQL
chúng ta có thể thực hiện các
thao tác chọn dữ liệu hiển thò,
thêm, xoá dữ liệu có trong các
bảng, … Phần này sẽ trình bày
các dạng truy vấn và cách tạo
những truy vấn này bằng ngôn
ngữ SQL. Cách tạo
Truy vấn chọn dữ liệu
Các toán tử và một số hàm thông dụng
Truy vấn tạo bảng
Truy vấn thêm dữ liệu
Truy vấn cập nhật dữ liệu
Truy vấn xoá Cách tạo chung
Như đã trình bày ở phần trên, có nhiều dạng truy vấn với những tính năng khác nhau như truy vấn
chọn dữ liệu, truy vấn thêm dữ liệu, … Các dạng truy vấn này sẽ được tạo ra bằng các lệnh SQL
khác nhau nhưng các bước thực hiện với ngôn ngữ SQL thì hoàn toàn giống nhau.
Chọn thực đơn Insert Ỉ Query hoặc trên cửa sổ Database nhấn vào Queries và nhấn nút
New
Trên cửa sổ tiếp theo, chọn Design View
sinh, nơi sinh nhưng chỉ hiển thò những sinh viên có năm sinh < = 1977 và sắp xếp
theo năm sinh giảm dần.
SELECT masv, hosv & " " & tensv AS [Họ tên], nam AS [Phai],
Year(ngaysinh) AS [Năm sinh], noisinh
FROM SINHVIEN
WHERE Year(ngaysinh) <= 1977
ORDER BY Year(ngaysinh) DESC;
Ví dụ 2
Tạo truy vấn có yêu cầu giống với Ví dụ 1, nhưng chỉ đưa ra các sinh viên có năm
sinh lớn nhất và Phái là "Nam" nếu Nam=yes, ngược lại là "Nữ"
SELECT TOP 1 masv, [hosv] & " " & [tensv] AS [Họ tên], nam AS
[Phái], Year(ngaysinh)AS [Năm sinh], IIf(nam=yes, "Nam", "Nữ")
as [Phai],noisinh
FROM SINHVIEN
ORDER BY Year(ngaysinh) DESC;
Dạng 2: Truy vấn dữ liệu từ nhiều bảng
Cú pháp
lệnh SQL
SELECT [Tính chất] Biểu_thức 1[ AS tên_ cột1] , Biểu_thức 2 [AS
tên_cột 2] , ….
FROM (Table1 [T1]<PHÉP NỐI> Table2 [T2] ON <ĐIỀU KIỆN NỐI>)
<PHÉP NỐI> Table3 [T3] ON <ĐIỀU KIỆN NỐI>
WHERE …Điều kiện……………
ORDER BY Biểu_thức 1 [ASC/DESC] , Biểu_thức 2 [ASC/DESC] ;
Mô tả
PHÉP NỐI : là mối quan hệ giữa 2 bảng cần lấy dữ liệu, gồm các loại sau
INNER JOIN : Kết nối bằng, đưa ra dữ liệu chung cùng xuất hiện ở các bảng
LEFT JOIN : kết nối ưu tiên bảng bên trái, đưa ra tất cả thông tin ở bảng bên
WHERE …Điều kiện…lọc dữ liệu…………
Mô tả
Bt_thống_kê : là các biểu thức có sử dụng các hàm trong nhóm hàm tính toán
thống kê ( SUM, COUNT, MIN, MAX… )
Ví dụ 1
Tính tổng số sinh viên, tìm tuổi lớn nhất và nhỏ nhất của sinh viên, thông tin gồm:
Tổng số SV, Tuổi nhỏ nhất, Tuổi lớn nhất.
SELECT Count(masv) AS [Tổng số SV],
MIN(Year(Date())-Year(ngaysinh)) AS[Tuổi nhỏ nhất],
MAX(Year(Date())-Year(ngaysinh)) AS [Tuổi lớn nhất]
FROM SINHVIEN
Dạng 4: Truy vấn dữ liệu có phân nhóm
Cú pháp
lệnh SQL
SELECT [Tính chất] Bt_1, Bt_2, Bt_thống_kê_ 1[ AS tên_ cột1] ,
Bt_thống_kê_2 [AS tên_cột 2] ,
FROM (Table1 [T1]<PHÉP NỐI> Table2 [T2] ON <ĐIỀU KIỆN NỐI>)
<PHÉP NỐI> Table3 [T3] ON <ĐIỀU KIỆN NỐI>
[WHERE …Điều kiện cho các biểu thức ]
GROUP BY Biểu_thức_1, Biểu_thức_2
[HAVING …Điều kiện cho các biểu thức thống kê]
[ORDER BY ];
Mô tả
Bt_? : có thể là field, có thể là các biểu thức có sử dụng các hàm thông
thường nhưng không được sử dụng các hàm thống kê.
Bt_thống_kê_? : là các biểu thức có sử dụng các hàm trong nhóm hàm thống kê.
GROUP BY : phải nhóm tất cả các biểu thức không có sử dụng các hàm thống
And, Or, Not : các phép toán Logic.
Nhóm hàm xử lý chuỗi
Hàm LEFT
Cú pháp
LEFT(chuỗi, n ký tự )
Mô tả
Hàm lấy n ký tự từ bên trái chuỗi
Hàm RIGHT
Cú pháp
RIGHT(chuỗi, n ký tự)
Mô tả
Hàm lấy n ký tự từ bên phải chuỗi
Hàm MID
Cú pháp
MID(chuỗi, vò trí bắt đầu, n ký tự )
Mô tả
Hàm lấy một chuỗi con có chiều dài n ký tự tại vò trí bắt đầu của chuỗi
Hàm TRIM
Cú pháp
TRIM(chuỗi)
Mô tả
Hàm dùng để bỏ những khoảng trắng ở bên trái và bên phải của chuỗi
Hàm RTRIM
Cú pháp
Mô tả
Biểu thức điều kiện: là một biểu thức Logic, trả về giá trò TRUE/ FALSE
Giá trò 1: là giá trò trả về của hàm trong trường hợp biểu thức điều kiện đúng
Giá trò 2: là giá trò trả về của hàm trong trường hợp biểu thức điều kiện sai
Nhóm hàm xử lý thời gian
Hàm DATE
Cú pháp
DATE()
Mô tả
Hàm trả về ngày/ tháng/năm hiện hành
Hàm DAY
Cú pháp
DAY(Biểu thức ngày)
Mô tả
Hàm trả về ngày trong biểu thức
Hàm MONTH
Cú pháp
MONTH(Biểu thức ngày)
Mô tả
Hàm trả về tháng trong biểu thức
Hàm YEAR
Cú pháp
MONTH(Biểu thức ngày)
Mô tả
Hàm trả về năm trong biểu thức
Hàm tìm giá trò lớn nhất của biểu thức.
Biểu thức có thể là một cột hoặc là 1 công thức
Hàm AVG
Cú pháp
AVG (biểu thức)
Mô tả
Hàm tính giá trò trung bình của biểu thức.
Biểu thức có thể là một cột hoặc là 1 công thức
Truy vấn tạo bảng (Make-Table Query)
Thực hiện rút trích dữ liệu của một hoặc nhiều bảng khác nhau, sau đó sao chép kết quả thực hiện
ra 1 bảng khác có cấu trúc và dữ liệu là những field được chỉ đònh trong câu truy vấn.
Cú pháp
lệnh SQL
SELECT [Tính chất] Bt_1, Bt_2, Bt_thống_kê_ 1[ AS tên_ cột1] ,
Bt_thống_kê_2 [AS tên_cột 2] ,
INTO Tên_Table_mới
FROM (Table1 [T1]<PHÉP NỐI> Table2 [T2] ON <ĐIỀU KIỆN NỐI>)
<PHÉP NỐI> Table3 [T3] ON <ĐIỀU KIỆN NỐI>
[WHERE ]
[GROUP BY ]
[HAVING … ]
[ORDER BY ]
Mô tả
INTO Tên_Table_Mới : tạo ra 1 bảng với tên cần sử dụng
Ví dụ 1
Từ bảng SINHVIEN hãy tạo ra bảng “SV co hoc bong” chứa tất cả thông tin của các
sinh có học bổng .
Tên_Bảng : tên của bảng được thêm dữ liệu
giá trò 1, giá trò 2, : các giá trò cần thêm tương ứng với field1, field2 ,… trong
bảng được thêm
Ví dụ
Thêm 1 môn học mới vào bảng MONHOC với các giá trò sau: Mã môn học là 10,
Tên môn học là Cấu trúc dữ liệu
INSERT INTO MONHOC (mamh, tenmh)
VALUES (‘10’, ‘Cấu trúc dữ liệu’);
Ghi chú Trật tự của các giá trò thêm vào bảng phải tương ứng với trình tự của các field được
liệt kê phía sau Tên_Bảng và phải đảm bảo đúng kiểu dữ liệu. Dạng 2: Thêm nhiều dòng, dữ liệu được lấy từ các bảng khác
Cú pháp
lệnh SQL
INSERT INTO Tên_Bảng_Đích ( field1, field2, )
SELECT [Tính chất] Bt_1, Bt_2,…
FROM (Table1 [T1]<PHÉP NỐI> Table2 [T2] ON <ĐIỀU KIỆN NỐI>)
<PHÉP NỐI> Table3 [T3] ON <ĐIỀU KIỆN NỐI>
[WHERE ]
[ORDER BY ]
Mô tả
Tên_Bảng_Đích : là tên bảng được thêm dữ liệu
FROM : gồm các bảng nguồn dùng cho việc lấy dữ liệu
Bt_? : có thể là các giá trò cụ thể, tên field hay được tạo thành từ công
3-12
Ví dụ
Tăng mức học bổng thêm 50000 đối với các sinh viên khoa Anh văn đã được cấp
học bổng.
UPDATE SINHVIEN
SET hocbong=hocbong+ 50000
WHERE makh=’AV’ and not IsNull(hocbong);
Ghi chú Nếu trong quan hệ Một-Nhiều, chúng ta chọn qui tắc ràng buộc tự động cập nhật các cột
quan hệ (Cascade Update Related Fields) thì khi sửa đổi dữ liệu bên nhánh Một, MS Access sẽ sửa
đổi theo giá trò mới bên nhánh Nhiều. Ngược lại chúng ta không thể sửa đổi được dữ liệu bên nhánh
Một nếu trong quan hệ chúng ta không chọn qui tắc ràng buộc tự động cập nhật các cột quan hệ
(Cascade Update Related Fields)
3-13
Tài liệu giảng dạy Microsoft Access 1 Trung Tâm Tin Học-Trường ĐH KHTN TP. HCM
Truy vấn xoá dữ liệu (Delete Query)
Thực hiện việc xoá một hay nhiều dòng trong các bảng thoả điều kiện muốn xoá.
Cú pháp
lệnh SQL
DELETE Tên_Table.*
FROM (Table1 [T1]<PHÉP NỐI> Table2 [T2] ON <ĐIỀU KIỆN NỐI>)
<PHÉP NỐI> Table3 [T3] ON <ĐIỀU KIỆN NỐI>
WHERE Điều kiện xoá
Mô tả
Tên_Table : là tên bảng sẽ bò xoá dữ liệu.
FROM : giống mệnh đề from trong Select query, đưa ra các bảng liên quan
FROM SINHVIEN
WHERE makh=’AV’
GROUP BY makh ;
Q_2
SELECT sv.*
FROM SINHVIEN sv inner join Q_1 on sv.makh=Q_1.makh
and sv.hocbong=Q_1.hbcn_av; 3-14
Tài liệu giảng dạy Microsoft Access 1 Trung Tâm Tin Học-Trường ĐH KHTN TP. HCM
Cách giải quyết khi thực hiện bằng truy vấn con
Q_sub
SELECT sv. *
FROM SINHVIEN sv
WHERE makh=’AV’ and hocbong in ( SELECT max(hocbong)
FROM SINHVIEN
WHERE makh=’AV’ );
Trình tự thực hiện các lệnh trong một truy vấn con
Truy vấn bên trong cặp dấu ngoặc đơn ở cấp thấp nhất sẽ được thực hiện trước tiên. Theo
ví dụ trên, truy vấn tìm ra giá trò học bổng cao nhất của khoa Anh văn sẽ được thực hiện
trước.
Sau đó lấy kết quả của truy vấn con này để thực hiện việc so sánh với truy vấn cha ở bên
ngoài.
Những lưu ý khi viết truy vấn con
Câu Select Query trong biểu thức điều kiện lọc chỉ trả về một cột giá trò, có thể có nhiều
dòng
Biểu thức điều kiện so sánh với tập kết quả trả về từ câu Select bên trong thường là những
thể xem cách trình bày lệnh đó bằng cửa sổ QBE.
Các thành phần trong màn hình QBE
Trong màn hình QBE có các thành phần sau:
Vùng chứa các bảng
Nơi chứa các bảng dữ liệu nguồn cho một truy vấn (tương đương với mệnh đề FROM trong câu lệnh
SQL )
Vùng lưới QBE
Lưới QBE được tổ chức theo dòng và cột. Mội cột dùng để chứa một field hay một biểu thức tính
toán. Mỗi dòng sẽ có những ý nghóa khác nhau tuỳ theo loại query cần tạo.
Chi tiết các dòng trong vùng lưới QBE gồm có:
Dòng Ýnghóa
Field Thể hiện các cột, biểu thức trong truy vấn
Table Tên bảng tương ứng của cột
Sort Cho phép sắp xếp thứ tự cột tăng hay giảm
Show Hiện hoặc ẩn cột
Criteria Chứa giá trò hay biểu thức lọc ứng với cột.
Nếu ghi các điều kiện trong cùng dòng thì các điều kiện sẽ nối với nhau bằng phép
AND, ngược lại nếu ghi điều kiện khác dòng thì phép OR sẽ được sử dụng (giống
như điều kiện lọc dữ liệu trong mệnh đề Where của cú pháp SQL)
3-16
Tài liệu giảng dạy Microsoft Access 1 Trung Tâm Tin Học-Trường ĐH KHTN TP. HCM
Một số thao tác cơ bản để tạo truy vấn bằng QBE
Tạo mới 1 truy vấn chọn lựa
Chọn thực đơn Insert Ỉ Quer Design View, chọn nút OK
Chọn các bảng dữ liệu nguồn của truy vấn: chọn tên bảng và nhấn nút Add trong hộp thoại
Trong hộp thoại Show Table chọn tên bảng muốn đưa vào truy vấn, sau đó nhấn nút Add.
Nhấn nút Close khi muốn đóng hộp thoại này.
Xoá bảng ra khỏi truy vấn:
Chọn bảng muốn xoá trong vùng chứa bảng > nhấn phím Delelte
Tạo các cột tính toán hoặc các biểu thức trong truy vấn
Trong 1 truy vấn ngoài việc thể hiện các cột dữ liệu đã có trên bảng, ta còn có thể tạo các cột tính
toán thông qua các dữ liệu đã có trên bảng.
Có thể sử dụng các toán tử +,-,*, / hoặc các hàm xử lý chuỗi, xử lý thời gian……
Cách đặt tên mới cho 1 cột theo cú pháp :
Tên mới : tên cột hay biểu thức tính
3-17
Tài liệu giảng dạy Microsoft Access 1 Trung Tâm Tin Học-Trường ĐH KHTN TP. HCM
Ví dụ
Đặt tên cho cột khi cột là một biểu thức
Một số thao tác với dòng và cột trong vùng lưới QBE
Ẩn hay hiện dòng Table của lưới QBE
Dòng Table trong lưới QBE chứa tên bảng của field đang chọn trên cùng cột. Ta có thể ẩn dòng
này khi không quan tâm các field thuộc bảng nào
Ta có thể ẩn hoặc hiện dòng này thông qua chức năng View Ỉ Table Names.
Ẩn hay hiện dòng Total
Để thực hiện các thao tác tính toán thống kê trên các cột ta có thể thực hiện thông qua dòng
Total của lưới QBE, mặc đònh dòng này sẽ không có trên lưới.
Dòng Total cung cấp những hàm tính toán thống kê như Max, Min, Sum, Count, đồng thời chỉ
đònh cột nào sẽ được nhóm khi tính toán.
Ta có thể ẩn hoặc hiện dòng này thông qua chức năng View Ỉ Totals, hay có thể click vào biểu
Dòng Crosstab : chứa các giá trò sau
Row Heading: đối với các cột thể hiện dữ liệu theo dòng (ví dụ: Manv)
Column Heading: đối với cột thể hiện dữ liệu theo cột (ví dụ: ThangNam)
Value : đối với cột thể hiện giá trò cần thống kê.
(Not shown): đối với những cột chỉ đóng vai trò làm điều kiện thống kê và không thể hiện
ra ngoài.
Dòng Total: dùng để gom nhóm dữ liệu hoặc thực hiện tính toán thống kê, với các loại sau:
Group by: đối cột đóng vai trò là Column Heading (ví dụ: ThangNam), RowHeading
Các hàm thống kê: đối với cột đóng vai trò là Value, RowHeading
Cách tạo một truy vấn Crosstab
Chọn thực đơn Insert Ỉ Query, chọn Design View
Trên Show Table, chọn các bảng cần làm nguồn dữ liệu để thống kê, nhấn nút Add để thêm
bảng, nhấn Close đóng hộp thoại Show Table.
Chọn thực đơn InsertỈ Crosstab Query
Xác đònh cột thể hiện dữ liệu theo cột. Trong một truy vấn Crosstab, chỉ có duy nhất một cột
thể hiện dữ liệu theo cột (Column Heading)
Xác đònh các cột thể hiện dữ liệu theo dòng. Trong một truy vấn Crosstab, phải có ít nhất
một cột thể hiện dữ liệu theo dòng (Row Heading)
Xác đònh cột thể hiện giá trò cần thống kê. Trong một truy vấn Crosstab, chỉ có duy nhất một
cột thể hiện giá trò cần thống kê (Value)
3-19
Tài liệu giảng dạy Microsoft Access 1 Trung Tâm Tin Học-Trường ĐH KHTN TP. HCM
Ví
dụ
Khai báo và sử dụng tham số bằng công cụ QBE
Việc khai báo và sử dụng tham số trong QBE khá đơn giản, cụ thể là chúng ta sẽ thực hiện như sau:
Chọn thực đơh Query Ỉ Parameters…
Ghi tên tham số, chọn kiểu dữ liệu thích hợp cho tham số. Kiểu dữ liệu này phải bắt buộc
giống với kiểu dữ liệu của cột trong bảng mà ta cần so sánh.
Ví dụ
Trong ví dụ trên, chúng ta sẽ tạo ra một tham số có tên P_MaKhoa có kiểu dữ liệu là
chuỗi dùng để chứa giá trò mã khoa mà người dùng sẽ nhập giá trò vào cho truy vấn.
3-21
Tài liệu giảng dạy Microsoft Access 1 Trung Tâm Tin Học-Trường ĐH KHTN TP. HCM
Tên của tham số này sẽ được ghi vào dòng điều kiện (Criteria) trong màn hình QBE và tại
cột dữ liệu mà chúng ta muốn so sánh và phải nằm trong cặp ngoặc vuông([ ]).Ví dụ Khi cho thực hiện truy vấn, với mỗi tham số sẽ xuất hiện hộp thoại yêu cầu người sử dụng
cung cấp giá trò cho tham số tương ứng.
Ví dụ
Nhập vào giá trò cho tham số là ‘AV’ khi ta muốn truy vấn đưa ra thông tin của tất cả
các sinh viên thuộc khoa Anh văn.
Khai báo và sử dụng tham số bằng lệnh SQL
Việc khai báo và sử dụng tham số bằng cách viết lệnh SQL được thực hiện thông qua cú pháp lệnh,
OLE Object LongBinary
Memo Text
Ví dụ
Với ví dụ đã giới thiệu ban đầu, ta thực hiện như sau :
PARAMETERS P_MaKhoa Text ( 2 ) ;
SELECT SINHVIEN.*, SINHVIEN.MAKH
FROM SINHVIEN
WHERE SINHVIEN.MAKH =[P_MaKhoa] ; 3-23
Tài liệu giảng dạy Microsoft Access 1 Trung Tâm Tin Học-Trường ĐH KHTN TP. HCM
Bài tập
Sử dụng cở sở dữ liệu đã tạo trong bài 2, Quản lý sinh viên, thực hiện các câu truy vấn trong phần
Phục Lục - Bài tập thực hành