You are on page 1of 13

Phân tích thực thể và các thuộc tính của thực thể:

 SÁCH
- Mã sách
- Tiêu đề
- Nhà xuất bản
- Tác giả
- Số trang
- Số lượng bản sao
- Số tiền
- Ngày nhập kho
- Vị trí đặt sách
- Mã loại sách
 LOẠI SÁCH
- Mã loại sách
- Thể loại sách
 PHIẾU MƯỢN
- Mã phiếu mượn
- Ngày mượn
- Ngày trả
- Mã sinh viên
- Trạng thái
 THẺ SINH VIÊN
- Mã sinh viên
- Tên sinh viên
- Hiệu lực sinh viên
- Chuyên ngành
- Email
- Số điện thoại
 QUẢN LÝ CHI TIẾT SÁCH
- Ghi chú
- Mã sách
- Mã phiếu mượn
Mô tả mối quan hệ thực thể:

1 N
SINH VIÊN PHIẾU MƯỢN

 (Mỗi sinh viên có thể có nhiều phiếu mượn, mỗi phiếu mượn chỉ có 1 sinh
viên)

N N
PHIẾU MƯỢN SÁCH

 (Mỗi phiếu mượn có thể có nhiều cuốn sách, mỗi cuốn sách có thể có trong
nhiều phiếu mượn)

1 N
SÁCH LOẠI SÁCH

 (Mỗi cuốn sách chỉ thuộc 1 thế loại sách, mỗi thể loại sách có thể có nhiều
cuốn sách)
SINH VIÊN
Mã sinh viên (PK)
Tên sinh viên
Hiệu lực sinh viên
Kiểu Ngành học
SÁCH Email
dữ SINH VIÊN
Mã sách (PK) VARCHAR(10) PK Số
Mã sinhthoại
điện viên (PK)
liệu Tiêu đề VARCHAR(100) Tên sinh viên
của Nhà xuất bản VARCHAR(255) SINH VIÊN
Hiệu lực sinh viên
Tác giả VARCHAR(50) Mã sinh viên (PK)
các Ngành học
Số trang INT Tên sinh viên
thực Email
Số lượng bản sao INT Hiệu lực sinh viên
Số điện thoại
thể: Giá tiền INT Ngành học
Ngày nhập kho DATE Email
Vị trí đặt sách VARCHAR(255) Số điện thoại
Mã loại sách VARCHAR(10) FK (Loại sách)
SINH VIÊN
Mã sinh viên (PK)
Tên sinh viên
Hiệu lực sinh viên
Ngành học
LOẠI SÁCH Email
Mã loại sách (PK) VARCHAR(10) PK Số điện thoại
Thể loại sách VARCHAR(50)
SINH VIÊN
Mã sinh viên (PK)
Tên sinh viên
Hiệu lực sinh viên
Ngành học
Email
Số điện thoại

SINH VIÊN
Mã sinh viên (PK)
Tên sinh viên
Hiệu lực sinh viên
Ngành học
Email
SINH VIÊN Số điện thoại
Mã sinh viên (PK) VARCHAR(10) PK
SINH VIÊN
Mã sinh viên (PK)
Tên sinh viên VARCHAR(255)
PHIẾU MƯỢN
Hiệu lực sinh viên DATE
Mã phiếu mượn (PK) VARCHAR(10) PK
Ngành học VARCHAR(50)
Ngày mượn DATE
Email VARCHAR(100)
Ngày trả DATE
Số điện thoại VARCHAR(15)
Mã sinh viên VARCHAR(10) FK (Sinh viên)
Mã lớp VARCHAR(10)
Trạng thái VARCHAR(50)

QUẢN LÝ CHI TIẾT SÁCH


Mã phiếu mượn VARCHAR(10) FK (Phiếu mượn)
Mã sách VARCHAR(10) FK (Sách)
Ghi chú VARCHAR(255)
Sơ đồ quan hệ ERD:

