Trong chương này tác giả giới thiệu 2 CSDL mẫu, CSDL qu n lý sinh viên và CSDL quản lý bán hàng, là 2 cơ sở dữ ả liệu mang tính cơ bản nhất, nó tập hợp tất cả các yêu cầu tổng quan để từ
Trang 11
MỤC LỤC
GIỚI TH U CHUNG Ệ 4
CHƯƠNG 1 XÂY DỰNG CƠ SỞ DỮ LIỆU 6
1 CƠ SỞ DỮ LIỆU QUẢN LÝ SINH VIÊN 6
1.1 BÀI TOÁN 6
1.2 CƠ SỞ Ữ LIỆ D U QUAN H Ệ 7
1.3 B NG DẢ Ữ LIỆU CHI TI T Ế 7
2 CƠ SỞ DỮ LIỆU QUẢN LÝ BÁN HÀNG 9
2.1 BÀI TOÁN 9
2.2 CƠ SỞ Ữ LIỆ D U QUAN H Ệ 9
2.3 B NG DẢ Ữ LIỆU CHI TI T Ế 10
CHƯƠNG 2 CÂU LỆNH TRUY VẤN SQL 11
A KIẾN THỨC CẦN NH 11 Ớ 1 Câu l nh truy v n v i cệ ấ ớ ấu trúc đơn giản 11
2 Câu l nh truy v n v i cệ ấ ớ ấu trúc ph c t p 12 ứ ạ 2.1 C u trúc l ng nhau ấ ồ 12
2.2 Cấu trúc lượng từ 13
2.3 C u trúc t p h p ấ ậ ợ 13
3 B sung, cổ ập nh t, xoá d ậ ữ liệu 14
3.1 L nh INSERT ệ 14
3.2 Lệnh UPDATE 15
3.3 L nh DELETE ệ 15
B PHÂN LO I BÀI T P Ạ Ậ 16
DẠNG 1: CÂU L NH TRUY VỆ ẤN CÓ ĐIỀU KIỆN 16
Bài s 1: Câu l nh SQL không k t n i ố ệ ế ố 16
Bài s 2: Câu l nh SQL có k t n i ố ệ ế ố 17
BÀI T P T Ậ Ự GIẢI 18
DẠNG 2: CÂU L NH TRUY V N CÓ PHÂN NHÓM Ệ Ấ 19
Bài s 1: Câu l nh SQL có t ố ệ ừ khoá GROUP BY không điều kiện 19
Bài s 2: Câu l nh SQL có t khoá GROUP BY vố ệ ừ ới điều ki n lệ ọc 20
Bài s 3: Câu l nh SQL có t ố ệ ừ khoá GROUP BY với điều ki n nhóm ệ 21
Trang 22
Bài s 4: Câu l nh SQL có t khoá TOP ố ệ ừ 22
BÀI T P T Ậ Ự GIẢI: 23
DẠNG 3: CÂU L NH TRUY V N VỆ Ấ ỚI CẤU TRÚC LỒNG NHAU 24
Bài s 1: Cố ấu trúc l ng nhau ph ồ ủ định (KHÔNG, CHƯA) 24
Bài s 2: Cố ấu trúc l ng nhau không k t n ồ ế ối 25
BÀI T P T Ậ Ự GIẢI 26
DẠNG 4: CÂU L NH TRUY V N VỆ Ấ ỚI LƯỢNG TỪ ALL, ANY, EXISTS 26
Bài s ố 1: Lượng từ ALL 26
Bài s ố 2: Lượng từ ANY 27
Bài s ố 3: Lượng từ EXISTS 27
DẠNG 5: CÂU L NH TRUY V N VỆ Ấ ỚI CẤU TRÚC TẬP HỢP 28
DẠNG 6: CÂU L NH B SUNG, C P NH T, XOÁ DỆ Ổ Ậ Ậ Ữ DIỆU 28
Bài s 1: Lố ệnh INSERT bổ sung d u ữ liệ 28
Bài s 2: Lố ệnh DELETE xoá d u ữ liệ 29
Bài s 3: Lố ệnh UPDATE cập nh t d u ậ ữ liệ 30
CHƯƠNG 3: LẬP TRÌNH V I SQL Ớ 31
A KIẾN THỨC CẦN NH 31 Ớ 1 Khai báo và sử d ng bi n ụ ế 31
2 M t s cộ ố ấu trúc lệnh cơ bản 32
2.1 Cấu trúc IF… 32
2.2 C u trúc CASE ấ 32
2.3 C u trúc WHILE ấ 33
3 THỦ TỤC (Stored Procedure) 34
4 HÀM (Function) 35
5 CON TR (Cursor) Ỏ 36
6 Một số hàm cơ bản: 38
6.1 Các hàm toán học: 38
6.2 Các hàm x lý chu i ử ỗ 38
6.3 Hàm x lý ngày tháng ử 39
6.4 Hàm chuyển đổi kiểu dữ liệu 39
B PHÂN LO I BÀI T P Ạ Ậ 40
Trang 33
DẠNG 1: HÀM 40
Bài s 1: Vi t hàm x p lo i dố ế ế ạ ựa vào điểm 40
Bài s 2: Vi t hàm tách tên t chu i Hố ế ừ ỗ ọ tên 40
Bài s 3: Viố ết hàm đọc điểm nguyên ra thành ch ữ tương ứng 41
Bài s 4: Viố ết hàm đọc điểm 1 chữ số thập phân ra thành ch ữ tương ứng 43 Bài s 4: Các d ng hàm ố ạ liên quan đến tính toán trong CSDL 43
BÀI T P T Ậ Ự GIẢI: 45
DẠNG 2: THỦTỤ 46 C DẠNG BÀI 1: T o th tuc c p nh t, b sung , xoá d ạ ủ ậ ậ ổ ữ liệu 46
DẠNG BÀI 2: T o th tạ ủ ục hi n th d u vể ị ữ liệ ới các điều ki n ch ệ ỉ định 52
BÀI T P T Ậ Ự GIẢI 59
DẠNG 3: CON TR Ỏ 59
Bài s 1: Tố ạo th tủ ục đánh Số báo danh theo t ng l p ch ừ ớ ỉ định 59
Bài s 2: Tố ạo th tủ ục đánh số báo danh t ự động 60
Bài s 3: Tố ạo th tủ ục cập nh t mã th sinh viên v i công thậ ẻ ớ ức như sau: 61
Bài s 4: Vi t th t c phân l p theo yêu c u khác nhau ố ế ủ ụ ớ ầ 62
CHƯƠNG 4: MỘT SỐ ĐỐI TƯỢNG TIỆN ÍCH KHÁC 65
A KIẾN THỨC CẦN NH 65 Ớ 1 TRANSACTION 65
2 TRIGGER 66
B PHÂN LO I BÀI T P Ạ Ậ 66
DẠNG 1: T o b y l i INSERT ạ ẫ ỗ 66
DẠNG 2: B y l i DELETE ẫ ỗ 68
DẠNG 3: B y l i UPDATE ẫ ỗ 70
BÀI T P T Ậ Ự GIẢI 73
PHẦN ĐỌC THÊM 74
ỨNG DỤNG SQL TRONG LẬP TRÌNH C# CƠ BẢN 74
Bài s 1 Tố ạo Form k t n i ế ố 74
Bài s 2: Tố ạo Form hi n th danh sách sinh viên ể ị 76
Bài s 3: Tố ạo Form L c danh sách sinh viên theo l p ọ ớ 78
Bài s 4: Tố ạo Form nh p d u cho b ng SINHVIEN ậ ữ liệ ả 80
Tài li u tham kh o ệ ả 83
Trang 44
SQL, viết tắt của Structure Query Language là một công cụ quản lý dữ ,
liệu, đơn giản nhưng rất hiệu quả, được sử dụng phổ biến ở nhiều lĩnh vực Mặc khác, hầu hết tất cả các ngôn ngữ lập trình bậc cao đều có hỗ trợ SQL Các công cụ lập trình đều cho phép người sử dụng kết nối và truy cập tới CSDLbằng cách nhúng các câu l nh SQL vào trong các ngôn ng l p trình ệ ữ ậ hoặc viết lời gọi đến các chương trình con trên hệ quản trị CSDL
SQL ngày càng đóng vai trò quan trọng khi mà hiện nay Internet ngày
càng phát triển SQL được sử dụng như là công cụ để giao tiếp giữa các trình
ứng d ng phía máy khách v i máy chụ ớ ủ cơ sở ữ liệu d , SQL sẽ thực hiện việc
truy cập thông tin và kết quả hiển thị trên ứng dụng khi người dùng yêu cầu Trong các hệ quản trị cơ sở ữ liệ d u, SQL xuất hi n v i vai trò ngôn ng , ệ ớ ữ
là công c giao ti p giụ ế ữa ngườ ử ụi s d ng và hệ quản trị cơ sở ữ liệ d u với nhiều vai trò khác nhau như: truy vấn dữ liệu, lập trình cơ sở dữ liệu, qu n trị ả cơ sở dữ liệu, truy c p d u trên Internậ ữ liệ et, …
Để phục vụ nhu cầu học tập và nghiên c u của sinh viên nói chung và ứsinh viên ngành Cao đẳng Bình Định nói riêng, một tài liệu tham khảo mang tính th c hành là c n thi t Phân lo i và gi i chi ti t các d ng bài t p SQL s ự ầ ế ạ ả ế ạ ậ ẽgiúp cho sinh viên nhận biết chính xác các d ng câu h i, s d ng câu l nh SQL ạ ỏ ử ụ ệ
hiệu quả nhất Trong l p trình, tác giậ ả sử ụng các thuật toán đơn giản, dễ ểu d hi
để ả gi i quyết các bài toán qu n lý, ả đó là mục tiêu trong tài li u này ệ
Trong tài li u này, tác gi s d ng CSDL Qu n lý sinh viên làm bài mệ ả ử ụ ả ẫu
từ đó sinh viên tự làm các bài t p trên CSDL bán hàng và các CSDL khác Tài ậliệu cung c p nh ng kiến thấ ữ ức căn bản nhất v 2 nội dung chính là ngôn ng ề ữthao tác dữ liệu và l p trình vậ ới cơ sở ữ liệ d u, từ đó sinh viên có thể xây d ng ựmột ứng dụng qu n lý trên windows t ả ừ đơn giản đến phức tạp
Trong mỗi chương tài liệu chia làm 2 ph n chính là: tóm t t lý thuy t và ầ ắ ếphân lo i bài t p C ạ ậ ụ thể chia thành 4 chương như sau:
Chương 1: Xây dựng Cơ sở ữ liệ d u Trong chương này tác giả giới thiệu
2 CSDL mẫu, CSDL qu n lý sinh viên và CSDL quản lý bán hàng, là 2 cơ sở dữ ảliệu mang tính cơ bản nhất, nó tập hợp tất cả các yêu cầu tổng quan để từ đó
Trang 55
sinh viên có th làm mể ột cách tương tự đối với các CSDL khác
Chương 2: Câu l nh truy v n SQL Tệ ấ rong chương này tác giả chia câu lệnh thao tác dữ liệu thành 6 dạng cơ bản, m i d ng có t 3-4 bài t p minh hoỗ ạ ừ ậ ạ, giúp sinh viên nhanh chóng nh n dậ ạng đúng các yêu cầu của mỗi câu lệnh SQL
Chương 3: L p trình v i SQL Tậ ớ rong chương này tác giả chia cấu trúc lập trình thành 3 d ng: Hàm, Th t c và Con tr M i d ng bao g m nhi u d ng ạ ủ ụ ỏ ỗ ạ ồ ề ạbài khác nhau, m i dỗ ạng bài là cơ bản được tác giả chọn l c và r t c n thiọ ấ ầ ết trong l p trình ậ ứng d ng sau này ụ
Chương 4: M t sộ ố đối tượng ti n ích khác, nh m nâng cao kệ ằ ỹ năng lập trình, người lập trình phải hạn chế tối đa nhất các lỗi thường xẩy ra, lường trước lỗi và b y lẫ ỗi là k ỹ năng cần thi t cế ủa người lập trình chuyên nghiệp
Phần đọc thêm: Ứng d ng SQL trong l p trìnụ ậ h C# căn bản Trong chương này tác giả minh hoạ một số ứng dụng cơ bản, trong đó thể hiện một kết nối từ ứng dụng t i thớ ủ t c trong h ụ ệ quản tr CSDL SQL Server Giúp sinh viên ịthấy được mối liên hệ giữa lập trình CSDL với lập trình trên công cụ C#, được xem là kỹ thuật mang tính b o m t cao ả ậ
Tài li u tham khệ ảo “Phân loại và gi i chi ti t các d ng bài tả ế ạ ập SQL” mang tính thực hành cao, là tài li u gệ ối đầu cho t t cấ ả sinh viên đang ngồi gh nhà ếtrường, tài liệu giúp sinh viên học tốt các học phần liên quan như: Hệ qu n tr ả ịCSDL Access, Hệ quản tr CSDL SQL, L p trình Windows, L p trình Website, ị ậ ậ
…Tài liệu sẽ hoàn thiện hơn khi nhận nhiều ý kiến đóng góp quý báu của các bạn đọc Tác gi r t mong nh n nhiả ấ ậ ều góp ý để tài liệu h u ích ữ hơn
Trang 66
CHƯƠNG 1 XÂY DỰNG CƠ SỞ DỮ LIỆU
1 CƠ SỞ DỮ LI U QU N LÝ SINH VIÊN Ệ Ả
1.1 BÀI TOÁN
Dữ u vào: liệ
- Danh m c các Ngành h c c a mụ ọ ủ ỗi Khoa
- Danh sách hồ sơ sinh viên g m nhồ ững thông tin đầu vào như Mã sinh viên, H tên, Gi i tính, Ngày sinh, ọ ớ Địa ch Khoá h c, Hỉ, ọ ệ đào tạo, Khoa, Ngành h c, Lọ ớp học,
- Theo dõi chương trình giảng dạy các học ph n theo t ng ngành ầ ừ
- Theo dõi điểm học phần của mỗi sinh viên của từng h c k , cọ ỳ ả năm và
cả khoá Đưa ra danh sách sinh viên tích luỹ, ngừng tiến độ học t p ậ
- Đưa ra bảng điểm tổng hợp có xếp loại học tập theo từng lớp ở mỗi học kỳ, cả năm và cả khoá học
- Xử lý dữ liệu: t o các th tạ ủ ục (Procedure) hiển th dị ữ liệu, tính toán,
bổ sung, c p nhậ ật, xoá, …
Trang 88
Bảng DMHOCPHAN
Bảng DIEMHP
Trang 9- Tổng h p doanh thu c a t ng mợ ủ ừ ặt hàng theo từng tháng, quý và năm
- Tổng hợp tiền mua c a tủ ừng khách hàng trong mỗi năm, tích điểm và
in chi t khế ấu
2.2 CƠ SỞ DỮ LIỆU QUAN HỆ
Trang 52Lời gi i ả
CREATE PROCEDURE HIENTHI_Diem
@DiemHP varchar(5)
AS
IF NOT EXISTS (SELECT * FROM DIEMHP
WHERE DiemHP < @DiemHP)
PRINT N'không có sinh viên nào'
Trang 5353
ELSE
SELECT SINHVIEN.MaSV, HoTen, MaLop, MaHP, DiemHP
FROM DIEMHP
INNER JOIN INHVIEN ON DIEMHP.MaSV = SINHVIEN.MaSV S
WHERE DIEMHP.DiemHP < @DiemHP
GO
• Thực hi n g i th t c ệ ọ ử ụ
EXCE HIENTHI_Diem 5
Bài toán 2:
Tạo th t c: Hiủ ụ ển thị Hoten sinh viên CHƯA học học ph n có mã ch ầ ỉ
định, Kiểm tra Mã học ph n chỉ nh có trong danh mục không, Nếu không có ầ địthì hi n th thông báo không có h c ph n này ể ị ọ ầ
SELECT Ho en FROM T SINHVIEN
WHERE MaHp=@MaHP)
GO
Thực hiện thủ tục
EXCE HIENTHI_MaHP '001'
Trang 5454
Bài toán 3:
Tạo th t c: Hiủ ụ ển thị danh sách g m: ồ MaSV, HoTen, MaLop NgaySinh , (dd/mm/yyyy), GioiTinh (Nam, Nữ),Tuổi c a nh ng sinh viên có tu i trong ủ ữ ổkhoảng ch ỉđịnh N u không có thì hi n th thông báo không có sinh viên nào ế ể ịLời gi ải:
CREATE PROCEDURE HIENTHI_Tuoi
@tuoi1 tinyint, @tuoi2 tinyint
AS
IF NOT EXISTS (SELECT * FROM SINHVIEN WHERE
YEAR(GETDATE())-YEAR(Ngaysinh) BETWEEN @tuoi1 AND
Trang 55INNER JOIN DMLOP ON DMLOP.MaLop=SINHVIEN.MaLop
INNER JOIN DMNGANH ON DMNGANH.MaNganh=DMLOP.MaNganh INNER JOIN DMKHOA ON DMKHOA.MaKhoa=DMNGANH.MaKhoa WHERE DMKHOA.MaKhoa=@MaKhoa
GROUP BY DMKHOA.MaKhoa,TenKhoa
GO
Bài toán 5:
Tạo th tủ ục: Hi n thể ị MaLop,TenLop, Tổng s SV m i lố ỗ ớp của khoa có
mã chỉ định, Kiểm tra điều ki n MaKhoa có trong b ng Danh mệ ả ục không, Nếu không có thì hi n th thông báo Không có l p này ể ị ớ
Trang 5656
END
SELECT DMLOP.MaLop,TenLop, COUNT(MaSV) AS SoLuong
FROM SINHVIEN
INNER JOIN DMLOP ON SINHVIEN.MaLop=DMLOP.MaLop
INNER JOIN DMNGANH ON DMNGANH.MaNganh=DMLOP.MaNganh WHERE MaKhoa=@MaKhoa
Trang 57SELECT MaSV, HoTen, DMLOP.MaLop,
CASE ioiTinh WHEN 1 THEN N'Nam' ELSE N'N ' END G ữ AS
GioiTinh,
CONVERT (char(10),ngaysinh,103) AS NgaySinh
FROM SINHVIEN
INNER JOIN DMLOP ON SINHVIEN.MaLop=DMLOP.MaLop
INNER JOIN DMNGANH ON DMNGANH.MaNganh=DMLOP.MaNganh WHERE MaKhoa=@MaKhoa
GO
• Thực hiện g i thủ tục ọ
EXECUTE HIENTHI_KHOA3 'CNTT'
Bài toán 8:
Tạo th tủ ục: Cho bi t Hoten sinh viên KHÔNG ế có điểm HP <5 l p có ở ớ
mã chỉ định, Ki m tra Mã l p chể ớ ỉ định có trong danh m c không, N u không thì ụ ếhiển thị thông báo
Lời gi i ả
CREATE PROCEDURE KIEMTRA_LOP
Trang 58IF NOT EXISTS (SELECT * FROM SINHVIEN
WHERE MaLop=@ MaLop)
PRINT N'Lớp đó không có trong danh mụ c'
ELSE
SELECT MaSV, HoTen, MaLop,
CASE ioiTinh WHEN 1 THEN N'Nam' ELSE N'N END G ữ' ,
CONVERT(char(10), NgaySinh,103)
FROM SINHVIEN
Trang 592 Hiển th danh sách 5 khách hàng có t ng tr ị ổ ị giá các đơn hàng lớn nhất
3 Hiển th danh sách 10 m t hàng có s ị ặ ố lượng bán l n nh ớ ất
4 Cập nh t c t Khuyậ ộ ến mãi như sau: Khuyến mãi 5% thành tiền ếu nSoLuong >100, 10% thành ti n n u SoLuongL >500 ề ế
5 Tính tr giá cho mị ỗi hoá đơn
6 Cập nhật cho cột Lo i khách hàng: là VIP nạ ếu t ng thành tiổ ền trong năm lớn hơn hoặc bằng 20 triệu
DẠNG 3: CON TR Ỏ
Bài s 1: T o th tố ạ ủ ục đánh Số báo danh theo từng lớp chỉ định.
Trước hết thêm c t SBD vào b ng SINHVIEN ộ ả
ALTER TABLE SINHVIEN
DECLARE cur_SBD CURSOR
FOR SELECT MaSV
Trang 6060
FROM SINHVIEN WHERE MaLop=@MaLop
ORDER BY MaLop, dbo.TACHTEN(HoTen)
OPEN cur_SBD
DECLARE @MaSV varchar(5),@i int
FETCH NEXT FROM cur_SBD INTO @MaSV
Bài s 2: T o th tố ạ ủ ục đánh số báo danh t ự động
khi sang l p mớ ới thì SBD đánh lại t ừ đầu
Chú ý: L p g m nh ng sinh viên cùng ngành h c và khoá h c (khác v i cớ ồ ữ ọ ọ ớ ột PhanLop)
Lời gi i ả
CREATE PROCEDURE DanhSBD_Lop
AS
DECLARE cur_SBD CURSOR
FOR SELECT MaSV, MaLop
FROM SINHVIEN ORDER BY MaLop,dbo.TACHTEN(HoTen)
OPEN cur_SBD
DECLARE @MaSV varchar(5),@MaLop varchar(5),@i int
Trang 6161
DECLARE @Lop varchar(5)
FETCH NEXT FROM cur_SBD INTO @MaSV,@MaLop
CREATE PROCEDURE DanhTheSV
@MaNganh varchar(10), @NamNhapHoc char(4)
AS
DECLARE cur_MaSV CURSOR
FOR SELECT MaSV, MaNganh, NamNhaphoc
FROM SINHVIEN
INNER JOIN DMLOP ON SINHVIEN.MaLop=DMLOP.MaLop
Trang 6262
WHERE MaNganh=@MaNganh AND NamNhapHoc=@NamNhapHoc
DECLARE @MaSV varchar(5), nt
FETCH NEXT FROM cur_MaSV INTO
WHERE MaSV=@MaSV
FETCH NEXT FROM cur_MaSV
INTO @MaSV, @MaNganh, @NamNhapHoc
Bài s 4: ố Viế t th t ủ ục phân l ớp theo yêu c u khác nhau ầ
1 Phân thành 2 l p A,B v i t l nam, nớ ớ ỉ ệ ữ như nhau, Mã lớp là tham s ốtruyền vào ch ỉđịnh
2 Phân l p v i sớ ớ ố lượng l p chớ ỉ định và t l nam, nỉ ệ ữ như nhau Mã l p và ớ
số lượng là 2 tham s truy n vào ch nh ố ề ỉ đị
Ghi chú: t o thêm c t PhanLop varchar(5) ạ ộ
ALTER TABLE SINHVIEN
ADD PhanLop varchar(5)
ORDER BY dbo.TACHTEN(HoTen)
65
Trang 63DECLARE cur_phanlop CURSOR
FOR SELECT MaSV FROM SINHVIEN WHERE MaLop=@MaLop ORDER BY MaLop,GioiTinh, dbo.TACHTEN(HoTen)
UPDATE SINHVIEN SET
PhanLop=LTRIM(@MaLop)+'A' WHERE CURRENT OFcur_phanlop
ELSE
UPDATE SINHVIEN SET
PhanLop=LTRIM(@MaLop)+'B' WHERE CURRENT OFcur_phanlop
CREATE PROCEDURE PhanLop3
@MaLop varchar(6),@SoLop int
AS
Trang 6464
DECLARE cur_phanlop CURSOR FOR
SELECT MaSV FROM SINHVIEN WHERE MaLop=@MaLop ORDER BY MaLop, GioiTinh, dbo.TACHTEN(HoTen)
Trang 6565
CHƯƠNG 4: MỘ T SỐ ĐỐI TƯỢ NG TIỆN ÍCH KHÁC
A KIẾ N TH C C N NH Ứ Ầ Ớ
1 TRANSACTION
Transaction (Giao tác) là m t t p h p có th t các thao tác và chúng ch ộ ậ ợ ứ ự ỉ
có th cùng nhau thành công ho c cùng nhau th t b i ể ặ ấ ạ
Trang 6666
2 TRIGGER
Trigger là một lo i stored Procạ edure đặc biệt có đặc điểm sau:
- Tự động thực hiện khi có lệnh INSERT , DELETE hoặc UPDATE
Xoá TRIGGER DROP TRIGGER <Tên TRIGGER> :
B PHÂN LOẠI BÀI T P Ậ
DẠNG 1: T o bạ ẫy lỗi INSERT
Bài s 1ố : T o m Trigger ạ ột để kiểm tra tính h p l c a dợ ệ ủ ữ liệu được nh p vào ậmột bảng SINHVIEN là d ữ liệu MaSV là không r ng ỗ