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
Trang 1Bài 3
Truy vấn dữ liệu
Nộ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 20
Bài tập 23
Trang 2Giớ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
Thực hành
36 Tiết - Sử dụng ngôn ngữ SQL và công cụ QBE để tạo các truy vấn
Truy vấn chọn dữ liệu
Truy vấn tạo bảng
Truy vấn thêm dữ liệu
Truy vấn xoá dữ liệu
Truy vấn cập nhật dữ liệu
Truy vấn thống kê
Truy vấn con
- Tạo truy vấn Crosstab bằng công cụ QBE
Trang 3Tổng quan về truy vấn dữ liệu
Nội dung
Trình bày các dạng truy vấn
và ý nghĩa của từng dạng Phân loại truy vấn
Các công cụ tạo truy vấn trong Access
Sau khi tạo các bảng và lưu trữ dữ liệu trong bảng, người quản lý dữ liệu cần thực hiện những thao 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ụ
Truy vấn tìm các NV Tổ 1
Trang 4Truy 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 vấn
Ví dụ
Truy vấn thêm dữ liệu (Append Query)
Thêm 1 hay nhiều dòng dữ liệu mới vào cuối một bảng Mỗi câu truy vấn chỉ dùng để thêm dữ liệu vào cho một bảng
Truy vấn cập nhật (Update Query)
Dùng để thực hiện việc sửa đổi giá trị các field của một hay nhiều bảng
Truy vấn xoá (Delete Query)
Thực hiện xoá 1 hay nhiều dòng dữ liệu của một bảng
Truy vấn thống kê dữ liệu (Crosstab Query)
Thực hiện các truy vấn có tính chất thống kê, tính toán và hiển thị dữ liệu theo dạng dòng và cột
Ví dụ Thống kê lương tháng theo tổ
Tạo bảng lương Tháng 7/2000
Trang 5Thực hiện truy vấn bằng ngôn ngữ SQL
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
Đóng hộp thoại Show Table
Chọn thực đơn View Ỉ SQL View hoặc chọn trong biểu tượng đầu tiên trên thanh công cụ
Truy vấn chọn dữ liệu (Select Query)
Thực hiện chọn lựa hoặc rút trích dữ liệu trên một số cột của một hoặc nhiều bảng thoả điều kiện nào đó Có thể tạo ra các cột tính toán từ dữ liệu lưu trong bảng, nhóm dữ liệu trên các bảng có tính chất thống kê tổng hợp (Summary)
Dạng 1: Truy vấn dữ liệu từ 1 bảng
<n>
Biểu_thức : là tên field, hoặc 1 công thức tính toán Tên_cột : tiêu đề của biểu thức khi xem kết quả truy vấn Điều kiện : dùng để lọc dữ liệu, chỉ những mẫu tin nào thoả điều kiện mới được hiển thị trong tập kết quả
Ví dụ 1 Từ bảng SINHVIEN , hãy đưa ra các thông tin sau: mã sinh viên, họ tên, phái, năm
Trang 6sinh, 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 trái
RIGHT 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 trái
ĐIỀU KIỆN NỐI : là điều kiện kết nối giữa các bảng thông qua các field quan hệ T1, T2, T3 : bí danh của bảng trong trường hợp tên bảng quá dài
Ví dụ 1 Tạo truy vấn đưa ra các thông tin của các sinh viên học khoa Anh Văn, thông tin
gồm: mã sinh viên, họ tên, phái (thể hiện Nam, Nữ), tên khoa
SELECT masv, [hosv] & " " & [tensv] AS [Họ tên], IIf(nam=yes,
"Nam", "Nữ") as [Phái],tenkh AS [Tên khoa]
FROM SINHVIEN sv inner join KHOA k ON sv.makh=k.makh WHERE makh=”AV”;
Ví dụ 2 Tạo truy vấn đưa ra kết quả thi của những sinh viên của từng khoa, thông tin gồm:
Tên khoa, mã sinh viên, họ tên, tên môn, điểm Nhưng chỉ đưa ra những sinh viên Đậu (điểm >=5 )
SELECT tenkh as [Tên khoa], sv.masv, [hosv] & " " & [tensv] AS
[Họ tên], tenmh as [Tên môn], diem as Điểm FROM(SINHVIEN sv inner join KHOA k ON sv.makh=k.makh) inner join KETQUA kq ON sv.masv=kq.masv
WHERE diem >=5 ;
Trang 7Dạng 3: Truy vấn thống kê dữ liệu của một bảng
Cú pháp
lệnh SQL
bt_thống_kê_2 [AS tên_cột 2] ,
FROM Tên_Table 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 kê
HAVING : là điều kiện cho các biểu thức thống kê( hoặc các biểu thức khác)
Ví dụ 1 Tạo truy vấn tính tổng số sinh viên theo từng khoa, thông tin gồm : Mã khoa, Tên
khoa, Tổng số SV
SELECT sv.makh as [Mã khoa], tenkh as [Tên khoa], Count(masv) AS [Tổng số SV]
FROM SINHVIEN sv inner join KHOA k ON sv.makh=k.makh GROUP BY sv.makh, tenkh ;
Ví dụ 2 Giống Ví dụ 1, nhưng hãy đưa ra tất cả các khoa kể cả những khoa không có sinh
Trang 8Các toán tử và một số hàm thông dụng
Các toán tử
+,-, *, / : Các phép toán thông thường
\ : chia lấy phần nguyên
Mod : chia lấy phần dư
& : toán tử nối chuỗi
=, >, >=, <, <=, <> : các phép so sánh
Like : so sánh gần đúng (áp dụng cho chuỗi)
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 RTRIM(chuỗi)
Mô tả Hàm dùng để bỏ những khoảng trắng ở bên phải của chuỗi
Hàm LTRIM
Cú pháp LTRIM(chuỗi)
Mô tả Hàm dùng để bỏ những khoảng trắng ở bên trái của chuỗi
Hàm UCASE
Cú pháp UCASE(chuỗi)
Mô tả Hàm chuyển đổi chữ thường thành chữ HOA
Trang 9Hàm LCASE
Cú pháp LCASE(chuỗi)
Mô tả Hàm chuyển đổi chữ HOA thành chữ thường
Hàm điều kiện
Hàm IIF
Cú pháp IIF(Biểu thức điều kiện, Giá trị 1,Giá trị 2)
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
Nhóm hàm tính toán thống kê
Hàm COUNT
Cú pháp COUNT(biểu thức)
Mô tả Hàm thống kê đếm giá trị 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
Trang 10Hàm SUM
Cú pháp SUM (biểu thức)
Mô tả Hàm tính tổng của biểu thức
Biểu thức có thể là một cột hoặc là 1 công thứcHàm MIN
Cú pháp MIN (biểu thức)
Mô tả Hàm tìm giá trị nhỏ 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ứcHàm MAX
Cú pháp MAX (biểu thức)
Mô tả 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ứcHà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
SELECT * INTO [SV CO HOC BONG]
FROM SINHVIEN WHERE ISNULL(hocbong)=False;
Ví dụ 2 Hãy tạo ra bảng “Thong ke ket qua thi“ để thống kê kết quả thi theo môn kể cả
Trang 11những môn không có SV thi, thông tin gồm : Mamon, Tenmh, Số SV đậu, Số SV rớt Biết rằng nếu điểm >= 5 thì Đậu, ngược lại là Rớt
SELECT mh.mamh, tenmh, SUM(IIF(diem>=5,1,0)) as [Số SV đậu],
SUM(IIF(diem<5,1,0)) as [Số SV rớt]
FROM MONHOC mh left join KETQUA kq ON mh.mamh=kq.mamh GROUP BY mh.mamh, tenmh;
Ghi chú Cú pháp của Make-Table Query hoàn toàn tương tự với Select Query, chỉ khác là sau khi
kết thúc mệnh đề SELECT ta có câu lệnh : INTO Tên_Table_mới
Truy vấn thêm dữ liệu (Append Query)
Thực hiện việc thêm dữ liệu vào cuối 1 bảng Dữ liệu thêm vào bảng có thể cung cấp trực tiếp hay lấy từ những bảng khác
Dạng 1: Thêm 1 dòng dữ liệu trực tiếp
Cú pháp
lệnh SQL
INSERT INTO Tên_Bảng( field1, field2,…….) VALUES ( giá trị 1, giá trị 2, )
Mô tả 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
Trang 12thực tính toán giữa những field có trong các bảng dữ liệu nguồn
Ví dụ 1 Thêm vào bảng KETQUA danh sách các sinh viên có mã khoa là AV học môn có
mã số là “09” và điểm ban đầu là 0
INSERT INTO KETQUA (mamh, masv, diem) SELECT “09”, masv, 0
FROM SINHVIEN WHERE makh= ‘AV’ ;
Ghi chú Đối với dạng Thêm nhiều dòng dữ liệu được lấy từ các bảng nguồn, phần phía sau khi kết thúc mệnh đề INSERT INTO là 1 câu lệnh có cấu trúc hoàn toàn tương tự với Select Query và
thông tin chọn lọc ra phải tương ứng với các field cần thêm trong Bảng Đích
Truy vấn cập nhật dữ liệu (Update Query)
Thực hiện việc sửa đổi đồng loạt các giá trị cho các cột trên nhiều dòng khác nhau trong bảng
Cú pháp
lệnh SQL
UPDATE Bảng cập nhật
WHERE Điều kiện cập nhật Mô tả UPDATE: tên bảng cần cập nhật, nếu có nhiều bảng liên quan nhau khi cập nhật thì
mệnh đề này giống như mệnh đề From trong Select Query, đưa ra quan hệ giữa các bảng có liên quan đến việc cập nhật
SET : Cập nhật giá trị mới cho các field trên bảng dữ liệu WHERE : Chỉ cập nhật dòng dữ liệu thoả điều kiện
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)