Tạo bảng và các ràng buộc:


CREATE DATABASE QuanLyThuVien;
USE QuanLyThuVien;

CREATE TABLE SINHVIEN(


Masinhvien VARCHAR(10) PRIMARY KEY NOT NULL,
Tensinhvien VARCHAR(255) NOT NULL,
HieulucSV DATE NOT NULL,
Nganhhoc VARCHAR(50),
Email VARCHAR(100) NOT NULL,
SDT VARCHAR(15)
);

CREATE TABLE LOAISACH(


Maloaisach VARCHAR(10) PRIMARY KEY NOT NULL,
Theloaisach VARCHAR(50) NOT NUll
);

CREATE TABLE SACH(


Masach VARCHAR(10) PRIMARY KEY NOT NULL,
Tencuonsach VARCHAR(100) NOT NULL,
Tacgia VARCHAR(50),
Nhaxuatban VARCHAR(255),
Sotrang INT CHECK (Sotrang >= 5),
Soluongbansao INT NOT NULL CHECK(Soluongbansao > 1),
Giatien INT NOT NULL,
Ngaynhapkho DATE NOT NULL,
Vitridatsach VARCHAR(255) NOT NULL,
Maloaisach VARCHAR(10) NOT NULL
);
ALTER TABLE SACH
ADD CONSTRAINT FK_MALOAISACH FOREIGN KEY (Maloaisach) REFERENCES
LOAISACH(Maloaisach);

CREATE TABLE PHIEUMUON(


Maphieumuon INT PRIMARY KEY NOT NULL AUTO_INCREMENT ,
Ngaymuon DATE NOT NULL,
Ngaytra DATE,
Malop VARCHAR(10),
Masinhvien VARCHAR(10) NOT NULL
);
ALTER TABLE PHIEUMUON
ADD CONSTRAINT FK_MASINHVIEN FOREIGN KEY (Masinhvien) REFERENCES
SINHVIEN(Masinhvien);

CREATE TABLE QUANLYCHITIETSACH(


Maphieumuon INT NOT NULL,
Masach VARCHAR(10) NOT NULL,
Ghichu VARCHAR(255)
);
ALTER TABLE QUANLYCHITIETSACH
ADD CONSTRAINT FK_MAPHIEUMUON FOREIGN KEY (Maphieumuon)
REFERENCES PHIEUMUON(Maphieumuon),
ADD CONSTRAINT FK_MASACH FOREIGN KEY (Masach) REFERENCES
SACH(Masach);

Nhập dữ liệu vào các bảng:

