Tải bản đầy đủ (.docx) (40 trang)

Báo cáo Đồ Án Hệ Quản Trị Cơ Sở Dữ Liệu Hệ Thống || Quản Lý Sách Thư Viện || SQL

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.27 MB, 40 trang )

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 ;


×