Trước khi tạo truy vấn cần trả lời các câu hỏi: Dữ liệu cần hiển thị là của: Field nào?. Dữ liệu cần hiển thị có là kết quả của phép tính trên các Field không?. Dữ liệu cần hiển
Trang 1Gv Trần Văn Nghi
Trang 2Cơ sơ dữ liệu mức Logic: Lược đồ CSDL :
HoSoSV (MaSV,HotenSV,MaLop,Nu,NgaySinh,HoKhau) MonHoc (MaMH, TenMh, SoTiet)
Trang 4BT
Trang 5 Cho phép nối kết dữ liệu tại nhiều bảng theo đúng
yêu cầu mà ta quan tâm.
Cho phép lọc ra các dữ liệu thỏa mãn đúng các
điều kiện mà ta cần xem xét.
Tạo được phép tính trên các Field và phép thống
kê trên các Record
Cho phép lọc ra các dữ liệu thật sự có mặt tại thời
điểm đang xét
Cho phép thực hiện tự động cập nhật dữ liệu lên
bảng đúng như yêu cầu.
BT
Trang 71 Truy vấn chọn lựa dữ liệu (Select Query)
Chọn lựa Không điều kiện (chọn lựa cột)
Chọn lựa Có điều kiện (chọn lựa dòng)
2 Truy vấn thống kê dữ liệu (Total Query)
Thống kê dữ liệu toàn phần
Thống kê dữ liệu theo nhóm
theodòng/cột)
4 Truy vấn con (Sub Query)
5 Truy vấn DL đồng thời (Duplicate Query)
6 Truy vấn DL không có liên kết (Unmatch Q.)
7 Truy vấn nối kết bảng (Union Query)
8 Truy vấn hành động (Action Query)
9 Truy vấn có tham số (Parameter Query)
Trang 8 Trước khi tạo truy vấn cần trả lời các câu hỏi:
Dữ liệu cần hiển thị là của: Field nào? Bảng nào?
Để chọn bảng và Add Field khi tạo Query.
Dữ liệu cần hiển thị có là kết quả của phép tính trên
các Field không? Nếu có thì phép tính đó là gì? Sử dụng hàm nào? Để thực hiện thiết kế cột dữ liệu.
Dữ liệu cần hiển thị tại thời điểm đang xét đã có
hay chưa? Nếu chưa có thì phải tạo Query để làm nguồn cung cấp dữ liệu chưa biết này.
Dữ liệu cần hiển thị có là kết quả của phép thống
kê hay không? Nếu có thì phải sử dụng hàm gì để tạo ra dữ liệu thống kê này Có thực hiện nhóm dữ liệu không ? Nếu có thì nhóm ở Field nào?
Trang 9 Trước khi tạo truy vấn cần trả lời các câu hỏi:
Dữ liệu cần hiển thị là của: Field nào? Bảng nào?
Để chọn bảng và Add Field khi tạo Query.
Dữ liệu cần hiển thị có là kết quả của phép tính trên
các Field không? Nếu có thì phép tính đó là gì? Sử dụng hàm nào? Để thực hiện thiết kế cột dữ liệu.
Dữ liệu cần hiển thị tại thời điểm đang xét đã có
hay chưa? Nếu chưa có thì phải tạo Query để làm nguồn cung cấp dữ liệu chưa biết này.
Dữ liệu cần hiển thị có là kết quả của phép thống
kê hay không? Nếu có thì phải sử dụng hàm gì để tạo ra dữ liệu thống kê này Có thực hiện nhóm dữ liệu không ? Nếu có thì nhóm ở Field nào?
Hiển thị các sinh viên có điểm CSDL lớn nhất: QBE
Thông tin cần hiển thị: MaSV, HoTenSV, DienCSDLMax
Hiện tại chưa có điểm lớn nhất của môn CSDL
=>Tìm điểm lớn nhất của môn CSDL : Q1
Q1 Bảng: DiemMH
Field: MaMH , DiemCSDLMax: Diem
Điều kiện: MaMH=CSDL, hàm thống kê = Max
Chỉ định nhóm DL : MaMH = Group By, Diem=Max
Q2 Bảng: HoSoSV, DiemMH, Q1 (liên kết = Diem)
Field: MaSV, HoTenSV, MaMH, DiemCSDLMax
Điều kiện: DiemMH.MaMH=CSDL
Hiển thị các sinh viên có điểm CSDL lớn nhất: SubQuery Thông tin cần hiển thị: MaSV, HoTenSV, DienCSDLMax
Bảng: HoSoSV, DiemMH
Field: MaSV, HoTenSV, DiemCSDLMax: Diem
Điều kiện:
MaMH=CSDL, Diem= (điểm max môn CSDL cho bởi Sub Query)
Trang 10Thao tác tạo nguồn cung cấp dữ liệu cho Query:
1 Create query in design view
= New Design View
2 Xác định dữ liệu cần hiển thị :
Chọn bảng /Query => Add bảng Close
3 Kiểm tra liên kết giữa các bảng:
Nếu thiếu liên kết => thêm bảng
Tạo liên kết bổ sung hoặc chuyển đổi liên kết sang Left Join nếu cần
Ex: Hiển thị danh sách sinh viên của các khoa
Trang 11Ex: Hiển thị danh sách sinh viên của các khoa
Trang 12Ex: Hiển thị danh sách sinh viên của các khoa
Thiếu
Trang 131 Tạo nguồn cung cấp dữ liệu cho Query.
2 Tạo cột dữ liệu có tên trùng với tên Field:
Double Click tên Field trên bảng
3 Tạo tên mới cho cột:
Click Field name Tên mới: tên Field
4 Tạo dữ liệu là kết quả của phép tính Field:
Tên mới: (biểu thức tính trên các Field)
5 Chỉ định không hiển thị dữ liêu trên cột:
Show = (unckeck)
6 Chỉ định xếp thứ tự các Record theo DLcột:
Sort = Ascending / Descending
Ex: Hiển thị danh sách sinh viên của các khoa
Trang 14Ex: Hiển thị danh sách sinh viên của các khoa
Trang 151 Tạo nguồn cung cấp dữ liệu cho Query.
2 Tạo cột hiển thị DL theo yêu cầu của Query.
3 Thiết kế điều kiện đặt tại dòng Criteria hoặc Or của
cột tương ứng.
Các điều kiện đặt cùng dòng cho KQ = AND
Các điều kiện đặt khác dòng cho KQ = OR
Điều kiện = giá trị
= (toán tử + biểu thức)
= (toán tử + hàm chức năng(tên cột))
= (toán tử + Sub Query) Trị chuỗi ký tự trong đk cần đặt trong “…”
Trị ngày trong đk cần đặt trong # / /….#
Ex: Hiển thị điểm CSDL và ACCB của SV tin học
Trang 16Ex: Hiển thị điểm CSDL và ACCB của SV tin học
Trang 17 Các hàm thao tác trên DL kiểu TEXT: s = Field char
Hàm IIF(đk, kq nếu đk đúng, kq nếu đk sai)
LIKE “?x”, LIKE “*x”, LIKE “x*”, LIKE “*x*”
(với SQL chuẩn ký tự đại diện: ? = _ ,* = % , & =|| )
ROUND(n,vị trí làm tròn), MOD(n,số chia), INT(n)
MONTH(d), YEAR(d), DAY(d) , NOW(),
DATEPART(“d”, d), DATEPART(“m”, d), DATEPART(“q”, d) ,
DATEPART(“yyyy”, d) Trị ngày đặt trong #mm/dd/yy# (với SQL chuẩn trị ngày đặt trong {mm/dd/yy} )
Toán tử so sánh số và ngày: <, <=, =, >=, >, <>
BETWEEN min AND max, NOT BETWEEN min AND max
IN (giá trị, …), NOT IN (giá trị, …), IS NULL, IS NOT NULL
Trang 18Hiển thị danh sách
SV khoa Tin Học sinh trong thập
niên 90
Trang 191 Tạo nguồn cung cấp dữ liệu cho Query.
2 Tạo cột hiển thị DL theo yêu cầu của Query.
3 Thiết kế chỉ định thống kê:
4 Thiết kế điều kiện trước thống kê nếu có:
Total = Where
Ex: Hiển thị điểm Max, Min và Avg toàn khóa học Hiển thị số SV có điểm đạt môn ACCB
Trang 20Ex: Hiển thị điểm Max, Min và Avg toàn khóa học Hiển thị số SV có điểm đạt môn ACCB
Trang 211 Tạo nguồn cung cấp dữ liệu cho Query.
2 Tạo cột hiển thị DL theo yêu cầu của Query.
3 Thiết kế chỉ định thống kê:
Thực hiện View Total =
Chỉ định Group By cho cột nhóm dữ liệu
Chỉ định hàm thống kê cho cột tính trị TK
4 Thiết kế biểu thức điều kiện tại cột tương ứng:
Cột chứa biểu thức điều kiện trước thống kê cần chỉ định Total = Where
Cột chứa điều kiện sau thống kê cần chỉ
định Total = hàm thống kê
Ex: Hiển thị điểm Max, điểm Min của các môn học
Hiển thị môn học có trên 20 SV có điểm đạt
Trang 22Ex: Hiển thị điểm Max, điểm Min của các môn học
Hiển thị môn học có trên 20 SV có điểm đạt
Trang 231 Thực hiện tạo Q.Total theo 2 thuộc tính nhóm:
Chỉ định 2 cột nhóm dữ liệu:Total=Group By
Chỉ định cột thống kê: Total = hàm thống kê
2 Thực hiện chỉ định Crosstab:
Chọn: Query Crosstab Query
Chọn Crosstab = Row Heading và Column Heading cho cột có chỉ định Group By
Chọn Crosstab = Value cho cột có chỉ định hàm thốngkê
3 Thiết kế cột chứa điều kiện trước thống kê:
Chọn Total = Where cho cột này
Ex: Hiển thị số SV đạt theo lớp và theo môn học
Hiển thị số SV theo lớp, khoa và theo năm sinh
Trang 24Ex: Hiển thị số SV đạt theo lớp và theo môn học
Hiển thị số SV theo lớp, khoa và theo năm sinh
Trang 25Thường dùng để tạo tập trị cho biểu thức điều kiện:
<biểu thức điều kiện> = <tên cột> <toán tử lấy giá trị> (Select <tên cột > From <tên bảng> Where <điều kiện>) Các toán tử lấy giá trị:
IN (SELECT …) , NOT IN (SELECT …)
> ALL (SELECT …) , < ALL (SELECT …) EXISTS (SELECT …) , NOT EXISTS (SELECT …) UNIQUE (SELECT …)
EXISTS (Q) = True nếu có ít nhất 1 bộ của Q.
NOT EXISTS (Q) = True nếu Q rỗng.
UNIQUE (Q) = True nếu không có bộ trùng lặp trong
Q
Trang 26Hiển thị điểm của SV có hộ khẩu tại
Tp HCM
Trang 27Truy vấn Duplicate:
Dùng để tìm các dòng trên bảng có cùng 1 trị tại cột a nhưng đồng thời có 2 trị khác nhau tại cột
b
(điều kiện cho <bảng 1>.<cột b> ) = m
(điều kiện cho <bảng 2>.<cột b> ) = n
Hiển thị các SV cùng có cả 2 điểm ACCB và CSDL
Trang 28Hiển thị các SV cùng có cả 2 điểm ACCB và CSDL
Trang 29Truy vấn Unmatch:
Dùng để tìm các dòng trên bảng cung cấp quan
hệ nhưng không có dòng nối kết tương ứng
trên bảng nhận quan hệ
Chọn và ADD bảng cung cấp quan hệ
Tạo cột hiển thị dữ liệu
Tạo điều kiện cho cột cung cấp quan hệ:
NOT IN (Select <tên cột nhận quan hệ>
From <tênbảng nhận quan hệ>
Where <điều kiện chon dòng cho BQH)
Hiển thị SV chưa có điểm môn nào cả
Trang 30Hiển thị SV chưa có điểm môn nào cả
Trang 31Truy vấn Action:
Dùng để tạo ra sự thay đổi dữ liệu trên bảng Bao gồm:
nhật dữ liệu trong ô Update To
Cần nhớ lệnh View = xem kết quả, lện Run tạo kết quả
Trang 32Cần nhớ lệnh View = xem kết quả, lện Run tạo kết quả
Trang 33Truy vấn Parameter:
Dùng để tạo truy vấn có điều kiện nhập từ bàn phím khi chạy Query Biểu thức điều kiện được thiết kế như là:
<biểu thức điều kiện> = [ Nhập trị cần kiểm tra: ]
<biểu thức điều kiện> = <toán tử> + [ Nhập trị so sánh: ]
Trang 34[ HAVING <điều kiện sau thống kê>, … ]
[ ORDER BY <tên cột xếp thứ tự> ASC/DESC, …] ;
Có thể chỉ định:
SELECT * …; hiển thị tất cả các cột
SELECT DISTINCT … ; hiển thị các dòng khác nhau SELECT TOP n … ; hiển thị n dòng đầu tiên
Biểu thức = <tên cột> <toán tử> <tên cột>
Biểu thức = <hằng trị> <toán tử> <tên cột> /
Biểu thức = <hàm chức năng>(tên cột)
Trang 35Ex: Hiển thị danh sách sinh viên của các khoa
SQL: hi n th danh sach SV t i các khoa : hi n th danh sach SV t i các khoa ể ể ị ị ạ ạ SELECT MaSV , HoTenSV, TenKhoa
FROM HOSOSV H, DMLOP L, DMKHOA K WHERE H.MaLop = L.MaLop
AND L.MaKhoa= K.MaKhoa
ORDER BY TenKhoa;
Trang 36SQL: hi n th các SV Tin H c sinh trong : hi n th các SV Tin H c sinh trong ể ể ị ị ọ ọ
th p niên 90 t i các Khoa ậ ạ
SELECT MaSV , HoTenSV, TenKhoa
FROM HOSOSV H, DMLOP L, DMKHOA K
WHERE H.MaLop = L.MaLop
AND L.MaKhoa= K.MaKhoa
Trang 37SELECT <hàm thống kê>(tên cột) AS <tên cột>,
<hàm thống kê>(biểu thức) AS <tên cột> … FROM <tên bảng> [<bí danh] , <tên bảng> [BD]
WHERE <điều kiện liên kết bảng>
AND <điều kiện trước thống kê> … ; Điều kiện : <toán tử + Tên cột>
… <toán tử + hàm chức năng(tên cột)>
SQL: hi n th t ng s SV có đi m đ t c a môn : hi n th t ng s SV có đi m đ t c a môn ể ể ị ổ ị ổ ố ố ể ể ạ ạ ủ ủ
ACCB SELECT Count(MaSV) as SoSVDatACCB
SELECT Max(Diem*HeSo) as DiemHSMax
FROM DMMonHoc M, DIEMMH D
WHERE M.MaMH=D.MaMH ;
Trang 38SELECT <tên cột nhóm dữ liệu>, …
<hàm thống kê>(tên cột) AS <tên cột> … FROM <tên bảng> [<bí danh] , <tên bảng> [BD] WHERE <điều kiện liên kết bảng>
AND <điều kiện trước thống kê> … GROUP BY <tên cột không kèm hàm thống kê>, … HAVING <điều kiện sau thống kê> …;
Điều kiện : <toán tử + Tên cột>
… <toán tử + hàm chức năng(tên cột)>
… <toán tử + (Sub Query)>
Trang 39SQL: hi n th s SV có đi m đ t môn CSTH c a m i : hi n th s SV có đi m đ t môn CSTH c a m i ể ể ị ố ị ố ể ể ạ ạ ủ ủ ỗ ỗ
khoa SELECT TenKhoa, Count(MaSV) as SoSVDatCSTH
FROM HoSoSV H, DIEMMH D, DMLOP L, DMKHOA K WHERE H.MaSV=D.MaSV
Trang 40SQL: hi n th các môn h c có s SV có đi m đ t : hi n th các môn h c có s SV có đi m đ t ể ể ị ị ọ ọ ố ố ể ể ạ ạ
t 20 sinh viên tr lên ừ ở
SELECT MaMH, Count(MaSV) as SoSVDat
FROM DIEMMH
WHERE Diem >=5
GROUP BY MaMH
HAVING Count(MaSV)>=20;
Trang 41TRANSFORM <hàm thống kê>(tên cột TK) as X
SELECT <tên cột nhóm theo dòng>,…
FROM <tên bảng> [BD1], <tên bảng> [BD2] WHERE <BD1.Field Join>=<BD2.Field Join> AND <điều kiện trước thống kê>
GROUP BY <tên cột nhóm theo dòng>
PIVOT <tên cột nhóm theo cột> ;
Ex: Hiển thị số SV đạt theo lớp và theo môn học
Hiển thị số SV theo lớp, khoa và theo năm sinh
Trang 42SQL: hi n th s SV đ t theo l p và theo môn h c : hi n th s SV đ t theo l p và theo môn h c ể ể ị ố ị ố ạ ạ ớ ớ ọ ọ TRANSFORM Count(H.MaSV) as X
Trang 43SQL: hi n th s SV theo l p, khoa và theo năm : hi n th s SV theo l p, khoa và theo năm ể ể ị ố ị ố ớ ớ
sinh TRANSFORM Count(H.MaSV)
SELECT L.MaLop, K.TenKhoa
FROM HOSOSV H, DMLOP L, DMKHOA K
WHERE H.MaLop=L.MaLop
AND L.MaKhoa=K.MaKhoa
GROUP BY L.MaLop, L.TenKhoa
PIVOT Year(NgaySinh);
Trang 45NVIEN (CMND,HoTen,NgaySinh, D aChi, Phai, Luong, HoTen,NgaySinh, D aChi, Phai, Luong, ị ị
MaPB)
THANNHAN(CMNDNV, HoTenTN, DiaChiTN)
PBAN(MaPB, TenPB, CMNDTrP, NgayQDTrP)
Hi n th h tên các tr ể ị ọ ưở ng phòng có ít nh t 1 thân nhân ấ
Select HoTen From NVIEN N
Trang 46Truy vấn Duplicate:
Dùng để tìm các dòng trên bảng có cùng 1 trị tại cột a nhưng đồng thời có 2 trị khác nhau tại cột b
SELECT X.<cột a>, X.<cột b> as T1,
Y.<cột b> as T2 FROM <tên bảng> X , <tên bảng> Y WHERE X • <cột a> = Y • <cột a>
AND X.<cột b>=m AND Y.<cột b>=n ;
SQL: hiển thị các SV đều có điểm đạt cả 2 môn
ACCB và CSDL SELECT X.MaSV, X.Diem as DiemACCB,
Y.DIEM as DiemCSDL FROM DIEMMH X, DIEMMH Y WHERE X.MaSV=Y.MaSV
AND X.MaMH="ACCB"
AND Y.MaMH="CSDL"
AND X.Diem>=5 AND Y.Diem>=5;
Trang 47Truy vấn Unmatch:
Dùng để tìm các dòng trên bảng cung cấp quan hệ nhưng không có dòng nối kết tương ứng trên bảng nhận quan hệ
SELECT X.<tên cột CC quan hệ>,<tên cột>, FROM <tên bảng> X , <tên bảng> Y
WHERE X•<Field Join> = Y•<Field Join>
AND X.<điều kiện chọn dòng> AND … AND X.<tên cột CC quan hệ> NOT IN
(Select <cột nhận quan hệ với X>
From <bảng Z>
Where <điều kiện>) ;
Trang 48SQL: hiển thị các SV khoa Quản Trị chưa có
điểm môn ACCB
SELECT H.MaSV, HoTenSV, MaLop
FROM HOSOSV H, DIEMMH D
WHERE H.MaSV=D.MaSV
AND H.MaSV Like “??QT*”
AND H.MaSV NOT IN
(SELECT MaSV FROM DIEMMH WHERE
MaMH=“ACCB”);
Trang 49SQL: hiển thị các SV chưa có điểm môn nào cả
SELECT MaSV, HoTenSV, MaLop
WHERE MaSV NOT IN
(SELECT MaSV FROM DIEMMH);
Trang 50Truy vấn Union:
Dùng để tập họp dữ liệu của 2 bảng không có kết nối cùng hiển thị trên 1 Datasheet nhưng đảm bảo dữ liệu không bị lặp
Trang 51HOSOKH(MaKH, HoTenKH, DiaChi) HOADON(SoHD, NgayHD, SoTienHD, MaKH) PHIEUTHU(SoPT, NgayPT, SoTienPT, MaKH) SQL: hiển thị các hóa đơn và phiểu thu của các
khách hàng SELECT SoHD, “” as SoPT, NgayHD as Ngay, SoTienHD as SoTien, MaKH FROM HOADON UNION
SELECT “” , SoPT, NgayPT,
SoTienPT, MaKH FROM PHIEUTHU;
Trang 52Truy vấn Action:
Dùng để tạo ra sự thay đổi dữ liệu trên bảng Bao gồm:
1. Cập nhật Record : UPDATE <tên bảng>
SET <tên cột 1>=<giá trị 1>, <tên cột 2> = <giá trị 2>, … [WHERE <điều kiện> … ];
Update DIEMMH Set Diem=Diem+1
Where MaMH=“ACCB” And MaSV Like “??TH*”;
2. Xóa Record : DELETE FROM <tên bảng>
[WHERE <điều kiện> … ];
Delete From DIEMMH
Where MaMH=“ACCB” And MaSV Like “??TH*”;
3. Tạo bảng :
CREATE TABLE <tên bảng> (<tên cột>, <tên cột>,…)
AS SELECT … FROM … WHERE… ;
Create Table DIEMACCB MaSV, DiemACCB As
Select MaSV,Diem From DIEMMH Where MaMH=“ACCB”
Trang 534. Thêm dữ liệu vào cuối bảng :
INSER INTO <tên bảng thêm dữ liệu>
( <tên cột 1 thêm vào>, <tên cột 2 thêm vào>, … ) SELECT <tên cột 1 chon dữ liệu>, …
FROM <tên bảng chọn dữ liệu>,….
WHERE <điều kiện chọn dữ liệu> AND … ;
Inser Into SVTPHCM MaSV, HoTenSV, Nu, HoKhau Select MaSV, HoTenSV, Nu, HoKhau
From HoSoSV Where HoKhau Like “*HCM”;