BẢNG SINHVIEN:
INSERT INTO sinhvien VALUES
('PD05395', 'Đặng Ngọc Anh', '2022-3-3', 'Lập
trình','anh@gmail.com','0123456789'),
('PD05396', 'Đặng Ngọc Minh', '2022-6-8', 'Lập
trình','minh@gmail.com','0123456782'),
('PD05394', 'Hồ Ngọc Anh', '2022-9-6', 'Lập
trình','anhhn@gmail.com','0123456783'),
('PD05364', 'Nguyễn Ngọc Anh', '2022-6-5', 'Lập
trình','anhnn@gmail.com','0123456784'),
('PD05021', 'Mai Ngọc Anh', '2022-4-6', 'Lập
trình','anhmn@gmail.com','0123456785');

BẢNG SACH:
INSERT INTO sach VALUES
('SQL001','SQL sever','Herbert Schildt','NXB Ha Noi','30',
'4','500000', '2010-1-20','1','cntt'),
('IT002','Lap trinh huong doi tuong', 'Herbert Schildt','NXB Ha Noi','20',
'4','400000','2017-1-30','1','cntt'),
('SQL003','Tin hoc co so','Herbert Schildt','NXB Ha Noi','15',
'4','200000','2018-5-6','1','cntt'),
('PTS004','Photoshop','Herbert Schildt','NXB Ha Noi', '25',
'4','350000', '2016-7-5','2','cntt'),
('IT005','Photoshop nang cao','Herbert Schildt','NXB Ha Noi','20',
'4','500000','2017-1-1','2','cntt');
BẢNG PHIEUMUON:
INSERT INTO phieumuon
(Maphieumuon, Ngaymuon, Ngaytra, Malop, Masinhvien)
VALUES
('1', '2017-2-2', '2017-2-15', 'PT16305', 'PD05395'),
('2', '2016-1-2', '2016-1-15', 'PT16305', 'PD05396'),
('3', '2021-2-28', null, 'PT16305', 'PD05394'),
('4', '2020-12-2', null, 'PT16305', 'PD05393'),
('5', '2019-2-2', '2019-2-8', 'PT16305', 'PD05392');

BẢNG LOAISACH:
INSERT INTO loaisach VALUES
('cntt', 'Công nghệ thông tin'),
('pts', 'Photoshop'),
('sql', 'Cơ sở dữ liệu'),
('ks', 'Du lịch và khách sạn'),
('mkt', 'Marketting');

BANG QUANLYCHITIETSACH:
INSERT INTO quanlychitietsach VALUES
('1', 'SQL001', null),
('2', 'IT002', null),
('3', 'SQL003', null),
('4', 'PTS004', null),
('5', 'IT005', null);

Truy vấn dữ liệu


6.1: Liệt kê tất cả thông tin của các đầu sách gồm tên sách, mã sách, giá tiền,
tác giả thuộc loại sách có mã “IT”.

SELECT Tencuonsach, Masach, Giatien, Tacgia


FROM sach
WHERE sach.Masach like 'IT%';

6.2: Liệt kê các phiếu mượn gồm các thông tin mã phiếu mượn, mã sách , ngày
mượn, mã sinh viên có ngày mượn trong tháng 01/2017
SELECT phieumuon.Maphieumuon, quanlychitietsach.Masach, Ngaymuon,
Masinhvien
FROM phieumuon, quanlychitietsach
WHERE (phieumuon.Maphieumuon = quanlychitietsach.Maphieumuon)
and year(phieumuon.ngaymuon) = 2017
and month(phieumuon.ngaymuon) = 1;

6.3: Liệt kê các phiếu mượn chưa trả sách cho thư viện theo thứ tự tăng dần
của ngày mượn sách

SELECT * FROM phieumuon


WHERE Ngaytra IS NULL
ORDER BY DAY(Ngaymuon);

6.4: Liệt kê tổng số đầu sách của mỗi loại sách (gồm mã loại sách, tên loại sách,
tổng số lượng sách mỗi loại).
SELECT loaisach.Maloaisach, Theloaisach, COUNT(MaSach) AS 'Số sách'
FROM sach INNER JOIN loaisach ON sach.Maloaisach = loaisach.Maloaisach
GROUP BY loaisach.Maloaisach;

6.5: Đếm xem có bao nhiêu lượt sinh viên đã mượn sách.

SELECT COUNT(Maphieumuon) as 'Số sinh viên mượn sách' from PHIEUMUON;

6.6: Hiển thị tất cả các quyển sách có tiêu đề chứa từ khoá “SQL”

SELECT * FROM SACH


WHERE Tencuonsach like '%SQL%';

6.7: Hiển thị thông tin mượn sách gồm các thông tin: mã sinh viên, tên sinh
viên, mã phiếu mượn, tiêu đề sách, ngày mượn, ngày trả. Sắp xếp thứ tự theo
ngày mượn sách.
SELECT SINHVIEN.masinhvien, SINHVIEN.tensinhvien,
PHIEUMUON.Maphieumuon, SACH.Tencuonsach, PHIEUMUON.ngaymuon,
Ngaytra
FROM SINHVIEN
INNER JOIN PHIEUMUON ON SINHVIEN.masinhvien = PHIEUMUON.masinhvien
INNER JOIN QUANLYCHITIETSACH ON QUANLYCHITIETSACH.MAPHIEUMUON =
PHIEUMUON.MAPHIEUMUON
INNER JOIN SACH ON QUANLYCHITIETSACH.maSach = SACH.maSach
ORDER BY PHIEUMUON.ngaymuon;

6.8: Liệt kê các đầu sách có lượt mượn lớn hơn 20 lần
SELECT Tencuonsach, SACH.Masach, COUNT(QUANLYCHITIETSACH.MASACH)
AS 'Số lần mượn' from SACH
INNER JOIN QUANLYCHITIETSACH ON QUANLYCHITIETSACH.MASACH =
SACH.MASACH
GROUP BY SACH.MASACH
HAVING COUNT(QUANLYCHITIETSACH.MASACH) > 20;

6.9: Viết câu lệnh cập nhật lại giá tiền của các quyển sách có ngày nhập kho
trước năm 2014 giảm 30%.
UPDATE Sach SET Giatien = Giatien - (Giatien*0.3)
WHERE YEAR(Ngaynhapkho) < 2014;

6.10: Viết câu lệnh cập nhật lại trạng thái đã trả sách cho phiếu mượn của sinh
viên có mã sinh viên PD12301
UPDATE PHIEUMUON
SET ghichu='Da tra sach'
WHERE masinhvien='PD12301';
6.11: Lập danh sách các phiếu mượn quá hạn chưa trả gồm các thông tin: mã
phiếu mượn, tên sinh viên, email, danh sách các sách đã mượn, ngày mượn

SELECT PHIEUMUON.maphieumuon, SINHVIEN.tensinhvien,


SINHVIEN.Email, SACH.tencuonsach, PHIEUMUON.ngaymuon
FROM SINHVIEN INNER JOIN PHIEUMUON ON SINHVIEN.masinhvien =
PHIEUMUON.masinhvien
INNER JOIN QUANLYCHITIETSACH ON QUANLYCHITIETSACH.MAPHIEUMUON =
PHIEUMUON.MAPHIEUMUON
INNER JOIN SACH ON QUANLYCHITIETSACH.maSach = SACH.maSach
WHERE DATEDIFF(NOW(), phieumuon.Ngaymuon) > 7 AND
(phieumuon.Ngaytra IS NULL);

6.12: Viết câu lệnh cập nhật lại số lượng bản sao tăng lên 5 đơn vị đối với các
đầu sách có lượt mượn lớn hơn 10
UPDATE Sach
SET soluongbansao = Soluongbansao + 5
WHERE MaSach IN (SELECT MaSach FROM QUANLYCHITIETSACH GROUP BY
MaSach HAVING COUNT(MASACH) > 10);

6.13: Viết câu lệnh xoá các phiếu mượn có ngày mượn và ngày trả trước
‘1/1/2010’
DELETE FROM PHIEUMUON
WHERE YEAR(ngaymuon) < 2010 AND YEAR(ngaytra) < 2010;

6.14: Viết lệnh cập nhật lại thông tin vị trí đặt sách = ’quầy bán hạ giá’ với
những đầu sách có ngày nhập kho trước năm 2011.
UPDATE SACH
SET VITRIDATSACH = 'quầy bán hạ giá'
WHERE YEAR(Ngaynhapkho) < 2011;
6.15: Viết lệnh thêm 1 phiếu mượn sách (đầu sách tùy ý) cho sinh viên có mã
sinh viên (tùy ý). Với ngày mượn là ngày hiện tại
INSERT INTO PHIEUMUON VALUES
(NULL, NOW(), NULL, 'PT16305', 'PD05395', NULL);

6.16: Viết lệnh xóa các đầu sách có ngày nhập kho trước năm 2011.
Delete from Sach
Where year(ngaynhapkho) < 2011

You might also like