TRƯỜNG ĐẠI HỌC ĐIỆN LỰC
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Tên nhóm: Nhóm 8
Tên hệ thống “Quản lý thư viện’’
Thành viên nhóm
STT
Họ và Tên
Nhiệm vụ
Tạo database và tạo table
1
Nguyễn Quốc Tuấn
2
Nguyễn Thị Thu
Nhập dữ liệu vào bảng sach
3
Nguyễn Trí Tuệ
Nhập dữ liệu vào bảng lop
4
Lê Thanh Tùng
Nhập dữ liệu vào bảng sinhvien
5
Đinh Doãn Việt
Nhập dữ liệu vào bảng sophieu, làm báo cáo
6
Nguyễn Quang Vinh
In báo cáo
7
Phạm Xuân Tùng
Chỉnh sửa báo cáo
8
Đặng Ngọc Tú
Kiểm tra và chỉnh sửa dữ liệu bảng sach , lop
9
Nguyễn Văn Thùy
Tạo kết nối diagram
10
Phùng Quốc Vương
Chuẩn hóa database
11
Nguyễn Xuân Tuấn
Kiểm tra chỉnh sửa dữ liệu bảng sinhvien,sophieu
Hà Nội, tháng 03 năm 2019
STT
Họ và Tên
1
Nguyễn Quốc Tuấn
2
Nguyễn Thị Thu
3
Nguyễn Trí Tuệ
4
Lê Thanh Tùng
5
Đinh Doãn Việt
6
Nguyễn Quang Vinh
7
Phạm Xuân Tùng
8
Đặng Ngọc Tú
9
Nguyễn Văn Thùy
10
Phùng Quốc Vương
11
Nguyễn Xuân Tuấn
Chữ ký
Nhận xét
Điểm số
-------------------------------Phần 1------------------------------I. Mô tả bài toán
1. Sự cần thiết của bài toán
a. Sự cần thiết của bài toán
Đối với thư viện , CSDL cho phép ta kiểm soát lượng dữ liệu sách, người đọc theo thời gian
mà không bị nguy cơ mất mát dữ liệu. Trong thư viện, có rất nhiều loại sách với nhiều thể loại
khác nhau, nhiều tác giả và có số lượng còn lại trong kho khác nhau. Lượng sinh viên cũng vậy,
có nhiều sinh viên với nhiều mã sinh viên khác nhau, lớp và các ngành học khác nhau. Cho nên
chương trình này cho phép kiểm soát thông tin của thư viện để quản lý và phục vụ cho nhu cầu
đọc mượn của người đọc.
b. Yêu cầu về CSDL
YC01 - Cho phép lưu , cập nhật thông tin sinhvien với các thông tin chi tiết .
YC02 - Cho phép lưu và xuất thông tin về các loại sách trong thư viện .
YC03 - Cho phép tính tổng số lượng sách mượn nhiều nhất theo lớp .
YC04 - Cho phép hiển thị sinh viên có lượng sách mượn nhiều nhất.
YC05 - Cho phép hiển thị ra sinh viên có số tuổi lớn (nhỏ) hơn .
YC06 – Cho phép cập nhật số lượng sách khi có update, delete, insert.
YC07 - Cho hiển thị ra lớp có sinh viên mượn nhiều (ít) sách nhất .
YC08 - Cho xuất ra thông tin chi tiết của phiếu mượn .
YC09 - Hiển thị ra sinh viên mượn nhiều (ít) sách nhất .
YC10 - Hiển thị ra lượng sách đã mượn theo tên sinh viên , thời gian …
YC11 - Hiển thị tác giả có lượng sách được mượn nhiều (ít) nhất
YC12 - Tạo quyền hạn mượn cho sinh viên
YC13 - kiểm tra số lượng sách mượn trên bảng sophieu có vượt quá giới hạn mỗi khi update dữ
liệu
YC14 - Cho phép hiển thị những phiếu mượn có thời gian nhiều hơn N ngày
YC15 - Cập nhật thêm sinh viên , nếu có sinh viên mới vào lớp
-------------------------------Phần 2------------------------------II. Xây dựng dữ liệu
1. Sơ Đồ CSDL
Tên CSDL là : thuvien
Gồm các bảng sau :
- Bảng sach (masach, tensach, tacgia, namxb, nhaxb, theloai, soluong)
- Bảng lop (malop, makhoa, tenlop)
- Bảng sinhvien (masv, tensv, namsinh, sdt, malop, tuoi)
- Bảng sophieu (maphieu, masv, masach, soluong, ngaym, ngayt)
o Bảng sach (masach, tensach, tacgia, namxb, nhaxb, theloai, soluong) là bảng lưu thông
tin của các loại sách có trong thư viện. Bảng có các thuộc tinh sau :
masach là mã nhận diện của từng sách
tensach là tên của từng quyển sách
tacgia là tác giả của quyển sách
namxb là năm xuất bản của sách
nhaxb là nhà xuất bản của sách
theloai là thể loại của sách
soluong là số lượng sách có trong thư viện
Khóa chinh – Primary Key là masach
Ứng với YC02
o Bảng lop (malop, makhoa, tenlop) là bảng lưu thông tin các lớp, khoa. Bảng có các thuộc
tinh sau:
malop là mã nhận diện của từng lớp
makhoa là mã nhận diện của từng khoa
tenlop là tên của từng lớp
Khóa chinh – Primary Key là malop
o Bảng sinhvien (masv, tensv, namsinh, sdt, malop) là bảng lưu thông tin sinh viên của
toàn trường.
Bảng có các thuộc tinh sau :
masv là mã nhận diện của từng sinh viên
tensv là họ và tên của từng sinh viên
namsinh là ngày tháng năm sinh của từng sinh viên
sdt là số điện thoại liên lạc của từng sinh viên
malop là mã nhận diện lớp của sinh viên đó
Khóa chinh – Primary Key là masv
Khóa ngoại – Foreign key là malop
Ứng với YC01, YC05
o Bảng sophieu (maphieu, masv, masach, soluongmuon, ngaym, ngayt) là bảng lưu thông
tin về việc mượn sách của các sinh viên trong trường và thông tin về thời hạn mượn.
Bảng có các thuộc tinh sau :
maphieu là mã nhận diện của từng phiều đối với mỗi lần mượn
masv là mã nhận diện của sinh viên mượn sách
masach là mã nhận diện của sách được mượn
soluongmuon là số lượng sách được sinh viên mượn
ngaym là ngày tháng năm sách được sinh viên mượn
ngayt là thời hạn sinh viên phải trả sách.
Khóa chinh – Primary key là masv, masach
Khóa ngoại – Foreign Key là masv, masach
Ứng với YC03, YC04,YC06,YC07,YC08,YC09,YC10
Sơ đồ Diagram :
2. Code T-SQL
CREATE DATABASE thuvien
GO
USE thuvien
GO
-- DROP DATABASE thuvien
CREATE TABLE sach
(
masach NVARCHAR(50) NOT NULL,
tensach NVARCHAR(50) NOT NULL,
tacgia NVARCHAR(50) NOT NULL,
namxb DATE ,
nhaxb NVARCHAR (50) ,
theloai NVARCHAR (50),
soluong INT ,
CONSTRAINT pk_masach PRIMARY KEY (masach)
);
--DROP TABLE sach
CREATE TABLE lop
(
malop NVARCHAR(50),
tenkhoa NVARCHAR(50),
tenlop NVARCHAR(50),
CONSTRAINT pk_malop PRIMARY KEY (malop),
);
--DROP TABLE lop
CREATE TABLE sinhvien
(
masv NVARCHAR(50),
tensv NVARCHAR(50),
namsinh DATE ,
sdt NVARCHAR(50),
malop NVARCHAR(50),
CONSTRAINT pk_masv PRIMARY KEY (masv),
CONSTRAINT fk_sinhvien_malop FOREIGN KEY (malop) REFERENCES lop(malop) ON DELETE CASCADE ON UPDATE
CASCADE
);
--DROP TABLE sinhvien
CREATE TABLE sophieu
(
maphieu NVARCHAR(50),
masv NVARCHAR (50),
masach NVARCHAR(50),
soluongmuon INT ,
ngaym DATE ,
ngayt DATE,
CONSTRAINT pk_maphieu PRIMARY KEY (masv,masach,maphieu),
CONSTRAINT fk_sophieu_masv FOREIGN KEY (masv) REFERENCES sinhvien(masv) ON DELETE CASCADE ON UPDATE
CASCADE ,
CONSTRAINT fk_sophieu_masach FOREIGN KEY (masach) REFERENCES sach(masach) ON DELETE CASCADE ON
UPDATE CASCADE
);
--DROP TABLE sophieu
------SACH----INSERT INTO sach(masach, tensach, tacgia, namxb, nhaxb, theloai, soluong)
VALUES ('ta1','tieng anh 1','dh su pham','2016','kim dong','giao trinh','10')
INSERT INTO sach(masach, tensach, tacgia, namxb, nhaxb, theloai, soluong)
VALUES ('ta2','tieng anh 2','dh su pham','2016','quoc gia','giao trinh','9')
INSERT INTO sach(masach, tensach, tacgia, namxb, nhaxb, theloai, soluong)
VALUES ('ta3','tieng anh 3','dh bach khoa','2017','dh su pham','giao trinh','11')
INSERT INTO sach(masach, tensach, tacgia, namxb, nhaxb, theloai, soluong)
VALUES ('c++','ngon ngu lap trinh c','dh su pham','2017','phuong nam','giao trinh','12')
INSERT INTO sach(masach, tensach, tacgia, namxb, nhaxb, theloai, soluong)
VALUES ('vatly','vat ly dai cuong','dh quoc gia','2018','dh su pham','giao trinh','11')
INSERT INTO sach(masach, tensach, tacgia, namxb, nhaxb, theloai, soluong)
VALUES ('pldc','phap lat dai cuong','dh luat ha noi','2014','dh su pham','giao trinh','10')
INSERT INTO sach(masach, tensach, tacgia, namxb, nhaxb, theloai, soluong)
VALUES ('tcc1','toan cao cap 1','nxb thanh nien','1999','dh su pham','giao trinh','5')
INSERT INTO sach(masach, tensach, tacgia, namxb, nhaxb, theloai, soluong)
VALUES ('dhmt','do hoa may tinh','dh dien luc','2009','dh dien luc','giao trinh','6')
INSERT INTO sach(masach, tensach, tacgia, namxb, nhaxb, theloai, soluong)
VALUES ('mmt','mang may tinh','thanh nien','2007','thanh nien','giao trinh','7')
INSERT INTO sach(masach, tensach, tacgia, namxb, nhaxb, theloai, soluong)
VALUES ('KTMT','KIEN TRUC MAY TINH','DH BACH KHOA','2016','PHUONG NAM','GIAO TRINH','8')
------LOP----INSERT INTO lop(malop, tenkhoa, tenlop) VALUES ('tc-01','1782','the chat')
INSERT INTO lop(malop, tenkhoa, tenlop) VALUES ('ta-02','ms13','tieng anh')
INSERT INTO lop(malop, tenkhoa, tenlop) VALUES ('cntt','ac14','cong nghe thong tin')
INSERT INTO lop(malop, tenkhoa, tenlop) VALUES ('cnpm','df15','cong nghe phan mem')
INSERT INTO lop(malop, tenkhoa, tenlop) VALUES ('cot','af72','co dien tu')
INSERT INTO lop(malop, tenkhoa, tenlop) VALUES ('h2','ck13','dien')
INSERT INTO lop(malop, tenkhoa, tenlop) VALUES ('qtdn','qt3','kinh te')
INSERT INTO lop(malop, tenkhoa, tenlop) VALUES ('cota','ck14t','co ban')
------SINHVIEN----INSERT INTO sinhvien(masv,tensv,namsinh,sdt,malop)
VALUES ('1781310183','dinh doan viet','1998/01/02','0965062715','tc-01')
INSERT INTO sinhvien(masv,tensv,namsinh,sdt,malop)
VALUES ('1781310184','nguyen thi thu','1997/01/03','0965062716','ta-02')
INSERT INTO sinhvien(masv,tensv,namsinh,sdt,malop)
VALUES ('1781310185','nguyen quang vinh','1996/01/04','0965062717','cntt')
INSERT INTO sinhvien(masv,tensv,namsinh,sdt,malop)
VALUES ('1781310186','nguyen quoc tuan','1999/01/05','0965062718','cnpm')
INSERT INTO sinhvien(masv,tensv,namsinh,sdt,malop)
VALUES ('1781310187','nguyen tri tue','2000/01/06','0965062719','cot')
INSERT INTO sinhvien(masv,tensv,namsinh,sdt,malop)
VALUES ('1781310188','nguyen xuan tuan','2000/01/07','0965062710','h2')
INSERT INTO sinhvien(masv,tensv,namsinh,sdt,malop)
VALUES ('1781310189','pham xuan tung','1999/01/09','0965062711','qtdn')
INSERT INTO sinhvien(masv,tensv,namsinh,sdt,malop)
VALUES ('1781310190','le thanh tung','1999/01/08','0965062712','cota')
INSERT INTO sinhvien(masv,tensv,namsinh,sdt,malop)
VALUES ('1781310191','nguyen quoc ha','1998/01/10','0965062713','cnpm')
INSERT INTO sinhvien(masv,tensv,namsinh,sdt,malop)
VALUES ('1781310192','nguyen xuan duc','1999/01/11','0965062714','cnpm')
------SOPHIEU----INSERT INTO sophieu(maphieu, masv, masach,soluongmuon, ngaym, ngayt)
VALUES ('157','1781310183','ta1','1','2018/12/27','2018/12/27')
INSERT INTO sophieu(maphieu, masv, masach,soluongmuon, ngaym, ngayt)
VALUES ('489','1781310192','ta2','2','2018/12/28','2018/12/30')
INSERT INTO sophieu(maphieu, masv, masach,soluongmuon, ngaym, ngayt)
VALUES ('773','1781310185','ta3','3','2018/12/26','2019/01/05')
INSERT INTO sophieu(maphieu, masv, masach,soluongmuon, ngaym, ngayt)
VALUES ('480','1781310184','c++','1','2018/12/25','2019/01/06')
INSERT INTO sophieu(maphieu, masv, masach,soluongmuon, ngaym, ngayt)
VALUES ('470','1781310186','vatly','4','2018/12/24','2019/01/07')
INSERT INTO sophieu(maphieu, masv, masach,soluongmuon, ngaym, ngayt)
VALUES ('175','1781310189','pldc','2','2018/12/22','2019/01/08')
INSERT INTO sophieu(maphieu, masv, masach,soluongmuon, ngaym, ngayt)
VALUES ('982','1781310187','tcc1','1','2018/12/23','2019/01/09')
INSERT INTO sophieu(maphieu, masv, masach,soluongmuon, ngaym, ngayt)
VALUES ('123','1781310184','dhmt','3','2018/12/21','2019/01/10')
INSERT INTO sophieu(maphieu, masv, masach,soluongmuon, ngaym, ngayt)
VALUES ('456','1781310191','mmt','2','2018/12/20','2019/01/11')
INSERT INTO sophieu(maphieu, masv, masach,soluongmuon, ngaym, ngayt)
VALUES ('124','1781310184','ta1','3','2018/12/27','2019/01/01')
Bài Tập
1.Nguyễn Quốc Tuấn :
Bài 1 : Lớp có sinh viên mượn ít sách nhất
Bài 2 : Tính tổng sinh viên của từng lớp đã mượn sách
Bài 3 : Chỉnh sửa cơ sở dữ liệu để có thể in ra phiếu của người mượn (số lượng
mượn, tên sách, tác giá, thời gian …)
Bài 4 : khởi tạo trigger Update Số Lượng sách trong bảng Sophieu và sach
Bài 5 : Tạo procedure cho câu INSERT để thêm sinh viên vào bảng lớp
---------Bai Tap 1 : Hiển thị danh sách lớp có sinh viên mượn ít sách nhất--------SELECT lop.malop AS N'Mã Lớp',lop.tenlop AS N'Tên Lớp', sinhvien.tensv AS N'Tên Sinh Viên',
sophieu.soluongmuon AS N'Số Lượng Mượn'
FROM lop,sinhvien,sophieu
WHERE sinhvien.masv=sophieu.masv AND sinhvien.malop=lop.malop
GROUP BY sinhvien.tensv, sophieu.soluongmuon, lop.malop, lop.tenlop
HAVING SUM(soluongmuon)<=ALL(SELECT SUM(soluongmuon)
FROM sophieu
GROUP BY masv);
--------Bai tap 2: Tính tổng sinh viên của từng lớp đã mượn sách----------Chưa xong
SELECT sinhvien.malop AS N'Mã Lớp', lop.tenlop AS N'Tên Lớp', count(DISTINCT sophieu.masv) AS N'Số
SV Mượn Sách',SUM(soluongmuon) AS N'Số Lượng Mượn'
FROM lop,sinhvien,sophieu
WHERE lop.malop=sinhvien.malop AND sinhvien.masv=sophieu.masv
GROUP BY sinhvien.malop, lop.tenlop
---------BÀi 3 : Chỉnh sửa cơ sở dữ liệu để có thể in ra phiếu của người mượn (số lượng mượn, tên sách,
tác giá, thời gian …)
CREATE FUNCTION cau1(@masv NVARCHAR (50))
RETURNS TABLE
AS
RETURN(
SELECT
sinhvien.tensv,sophieu.maphieu,sach.tensach,sach.theloai,sach.tacgia,sophieu.soluongmuon,sophieu.ng
ayt,sophieu.ngaym
FROM sinhvien,sophieu,sach
WHERE sinhvien.masv=@masv
AND sinhvien.masv=sophieu.masv
AND sophieu.masach=sach.masach
GROUP BY
sinhvien.tensv,sophieu.maphieu,sach.tensach,sach.theloai,sach.tacgia,sophieu.soluongmuon,sophieu.ng
ayt,sophieu.ngaym
)
DROP FUNCTION cau1
SELECT * FROM cau1('1781310184')
---------Bài 4 : khởi tạo trigger Update Số Lượng sách trong bảng Sophieu và sach
DROP TRIGGER trg_CapNhatSoLuong
CREATE TRIGGER trg_CapNhatSoLuong ON sophieu AFTER UPDATE AS
BEGIN
UPDATE sach SET soluong=sach.soluong - (SELECT soluongmuon FROM inserted WHERE masach
= sach.masach)
+ (SELECT soluongmuon
FROM deleted WHERE masach = sach.masach)
from sach
join deleted on sach.masach=deleted.masach
END
UPDATE sophieu SET soluongmuon = 3
WHERE maphieu = 157
select * from sach
select * from sophieu
------- Bai 5 : Tạo procedure cho câu INSERT để thêm sinh viên vào bảng lớp
----Bang Sinh viên trước khi tạo Procedure
SELECT * FROM sinhvien
----procedure cho câu INSERT
CREATE PROCEDURE udsThemSinhVien
@masv NVARCHAR(50),
@tensv NVARCHAR(50),
@namsinh DATE ,
@sdt VARCHAR(50) ,
@malop NVARCHAR(50)
As
BEGIN
INSERT INTO sinhvien(masv, tensv, namsinh, sdt,malop)
VALUES(@masv, @tensv, @namsinh, @sdt, @malop)
END
DROP PROCEDURE udsThemSinhVien
-----Gọi procedure thêm sinh viên
EXEC udsThemSinhVien '126802',N'Nguyễn Văn AAA','1998','0396854725','CNPM2'
----Bang Sinh viên sau khi tạo Procedure------SELECT * FROM sinhvien
2.Nguyễn Thị Thu :
Bài 1 : Tác Giả có nhiều sách được mượn nhất
Bài 2 : Tính tổng số sách mượn của từng sinh viên theo lớp
Bài 3 : Tạo thêm cột trong bảng để tính toán số ngày đã mượn sách của từng sinh
viên
Bài 4 : Tạo procedure để xem thông tin sinh viên đã mượn sách trong bảng số
phiếu
Bài 5 : Tạo Trigger cập nhật thông tin sinh viên có soluongmuon
trên bảng số phiếu
Bài 1: Tác giả có nhiều sách được mượn nhất
SELECT TOP 1 tacgia , sum(soluongmuon)
AS
‘ tongsoluongmuon ’
FROM
sach , sophieu
WHERE
sach.masach = sophieu.masach
GROUP BY tacgia
ORDER BY sum(soluongmuon) DESC
Bài 2 : Tính tổng số sách mượn của từng sinh viên theo lớp
SELECT tensv , sum(soluongmuon), malop
AS ‘ tongsoluongmuon ‘
FROM
sinhvien , sophieu
WHERE sinhvien.masv = sophieu.masv
GROUP BY
malop, tensv
Bài 3 : Tạo thêm cột trong bảng để tính toán số ngày đã mượn sách của từng
sinh viên
ALTER TABLE sophieu
ADD songaym INT
---- sau khi them 1 cot ta update du lieu vao cot
UPDATE sophieu
SET songaym = DATEDIFF (DAY,ngayt, ngaym)
FROM sophieu
WHERE
maphieu =’123’
SELECT * FROM sophieu
----- alter table sophieu drop column songaym
Bài 4 :
Tạo procedure để xem thông tin của sinh viên đã mượn sách trong bảng số
phiếu
CREATE VIEW thongtin_nguoimuon
AS(
SELECT masv , tensv, malop
FROM sinhvien, lop
WHERE
sinhvien.malop = lop.malop)
SELECT * FROM thongtin_nguoimuon
CREATE PROCEDURE thongtin_SV
@masv NVARCHAR(50)
AS
BEGIN
IF @masv IS NULL
PRINT 'ma sinh vien khong dung'
ELSE
SELECT * FROM sinhvien
WHERE masv = @masv
END
EXEC thongtin_SV '1781310183'
Bài 5 :
Tạo trigger trên bảng sophieu để cập nhật thông tin sinh viên mượn sách có
soluongmuon lớn hơn 5
CREATE TRIGGER capnhat_SV
ON
sophieu
FOR INSERT
AS
BEGIN
DECLARE @soluongm INT
SET @soluongm = (SELECT sum(soluongmuon)
FROM sophieu, sach
WHERE sophieu.masach = sach.masach
GROUP BY tacgia)
END
SELECT * FROM sophieu
-- DROP TRIGGER capnhat_SV
3.Nguyễn Trí Tuệ :
Bài 1 : Sinh viên mượn sách dưới 20 tuổi
Bài 2 : Update số lượng sách sau khi sinh viên mượn thêm sách
Bài 3 : Thêm cột tính tổng số sinh viên trên bảng lớp. Tính tổng số sinh viên các
lớp đã mượn sách
Bài 4 : Từ bảng số phiếu hiển thị thông tin mã sinh viên, mã phiếu, ngày mượn,
ngày trả của những sinh viên mượn 2 quyển sách
Bài 5 : Tạo 1 trigger để xóa số lượng sách mượn
Bài1: Sinh viên mượn sách dưới 20 tuổi
Code minh họa
SELECT SINHVIEN.MASV,TENSV,MALOP
FROM SINHVIEN,SOPHIEU
WHERE SINHVIEN.MASV = SOPHIEU.MASV
AND (YEAR(GETDATE())-YEAR(NAMSINH) <20 );
Bài2: Update số lượng sách sau khi sinh vien mượn thêm sách
Code minh họa
ALTER TABLE SOPHIEU ADD MUONTHEM int;
---- cap nhap thong tin MUONTHEM-----INSERT
INTO
SOPHIEU
VALUES
('157','1781310183','TA1’,'1','2018/12/27','2018/12/27','0')
INSERT
INTO
SOPHIEU
VALUES
('489','1781310192','TA2','2','2018/12/28','2018/12/30','0')
INSERT
INTO
SOPHIEU
VALUES
('773','1781310185','TA3','3','2018/12/26','2019/01/05','0')
INSERT INTO SOPHIEU VALUES ('480','1781310184','C+
+','1','2018/12/25','2019/01/06','0')
INSERT
INTO
SOPHIEU
VALUES
('470','1781310186','VATLY','4','2018/12/24','2019/01/07','0')
INSERT
INTO
SOPHIEU
VALUES
('175','1781310189','PLDC','2','2018/12/22','2019/01/08','0')
INSERT
INTO
SOPHIEU
VALUES
('982','1781310187','TCC1','1','2018/12/23','2019/01/09','0')
INSERT
INTO
SOPHIEU
VALUES
('123','1781310184','DHMT','3','2018/12/21','2019/01/10','0')
INSERT
INTO
SOPHIEU
VALUES
('456','1781310191','MMT','2','2018/12/20','2019/01/11','0')
INSERT
INTO
SOPHIEU
VALUES
('124','1781310184','TA1','3','2018/12/27','2019/01/01','0')
INSERT
INTO
SOPHIEU
VALUES
('157','1781310190','TA1','2','2018/12/27','2018/12/27','0')
INSERT
INTO
SOPHIEU
VALUES
('486','1781310191','DHMT','3','2018/12/22','2019/01/01','0')
------update so luong sach sau khi muon them----CREATE TRIGGER trg_CapNhatSoLuong ON sophieu AFTER
UPDATE AS
BEGIN
UPDATE sach SET soluong=sach.soluong - (SELECT
MUONTHEM FROM inserted WHERE masach = sach.masach)
+
(SELECT
MUONTHEM FROM deleted WHERE masach = sach.masach)
from sach
join deleted on sach.masach=deleted.masac
END
----BANG TRUOC CAP NHAP
-------BANG SAU CAP NHAP
Bài3: Thêm cột tính tổng số sinh viên trên bảng lớp. Tính tổng số sinh viên các lớp đã
Code minh họa
ALTER TABLE LOP ADD TONGSOSV int;
mượn sách
---- cap nhap thong tin TONGSOSV-----INSERT INTO LOP VALUES ('TC-01','1782','THE CHAT','50')
INSERT INTO LOP VALUES ('TA-02','MS13','TIENG ANH','46')
INSERT INTO LOP VALUES ('CNTT','AC14','CONG NGHE
THONG TIN','50')
INSERT INTO LOP VALUES ('CNPM','DF15','CONG NGHE PHAN
MEM','36')
INSERT INTO LOP VALUES ('COT','AF72','CO DIEN TU','24')
INSERT INTO LOP VALUES ('H2','CK13','DIEN','56')
INSERT INTO LOP VALUES ('QTDN','QT3','KINH TE','40')
INSERT INTO LOP VALUES ('COTA','CK14T','CO BAN','26')
---- tong sinhvien cac lop da muon sach -----SELECT SINHVIEN.MALOP AS N'Mã Lớp', LOP.TENLOP
AS N'Tên Lớp', count(DISTINCT SOPHIEU.MASV)
AS N'Số SV Mượn Sách',SUM(SOLUONG+MUONTHEM)
AS N'Số Lượng Mượn'
FROM LOP,SINHVIEN,SOPHIEU
WHERE LOP.MALOP=SINHVIEN.MALOP
AND SINHVIEN.MASV=SOPHIEU.MASV
GROUP BY SINHVIEN.MASV, LOP.MALOP
Bài4: Từ bảng số phiếu hiển thị thông tin mã sinh viên, mã phiếu, ngày mượn, ngày trả của những
sinh viên mượn 2 quyển sách
Code minh họa:
CREATE VIEW VIEW_sophieu
AS (
SELECT MASV,MAPHIEU,NGAYT,NGAYM,SOLUONG
FROM SOPHIEU
GROUP BY MASV,MAPHIEU,NGAYT,NGAYM, SOLUONG)
DECLARE @SOLUONG INT
SET @SOLUONG = 2
SELECT *
FROM VIEW_sophieu
WHERE SOLUONG = '2'
ORDER BY SOLUONG
Bài5: Tạo 1 trigger để xóa số lượng sách mượn
Code minh họa:
CREATE TRIGGER XOASOSACH
ON SOPHIEU
FOR DELETE AS
BEGIN
UPDATE sach
SET soluong = soluong - (
SELECT soluong
FROM deleted
WHERE masach = sach.masach
)
FROM sach
JOIN inserted ON sach.masach = inserted.masach
END
4.Lê Thanh Tùng :
Bài 1 : Lớp có sinh viên mượn nhiều sách nhất
Bài 2 : Tổng lượng sách đã mượn theo nhà xuất bản
Bài 3 : Tạo lập quyền hạn mượn sách của từng sinh viên (2 – 5 quyển/tháng). Tính toán số lượng
sinh viên đã mượn quá số lượng quy định
Bài 4 : Từ bảng sach hiển thị ra masach,tensach,soluong có Năm xuất bản vào năm 2016
Bài 5 : Tạo 1 trigger kiểm tra số lượng sách mượn trên bảng sophieu có vượt quá giới hạn mỗi
khi update dữ liệu
BÀI 1 : HIỂN THỊ LỚP CÓ SINH VIÊN MƯỢN NHIỀU SÁCH NHẤT
SELECT sinhvien.masv,tensv,lop.malop,tenlop,sum(soluongmuon) as 'soluongmuon'
FROM sophieu,sinhvien,lop
WHERE sophieu.masv=sinhvien.masv and lop.malop=sinhvien.malop
and lop.malop in (SELECT malop
FROM sinhvien,sophieu
WHERE sinhvien.masv=sophieu.masv
GROUP BY malop
HAVING SUM(soluongmuon)>= all(SELECT sum(soluongmuon)
FROM sophieu,sinhvien,LOP
WHERE sophieu.masv=sinhvien.masv
and lop.MALOP=SINHVIEN.MALOP
GROUP BY lop.malop))
GROUP BY sinhvien.masv,tensv,lop.malop,tenlop ;
BÀI 2 : Tổng lượng sách đã mượn theo nhà xuất bản
SELECT nhaxb, sum(soluongmuon) as 'tongmuon'
FROM sach, sophieu
WHERE sach.masach = sophieu.masach
GROUP BY nhaxb
ORDER BY [tongmuon] DESC;
BÀI 3: Tạo lập quyền hạn mượn sách của từng sinh viên (2 – 5 quyển/tháng).
Tính toán số lượng sinh viên đã mượn quá số lượng quy định
CREATE TABLE themuon (
mathe NVARCHAR(50),
masv NVARCHAR(50),
maphieu NVARCHAR(50),
gioihanmuon INT,
ngaybd date,
ngayhh date,
CONSTRAINT pk_mathe PRIMARY KEY(mathe,masv),
CONSTRAINT fk_themuon_masv FOREIGN KEY (masv) REFERENCES sinhvien(masv) ON DELETE CASCADE
ON UPDATE CASCADE )
----Themuon----INSERT INTO themuon VALUES ('1','1781310183','157','5','2018/1/2','2018/1/2')
INSERT INTO themuon VALUES ('2','1781310184','480','3','2018/2/27','2019/01/01')
INSERT INTO themuon VALUES ('3','1781310185','773','3','2018/4/15','2018/10/01')
INSERT INTO themuon VALUES ('4','1781310186','470','3','2018/12/2','2019/01/01')
INSERT INTO themuon VALUES ('5','1781310187','982','3','2018/10/22','2019/02/01')
INSERT INTO themuon VALUES ('6','1781310188','175','3','2018/8/13','2019/12/01')
INSERT INTO themuon VALUES ('7','1781310189','157','3','2018/9/2','2019/01/01')
INSERT INTO themuon VALUES ('8','1781310190','486','3','2018/6/1','2019/10/01')
INSERT INTO themuon VALUES ('9','1781310191','456','5','2018/4/30','2019/10/01')
INSERT INTO themuon VALUES ('10','1781310192','489','3','2018/5/4','2019/9/01')
INSERT INTO themuon VALUES ('2','1781310184','123','3','2018/2/27','2019/01/01')
INSERT INTO themuon VALUES ('2','1781310184','124','3','2018/2/27','2019/01/01')
-- drop table themuon
-----------------------------------------------------------------------------------------------------------------SELECT sinhvien.masv,tensv,count(soluongmuon) AS 'soluongthua'
FROM sinhvien,sophieu,themuon
WHERE sinhvien.masv = sophieu.masv and sinhvien.masv = themuon.masv
and soluongmuon > gioihanmuon
GROUP BY sinhvien.masv,tensv ;
Bài 4 : Từ bảng sach hiển thị ra masach,tensach,soluong có Năm xuất bản vào
năm 2016
CREATE VIEW v_sach AS (
SELECT masach,tensach,soluong,namxb
FROM sach
GROUP BY masach,tensach,soluong,namxb )
DECLARE @namxb INT
SET @namxb = 2016
SELECT *
FROM v_sach
WHERE YEAR(namxb) = @namxb
ORDER BY [namxb] DESC
Bài 5 : Tạo 1 trigger kiểm tra số lượng sách mượn trên bảng sophieu có vượt
quá giới hạn mỗi khi update dữ liệu
CREATE VIEW v_sophieu AS (
SELECT Distinct sophieu.masv, sinhvien.tensv, soluongmuon
FROM sophieu, sinhvien
WHERE sophieu.masv = sinhvien.masv
GROUP BY sophieu.masv, sinhvien.tensv,soluongmuon)
--DROP VIEW v_sophieu
SELECT * FROM v_sophieu
SELECT * FROM themuon,sinhvien where sinhvien.masv=themuon.masv
--TRIGGER-CREATE TRIGGER nhap_slmuon ON sophieu
FOR INSERT
AS
IF EXISTS (SELECT soluongmuon FROM inserted WHERE soluongmuon between 2 and 10)
COMMIT TRAN
ELSE
PRINT 'GIOI HAN MUON PHAI TRONG KHONG KHOANG 2-10 CUON'
ROLLBACK TRAN ;
INSERT INTO sophieu VALUES ('122','1781310183','TA1','3','2018/12/27','2018/12/27')
Drop trigger nhap_slmuon
5.Đinh Doãn Việt :
Bài 1 : Sinh viên mượn nhiều sách nhất
Bài 2 : Tổng số phiếu mượn có sách của nhà xuất bản ‘A’
Bài 3 : Lập bảng tác giả. Tính toán tổng số lượng sách của từng tác giả đã được mượn. A’
Bài 4 : Từ bảng phieumuon, hiển thị những phiếu mượn có thời gian nhiều hơn N ngày
Bài 5 : Tạo Trigger Insert vào bảng phieumuon, cập nhật số sách có trong thư viện
BÀI TẬP 1 : HIỂN THỊ TÊN SINH VIÊN MƯỢN SÁCH NHIỀU NHẤT
SELECT sinhvien.masv,tensv,lop.malop,tenlop,sum(soluong) as 'soluongmuon'
FROM sophieu,sinhvien,lop
WHERE sophieu.masv=sinhvien.masv and lop.malop=sinhvien.malop
HAVING SUM(soluongmuon) >= ALL (SELECT SUM (soluongmuon)
FROM sophieu
GROUP BY masv)
GROUP BY sinhvien.masv,tensv,lop.malop,tenlop
BÀI TẬP 2 : TỔNG SỐ PHIẾU MƯỢN CÓ SÁCH CỦA NHÀ XUẤT BẢN 'A'
CREATE VIEW v_soluong AS (
SELECT COUNT(MAPHIEU) AS 'SOLUONG'
FROM SOPHIEU, SACH
WHERE SOPHIEU.MASACH = SACH.MASACH AND SACH.nhaxb = 'A' )
SELECT * FROM v_soluong
--DROP VIEW v_soluong
SELECT DISTINCT MAPHIEU, SACH.NHAXB,count(maphieu) as N'Số Phiếu'
FROM SOPHIEU, SACH
WHERE SOPHIEU.MASACH = SACH.MASACH AND SACH.nhaxb = 'A'
GROUP BY MAPHIEU, SACH.NHAXB
Vì trong TABLE sophieu không có nhà xuất bản ‘A’ nên e đã đổi biến ‘A’ thành ‘KIM
DONG’
ĐỂ HIỂN THỊ RA KẾT QUẢ DƯỚI ĐÂY
BÀI TẬP 3 :
LẬP BẢNG TÁC GIẢ - TÍNH TOÁN TỔNG SỐ LƯỢNG SÁCH CỦA TỪNG
TÁC GIẢ ĐÃ ĐƯỢC MƯỢN
CREATE VIEW v_tacgia AS (
SELECT tacgia, sum(soluongmuon) as sl_daduocmuon
FROM sach, sophieu
WHERE sach.masach = sophieu.masach
GROUP BY tacgia)
SELECT * FROM v_tacgia
-- DROP VIEW v_tacgia
BÀI TẬP 4 :
TỪ BẢNG PHIẾU MƯỢN - HIỂN THỊ NHỮNG PHIẾU MƯỢN CÓ THỜI GIAN
MƯỢN NHIỀU HƠN N NGÀY
CREATE VIEW v_thongtinphieumuon AS (
SELECT sophieu.maphieu, sophieu.masv, sinhvien.tensv, sophieu.ngaym, sophieu.ngayt
FROM dbo.sophieu, sinhvien
WHERE sophieu.masv = sinhvien.masv
GROUP BY sophieu.masv, sinhvien.tensv, sophieu.ngaym, sophieu.ngayt )
--SELECT * FROM v_thongtinphieumuon
--DROP VIEW v_thongtinphieumuon
CREATE PROCEDURE pr_phieumuon @songay INT
AS
SELECT *, DATEDIFF(DAY,NGAYM,NGAYT) AS 'Số Ngày'
FROM v_thongtinphieumuon
WHERE DATEDIFF(DAY,NGAYM,NGAYT) >= @songay
Ví dụ : N = 10
EXEC pr_phieumuon '10'
DROP PROCEDURE pr_phieumuon
BÀI TẬP 5 : CẬP NHẬT BẢNG SÁCH SAU KHI THÊM DỮ LIỆU BẢNG PHIẾU
MƯỢN
ĐỂ ĐẢM BẢO CHO DỮ LIỆU LUÔN ĐÚNG TRONG SUỐT QUÁ TRÌNH LÀM VIỆC
EM SẼ XÓA TOÀN BỘ DỮ LIỆU CỦA BẢNG SOPHIEU VÀ TẠO TRIGGER
Xóa Toàn Bộ Dữ Liệu Có Trong Bảng sophieu : TRUNCATE TABLE sophieu
Em tạo thêm 1 bảng VIEW : v_sophieu để hiển thị tổng số sách đã mượn trong bảng phiếu mượn để cô dễ nhìn
hơn
CREATE VIEW v_sophieu AS
(
SELECT sophieu.masach, sach.tensach, SUM (soluongmuon) as N'Số Lượng Mượn'
FROM sophieu, sach
WHERE sophieu.masach = sach.masach
GROUP BY sophieu.masach, sach.tensach
)
-------------------------TẠO TRIGGER INSERT------------------------CREATE TRIGGER ktr_sosach ON sophieu
FOR INSERT
AS
BEGIN
UPDATE sach
SET soluong = soluong - (
SELECT soluongmuon
FROM inserted
WHERE masach = sach.masach
)
FROM sach
JOIN inserted ON sach.masach = inserted.masach
END
--drop trigger ktr_sosach
INSERT GIÁ TRỊ CHO BẢNG SOPHIEU
INSERT INTO sophieu VALUES ('157','1781310183','TA1','1','2018/12/27','2018/12/27')
INSERT INTO sophieu VALUES ('489','1781310192','TA2','2','2018/12/28','2018/12/30')
INSERT INTO sophieu VALUES ('773','1781310185','TA3','3','2018/12/26','2019/01/05')
INSERT INTO sophieu VALUES ('480','1781310184','C++','1','2018/12/25','2019/01/06')
INSERT INTO sophieu VALUES ('470','1781310186','VATLY','5','2018/12/24','2019/01/07')
INSERT INTO sophieu VALUES ('175','1781310189','PLDC','2','2018/12/22','2019/01/08')
INSERT INTO sophieu VALUES ('982','1781310187','TCC1','1','2018/12/23','2019/01/09')
INSERT INTO sophieu VALUES ('123','1781310184','DHMT','3','2018/12/21','2019/01/10')
INSERT INTO sophieu VALUES ('456','1781310191','MMT','6','2018/12/20','2019/01/11')
INSERT INTO sophieu VALUES ('156','1781310190','TA1','2','2018/12/27','2018/12/27')
INSERT INTO sophieu VALUES ('486','1781310191','DHMT','4','2018/12/22','2019/01/01')
DỮ LIỆU CỦA BẢNG SACH TRƯỚC KHI NHẬP DỮ LIỆU BẢNG SOPHIEU
SAU QUÁ TRÌNH INSERT DỮ LIỆU CỦA BẢNG SOPHIEU
ĐỂ TIỆN CHO QUÁ TRÌNH KIỂM TRA SỰ THAY ĐỔI VỀ SỐ LƯỢNG SÁCH
EM SẼ HIỂN THỊ BẢNG VIEW v_sophieu hiển thị TỔNG số lượng mượn
GIAO DIỆN NGƯỜI DÙNG
6.Nguyễn Quang Vinh :
Bài 1 : Sách được mượn trong năm 2018
Bài 2 : Tổng số phiếu mượn của từng lớp trong tháng 2
Bài 3 : Lập bảng thể loại. Tính toán tổng số lượng sách của từng thể loại đã được mượn
Bài 4 : Từ bảng sinh viên hiện thị ra thông tin những sinh viên 19 tuổi
Bài 5 : Dùng Trigger cập nhật số sách trong thư viện sau khi hủy mượn
Bài 1: Sách được mượn trong năm 2018 là giáo trình
Code minh họa:
SELECT TENSACH
FROM SOPHIEU,SACH
WHERE SOPHIEU.MASACH=SACH.MASACH AND YEAR (NGAYM)='2018' AND
THELOAI='GIAO TRINH';
*****************************___________________________*********************
********
Bài 2 : Tổng số phiếu mượn của từng lớp trong tháng 2
Code minh họa:
SELECT LOP.MALOP , COUNT(SACH.MASACH) AS 'SL'
FROM SOPHIEU,SINHVIEN,LOP,SACH
WHERE LOP.MALOP=SINHVIEN.MALOP AND SACH.MASACH=SOPHIEU.MASACH AND
MONTH (NGAYM)= '2'
GROUP BY LOP.MALOP
ORDER BY [SL] ASC ;