0% found this document useful (0 votes)
7 views

FF

Uploaded by

Khánh Linh
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views

FF

Uploaded by

Khánh Linh
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 41

CREATE DATABASE Quanlynhanvien_Hotensinhvien;

USE Quanlynhanvien_Hotensinhvien;

CREATE TABLE Phong (


MAPH VARCHAR(20) PRIMARY KEY,
TENPH VARCHAR(100),
DIACHIPHONG VARCHAR(255)
)
CREATE TABLE Chucvu (
MACV VARCHAR(20) PRIMARY KEY,
TENCV VARCHAR(100),
HESOPC FLOAT
)

CREATE TABLE Nhanvien (


MANV VARCHAR(20) PRIMARY KEY,
TENNV VARCHAR(100),
DIACHI VARCHAR(255),
HSLuong FLOAT,
MACV VARCHAR(20)FOREIGN KEY REFERENCES Chucvu(MACV),
MAPH VARCHAR(20) FOREIGN KEY (MAPH) REFERENCES
Phong(MAPH),
LUONG FLOAT,
THUCLINH FLOAT
)

INSERT INTO Chucvu (MACV, TENCV, HESOPC) VALUES


('CV001', 'Giam doc', 3.0),
('CV002', 'Truong phong', 2.5),
('CV003', 'Nhan vien', 1.0);

INSERT INTO Phong (MAPH, TENPH, DIACHIPHONGB) VALUES


('PH001', 'Phòng Kinh doanh', ' P.HCM'),
('PH002', 'Phòng Nhân so', 'Ha Noi'),
('PH003', 'Phòng IT', 'Ha Nam');

INSERT INTO Nhanvien (MANV, TENNV, DIACHI, HSLuong, MACV, MAPH,


LUONG, THUCLINH) VALUES
('NV001', 'Nguy?n V?n A', 'HPhong', 5.0, 'CV001', 'PH001', 20000000, 21000000),
('NV002', 'Tr?n Th? B', 'HCM', 4.5, 'CV002', 'PH002', 15000000, 16000000),
('NV003', 'Lê Minh C', 'Thanh Hoa', 3.0, 'CV003', 'PH003', 10000000, 11000000);

--Hien thi dia chi co phong ten la Tai chinh


SELECT DIACHIPHONG
FROM Phong
WHERE TENPH = 'Tài chính';

--Hien thi nhung nhan vien co dia chi Ha Noi


SELECT MANV, TENNV, DIACHI
FROM Nhanvien
WHERE DIACHI = 'Hà N?i';

-- Hien thi nhung nhan vien co ma P01


SELECT Nhanvien.MANV, Nhanvien.TENNV, Nhanvien.DIACHI
FROM Nhanvien
JOIN Phong ON Nhanvien.MAPH = Phong.MAPH
WHERE Phong.MAPH = 'P01';

--Hien thi nhung nhan vien khong co ma P01


SELECT MANV, TENNV, MAPH
FROM Nhanvien
WHERE MAPH <> 'P01';

--Hien thi cac phong co dia chi Nha B


SELECT MAPH, TENPH
FROM Phong
WHERE DIACHIPHONG = 'Nhà B';

--Hien thi chuc vu Truong Phong --


SELECT Nhanvien.MANV, Nhanvien.TENNV, Chucvu.TENCV
FROM Nhanvien
JOIN Chucvu ON Nhanvien.MACV = Chucvu.MACV
WHERE Chucvu.TENCV = 'Truong phong';

--Hien thi nvien co hsl cao nhat --


SELECT MANV, TENNV, HSLuong
FROM Nhanvien
WHERE HSLuong = (SELECT MAX(HSLuong) FROM Nhanvien);

--Thong tin nhan vien co nha A


SELECT MAPH, TENPH, DIACHIPHONG
FROM Phong
WHERE DIACHIPHONG= 'nhà A';

--Hien thi phong co tu 3 nhan vien


SELECT Phong.MAPH, Phong.TENPH, COUNT(Nhanvien.MANV) AS
TongSoNhanVien
FROM Phong
JOIN Nhanvien ON Phong.MAPH = Nhanvien.MAPH
GROUP BY Phong.MAPH, Phong.TENPH
HAVING COUNT(Nhanvien.MANV) >= 3;

--Hien thi phong co dia chi khac HN va hsl 2.34


SELECT MANV, TENNV, DIACHI, HSLuong
FROM Nhanvien
WHERE DIACHI != 'Hà Nội' AND HSLuong = 2.34;

--Hs phu cap cao nhat


SELECT MANV, TENNV, HSLuong
FROM Nhanvien
WHERE HSLuong = (SELECT MAX(HSLuong) FROM Nhanvien);

--Thuc linh cao nhat


SELECT MANV, TENNV, THUCLINH
FROM Nhanvien
WHERE THUCLINH = (SELECT MAX(THUCLINH) FROM Nhanvien);

--Nhieu nhan vien nhat


SELECT Phong.MAPH, Phong.TENPH, COUNT(Nhanvien.MANV) AS
TongSoNhanVien
FROM Phong
JOIN Nhanvien ON Phong.MAPH = Nhanvien.MAPH
GROUP BY Phong.MAPH, Phong.TENPH
HAVING COUNT(Nhanvien.MANV) = MAX(COUNT(Nhanvien.MANV));

--Tao bo sung rang buoc Defaul cho cot Thuclinh = 0


CREATE DEFAULT thuclinh_default
AS 0
EXEC sp_bindefault 'thuclinh_default', 'Nhanvien.THUCLINH';

--Tao bo sung rang buoc Defaul cho cot Dia chi "Chua xd"
CREATE DEFAULT diachi_default AS 'Ch?a xác ??nh';
EXEC sp_bindefault 'diachi_default', 'Nhanvien.DIACHI';

--Tao rule cho cot hsopc tu 0 den 4


CREATE RULE hesoPC_rule AS
@Hspc BETWEEN 0 AND 0.4
EXEC sp_bindrule 'hesoPC_rule', 'Chucvu.HESOPC'

--Tao thu tuc hien thi Manv, Tennv khi biet Macv
CREATE PROCEDURE pr1 @MACV VARCHAR(20)
AS
SELECT Nhanvien.MANV, Nhanvien.TENNV, Chucvu.TENCV
FROM Nhanvien
JOIN Chucvu ON Nhanvien.MACV = Chucvu.MACV
WHERE Chucvu.MACV = @MACV
EXEC pr1 @MACV = 'CV001';

--Tao thu tuc khi biet ma nhan vien


CREATE PROCEDURE HienThiThongTinNhanVien
@maNhanVien VARCHAR(20)
AS
BEGIN
SELECT MANV, TENNV, DIACHI
FROM Nhanvien
WHERE MANV = @maNhanVien;
END;
EXEC HienThiThongTinNhanVien @maNhanVien = 'NV001';

--Tao thu tuc khi biet dc


CREATE PROCEDURE HienThiThongTinNhanVien
@maNhanVien VARCHAR(20)
AS
BEGIN
SELECT MANV, TENNV, DIACHI
FROM Nhanvien
WHERE MANV = @maNhanVien;
END;
EXEC HienThiThongTinNhanVien @maNhanVien = 'NV001';

--Tao thu tuc khi bt hsluong


CREATE PROCEDURE HienThiThongTinNhanVienTheoHeSoLuong
@heSoLuong FLOAT
AS
BEGIN
SELECT MANV, TENNV, HSLuong
FROM Nhanvien
WHERE HSLuong = @heSoLuong;
END;
EXEC HienThiThongTinNhanVienTheoHeSoLuong @heSoLuong = 2.34;

--Tao thu tuc khi bt ma phong


CREATE PROCEDURE pr4 @MAPH VARCHAR(20)
AS
SELECT Nhanvien.MANV, Nhanvien.TENNV, Phong.TENPH
FROM Nhanvien, Phong
WHERE
Nhanvien.MAPH = Phong.MAPH
AND Phong.MAPH = @MAPH;
EXEC pr4 @MAPH = 'PH001';

--Tao thu tuc hien thi bt ma phong, tinh tong so nvien


CREATE PROCEDURE pr2 @MAPH VARCHAR(20)
AS
SELECT Phong.TENPH, COUNT(Nhanvien.MANV) AS TongSoNhanVien
FROM Phong, Nhanvien
WHERE Phong.MAPH = Nhanvien.MAPH
AND Phong.MAPH = @MAPH
GROUP BY Phong.TENPH;
EXEC pr2 @MAPH = 'PH001';

--Tao thu tuc khi bt hsoluonng


CREATE PROCEDURE HienThiNhanVienTheoHeSoLuong
@heSoLuong FLOAT
AS
BEGIN
SELECT MANV, TENNV, HSLuong
FROM Nhanvien
WHERE HSLuong = @heSoLuong;
END;
EXEC HienThiNhanVienTheoHeSoLuong @heSoLuong = '3.5';

--Tao thu tuc khi bt ma chuc vu


CREATE PROCEDURE HienThiNhanVienTheoMaChucVu
@maChucVu VARCHAR(20)
AS
BEGIN
SELECT Nhanvien.MANV, Nhanvien.TENNV, Chucvu.TENCV
FROM Nhanvien
JOIN Chucvu ON Nhanvien.MACV = Chucvu.MACV
WHERE Nhanvien.MACV = @maChucVu;
END;
EXEC HienThiNhanVienTheoMaChucVu @maChucVu = 'CV001';

--Tao thu tuc khi bt ma chuc vu, tinh tong so nvien


CREATE PROCEDURE HienThiChucVuVaSoNhanVien
@maChucVu VARCHAR(20)
AS
BEGIN
SELECT Chucvu.MACV, Chucvu.TENCV, COUNT(Nhanvien.MANV) AS
TongSoNhanVien
FROM Chucvu
LEFT JOIN Nhanvien ON Chucvu.MACV = Nhanvien.MACV
WHERE Chucvu.MACV = @maChucVu
GROUP BY Chucvu.MACV, Chucvu.TENCV;
END;
EXEC HienThiChucVuVaSoNhanVien @maChucVu = 'CV001';

--Tao thu tuc khi biet ten phong, tinh tong so nhan vien
CREATE PROCEDURE HienThiSoNhanVienTheoTenPhong
@tenPhong VARCHAR(100)
AS
BEGIN
SELECT Phong.MAPH, Phong.TENPH, COUNT(Nhanvien.MANV) AS
TongSoNhanVien
FROM Phong
LEFT JOIN Nhanvien ON Phong.MAPH = Nhanvien.MAPH
WHERE Phong.TENPH = @tenPhong
GROUP BY Phong.MAPH, Phong.TENPH;
END;
EXEC HienThiSoNhanVienTheoTenPhong @tenPhong = 'Phòng Kỹ Thuật';

--Tao thu tuc tinh thuc linh


CREATE PROCEDURE TinhThucLinh
@maNhanVien VARCHAR(20)
AS
BEGIN
SELECT Nhanvien.MANV, Nhanvien.TENNV, Nhanvien.LUONG,
Chucvu.HESOPC,
(Nhanvien.LUONG + Nhanvien.LUONG * Chucvu.HESOPC) AS
THUCLINH
FROM Nhanvien
JOIN Chucvu ON Nhanvien.MACV = Chucvu.MACV
WHERE Nhanvien.MANV = @maNhanVien;
END;
EXEC TinhThucLinh @maNhanVien = 'NV001';

-- Tao view luu thong tin nvien cua phong 'Tai chinh'
CREATE VIEW c4 AS
SELECT Nhanvien.MANV, Nhanvien.TENNV, Phong.TENPH
FROM Nhanvien
JOIN Phong ON Nhanvien.MAPH = Phong.MAPH
WHERE Phong.TENPH = 'Tài chính';
SELECT * FROM c4
-- Tao view l?u thong tin nhung nhan vien co chuc vu pho phong
create view c55
as
select manv, tennv, maph, tencv
from nhanvien, Chucvu
where nhanvien.MACV = Chucvu.MACV
and tencv = 'Pho phong'
SELECT * FROM c55
-- Tao view luu thong tin cua phong 'Xay dung'
CREATE VIEW c5 AS
SELECT nhanvien.MANV, Nhanvien.TENNV, Phong.TENPH
FROM Nhanvien
JOIN Phong ON Nhanvien.MAPH = Phong.MAPH
WHERE
Phong.TENPH = 'Xây d?ng'
SELECT * FROM c5

--Tao view luu thong tin phong co nhieu nvien nhat


create view c6 as
select phong.MAPH, tenph, count (nhanvien.manv) as Tongsonhanvien
from phong, nhanvien
where nhanvien.maph = phong.maph
group by phong.MAPH, tenph
having count (nhanvien.manv)>= all (select count (nhanvien.manv)
from nhanvien
group by maph)
SELECT * FROM c5

-- Tao view luu thong tin nvien co hsl cao nhat


create view c44
as
select manv, tennv, hsluong
from nhanvien
where hsluong =(select max (hsluong) from nhanvien)
SELECT * FROM c44

-- Tao trigger tinh tien luong cua nvien khi luong thay doi luong = hsluong
*1450000
create trigger c5 nhanvien
for update
as
update nhanvien
set luong = hsluong *145000

-- Tao trigger tinh tien thuc linh cho nhan vien khi hspc thay doi
-- thuclinh = luong + Luong * hesopc
create trigger c555 on chucvu
for update
as
update nhanvien
set thuclinh = luong + luong * (set hesopc
from chucvu
where chucvu, macv=
nhanvien.macv)
-- Tao trigger kiem tra hsl cua nhan vien chi nhan gia tri tu 2.34 den 9.4
-- khi them du lieu vao bang nhan vien, ngoai gtri bao loi
create trigger c54 on nhanvien
for insert
as
if ((select hsluong
from inserted) <2.34 or ((select hsluong
from inserted)> 9.0)
begin
print 'Nhap hsl tu 2.34 den 9.1'
rollback tran
end

CREATE DATABASE Quanlybanhang_Hotensv;


USE Quanlybanhang_Hotensv;

CREATE TABLE HANGHOA (


Mahang varchar(20) PRIMARY KEY,
Tenhang VARCHAR(20),
Donvitinh VARCHAR(20),
Soluong INT
)

CREATE TABLE HOADON (


Mahd varchar(20) PRIMARY KEY,
NgayHD DATE,
Tienban int ,
giamgia float,
thanhtoan int
)

CREATE TABLE CTHOADON (


Mahd varchar(20) FOREIGN KEY REFERENCES HOADON(Mahd),
Mahang varchar(20)FOREIGN KEY REFERENCES HANGHOA(Mahang)
PRIMARY KEY (Mahd, Mahang),
Soluong INT,
Dongia int
)

INSERT INTO HANGHOA


VALUES
('H01', 'bimbim', 'goi', 50),
('H02', 'mitom', 'goi', 30),
('H03', 'sua', 'tui', 70

INSERT INTO HOADON


VALUES
('HD01', '2024-11-01', 'Nguyen Van A', 500000),
('HD02', '2024-11-02', 'Tran Thi B', 300000),
('HD03', '2024-11-03', 'Le Van C', 700000)

INSERT INTO CTHOADON


VALUES
('HD01', 'MH01', 2, 250000),
('HD01', 'MH02', 1, 300000),
('HD02', 'MH03', 3, 100000),
('HD03', 'MH01', 1, 250000)

--Hien thi thong tin cac mat hang co so luong > 20 don vi tinh--
SELECT *
FROM HANGHOA
WHERE Soluong > 20

--Hien thi ma hoa don, so tien thanh toan cua hoa don HD01 --
SELECT mahd, thanhtoan
FROM HOADON
WHERE Mahd = 'HD01'

--Hien thi ma hang, so luong hang duoc ban boi HD01--


SELECT Mahang, Soluong
FROM CTHOADON
WHERE Mahd = 'HD01'

--Hien thi thong tin cac hoa don co tien thanh toan lon nhat--
SELECT *
FROM HOADON
WHERE thanhtoan = (SELECT MAX(Thanhtoan) FROM HOADON)

--Hien thi thong tin cac mat hang co don vi tinh la bo--
SELECT *
FROM HANGHOA
WHERE Donvitinh = 'Bo'

--Hien thi ma hoa don duoc lap trong nam 2020--


SELECT Mahd
FROM HOADON
WHERE YEAR(NgayHD) = 2020;

--Hien thi tien ban cua hoa don co ma la 'HD01'--


SELECT Tienban
FROM HOADON
WHERE Mahd = 'HD01'

--Hien thi thong tin mat hang duoc ban voi so luong it nhat,thong tin hien thi co:
ma hang, ten hang, tong so luong hang duoc ban--
select hanghoa.mahang, tenhang, sum (cthoadon.soluong) as Tongsohangduocban
from hanghoa, CTHOADON
where hanghoa.mahang = cthoadon.Mahang
group by hanghoa.Mahang, Tenhang
having sum (CTHOADON.Soluong)<= all (select sum (Soluong)
from CTHOADON
group by Mahang)
--Hien thi thong tin cac hoa don co tien thanh toan lon nhat
select *
from hoadon
where thanhtoan = (select max (thanhtoan)
from hoadon)
--Tao bo sung rang buoc default cho cot Ngayhd la ngay hien tai --
create default ngayhd
as getdate ()
exec sp_bindefault 'ngayhd','hoadon.ngayhd'

--Tao bo sung rang buoc default cho cot tienban la 0--


CREATE DEFAULT tienban
AS 0
EXEC sp_bindefault 'tienban_default', 'HOADON.Tienban'
--Tao bsung Rule cho cột Soluong của bảng Hanghoa nhận giá trị lớn hơn 0.
CREATE RULE soluong
AS
@Sl > 0
sp_bindrule 'soluong', 'HANGHOA.Soluong'

-- Tạo bsung ràng buộc Rule cho cột Donvitinh chỉ nhận các giá trị: Chiếc, Bộ
create rule dv
as
@dvt in ('Chiec', 'Bo')

sp_bindrule 'dv', 'hanghoa.donvitinh'

--Tao thu tuc hien thi thong tin tong so mat hang ban tren moi hoa don
--khi biet ma hoa don, thong tin hien thi co: mhd, nhd, tong so mat hang ban
create proc c1 @mahoadon varchar (20)
as
select hoadon.mahd, ngayhd, count (*) as Tongsomathang
from hoadon, cthoadon
where hoadon.mahd = @mahoadon
group by hoadon.mahd, ngayhd
exec c1'hd04'

--Tao thu tuc hien thi tong so hang duoc ban tren moi hoa don
-- thong tin hien thi co: mhd, ngayhd, tong so luong hang
create proc c2
as
select hoadon.mahd, ngayhd, sum(soluong) as Tongsoluong
from hoadon, cthoadon
where hoadon.mahd= cthoadon.mahd
group by hoadon.mahd, ngayhd
exec c2

--Tao thu tuc hien thi tien ban cua hoa don khi bt ma hoa don
--thong tin hien thi: mhd, ngayhd, tien ban
create proc c3 @mahoadon varchar (20)
as
select mahd, ngayhd, tienban
from hoadon
where madhd = @mahoadon
exec c3 'hd01'
--Tao thu tuc hien thi thong tin cac hoa don khi biet ngay
-- thong tin hien thi: mhd, ngayhd, tienban
create proc c4 @ngayhoadon date
as
select mahd, ngayhd, tienban
from hoadon
where ngayhd = @ngayhoadon
exec c4 '2/2/2024'

--tao thu tuc cap nhat lai tien ban


CREATE PROCEDURE C6
AS
BEGIN
UPDATE HOADON
SET Tienban = (
SELECT SUM(Soluong * Dongia)
FROM CTHOADON
WHERE CTHOADON.Mahd = HOADON.Mahd
GROUP BY Mahd
)
WHERE Mahd IN (SELECT DISTINCT Mahd FROM CTHOADON)
-- Tao trigger soluongton trong hang hoa phai lon hon 0
--moi khi them mot hang moi vao co so, khong dung phai thong bao
create trigger trig on hanghoa
for insert
as
if (select soluongton
from inserted)<=0
begin
print 'Nhap so luong ton phai >0'
rollback tran
end
--tao trigger ktra sluong trong bang cthoadon lon hon 0 moi khi them mot hang
moi
create trigger trig2 on cthoadon
for insert
as
if (select soluong
from inserted) <=0
begin
print 'Nhap so luong ton phai >0'
rollback tran
end

--tao trigger cap nhat lai tien ban cua moi hoadon khi xoa thong tin
-- mat hang duoc ban trg bang cthoadon
--tienban= sum (soluong * dongia)
create trigger c3 on cthoadon
for delete
as
update hoadon
set tienban = (select sum (soluong * dongia)
from cthoadon
where cthoadon.mahd = hoadon.mahd
group by cthoadon.mahd)
--tao trigger cap nhat lai tien thanh toan cua moi hoa don khi sua thong tin giam
gia
-- thanhtoan = tienban - (tienban*giamgia)
create trigger trig3 on hoadon
for update
as
update hoadon
set thanhtoan = tienban - (tienban * giamgia)
--tao trigger cap nhat so luong ton trong hang hoa moi khi sua mat hang duoc ban
trong cthoadon
--biet soluongton = soluongton - soluong
create trigger trig4 on cthoadon
for update
as
update hanghoa
set hanghoa.soluong = hanghoa.soluong - (select inserted soluong
from inserted ) + (select deleted.soluong

from deleted)
where mahang = (select mahang from inserted)

--tao trigger cap nhat so luong ton trong hang hoa moi khi them mat hang duoc ban
trong cthoadon
--biet soluongton = soluongton - soluong
create trigger trig4 on cthoadon
for update
as
update hanghoa
set hanghoa.soluong = hanghoa.soluong - (select inserted soluong from
inserted)

where mahang = (select mahang from inserted)

--Tao view hien thi thong tin mat hang duoc khach mua voi sluong nhieu nhat
create view c5
as
select hanghoa.mahang, tenhang, sum (cthoadon.soluong)as
Tongsoluongban
from hanghoa, cthoadon
where hanghoa.mahang = cthoadon.mahang
group by hanghoa.mahang, tenhang
having sum (cthoadon.soluong)>= all (select sum (cthoadon.soluong)
from
cthoadon
group by
mahang)
select * from c5

--backup cơ sở dữ liệu sang ổ đĩa khác--


BACKUP DATABASE [database_name] TO DISK = 'E:\database_backup.bak'

-- Tạo cơ sở dữ liệu QUANLYDULICH


CREATE DATABASE QUANLYDULICH;
USE QUANLYDULICH;

-- Tạo bảng DIADIEM


CREATE TABLE DIADIEM (
MADD varCHAR(20) PRIMARY KEY,
TENDD VARCHAR(20),
TP VARCHAR(20)
)

-- Tạo bảng CHUYENDI


CREATE TABLE CHUYENDI (
MACD varCHAR(20) PRIMARY KEY,
TENCD VARCHAR(20) ,
NGKH DATE ,
NGKT DATE ,
KHDK INT
);
-- Tạo bảng CTIETCD
CREATE TABLE CTIETCD (
MACD CHAR(20)FOREIGN KEy REFERENCES CHUYENDI(MACD),
MADD CHAR(10)FOREIGN KEY REFERENCES DIADIEM(MADD),
SNLUU INT ,
PRIMARY KEY (MACD, MADD)
)

-- Nhập dữ liệu mẫu cho bảng DIADIEM


INSERT INTO DIADIEM (MADD, TENDD, TP) VALUES
('DD001', 'Vịnh Hạ Long', 'Quảng Ninh'),
('DD002', 'Phố cổ Hội An', 'Quảng Nam'),
('DD003', 'Thác Bản Giốc', 'Cao Bằng');

-- Nhập dữ liệu mẫu cho bảng CHUYENDI


INSERT INTO CHUYENDI (MACD, TENCD, NGKH, NGKT, KHDK) VALUES
('CD001', 'Du lịch Hạ Long', '2024-11-10', '2024-11-15', 20),
('CD002', 'Tham quan Hội An', '2024-12-01', '2024-12-05', 15),
('CD003', 'Khám phá Thác Bản Giốc', '2025-01-05', '2025-01-10', 10);

-- Nhập dữ liệu mẫu cho bảng CTIETCD


INSERT INTO CTIETCD (MACD, MADD, SNLUU) VALUES
('CD001', 'DD001', 3),
('CD002', 'DD002', 2),
('CD003', 'DD003', 4);
--Hien thi cac dia diem du lich cua chuyen di co ma CD02
SELECT DIADIEM.TENDD, DIADIEM.TP
FROM DIADIEM
JOIN CTIETCD ON DIADIEM.MADD = CTIETCD.MADD
JOIN CHUYENDI ON CTIETCD.MACD = CHUYENDI.MACD
WHERE CHUYENDI.MACD = 'CD002';

--Hien thi ma chuyen di, ma dia diem voi so ngay luu lon nhat
SELECT MACD, MADD, SNLUU
FROM CTIETCD
WHERE SNLUU = (SELECT MAX(SNLUU) FROM CTIETCD);

--Hien thi thong tin chuyen di co ngay khoi hang la 2020/09/02


SELECT *
FROM CHUYENDI
WHERE NGKH = '2020-09-02';

--Hien thi thong tin cac chuyen di co so khach du kien it nhat


SELECT MACD, TENCD
FROM CHUYENDI
WHERE KHDK = (SELECT MIN(KHDK) FROM CHUYENDI);

--Hien thi thong tin co ten dia diem la Hanoi


SELECT MADD, TENDD
FROM DIADIEM
WHERE TP = 'Hà Nội';

--Hien thi so ngay luu lon nhat, nho nhat chuyen di CD2
SELECT MAX(SNLUU) AS Max_SNLUU, MIN(SNLUU) AS Min_SNLUU
FROM CTIETCD
WHERE MACD = 'CD002';

--Tao bo sung rang buoc Defaul cho cot SNLUU bang 0


create defaul snluu
as 0
exec sp_bindsp_bindefault 'snluu', 'CTIETHD.SNLUU'

--Tao bo sung rang buoc Defaul cho cot NGKH bang ngay hien tai
create defaul ngkh
as
getdate ()
exec sp_bindefault 'ngkh', 'CHUYENDI.NGKH'
--Tao bo sung rang Rule cho cot KHDK lon hon 0
create rule khdk
as
@khdk >0
EXEC sp_bindrule 'KHDK', 'CHUYENDI.KHDK'

--Tao bo sung rang buoc Rule cho cot NGKH, NGKT >= ngày hien tai
CREATE RULE c3
AS
@value >= GETDATE()
EXEC sp_bindrule 'c3', 'CHUYENDI.NGKH'
EXEC sp_bindrule 'c3', 'CHUYENDI.NGKT'

--Tao view lưu thong tin chuyen di co so ngay luu lai lon nhat
CREATE VIEW c5 AS
SELECT CD.MACD, CD.TENCD, SUM(CT.SNLUU) AS TongSoNgayLuu
FROM CHUYENDI CD
JOIN CTIETCD CT ON CD.MACD = CT.MACD
GROUP BY CD.MACD, CD.TENCD
HAVING SUM(CT.SNLUU) >= ALL (SELECT SUM(SNLUU) FROM
CTIETCD
GROUP BY MACD)
SELECT * FROM c5

--Tao view luu thong tin cac chuyen di co so khach du kien nhieu nhat
CREATE VIEW c7 AS
SELECT MACD, TENCD, KHDK
FROM CHUYENDI
WHERE KHDK = (SELECT MAX(KHDK) FROM CHUYENDI);
SELECT * FROM c7

--Tao view hien thi thong tin chuyen di va so luong dia diem cua cac chuyen di
CREATE VIEW c44 AS
SELECT CD.TENCD, COUNT(CT.MADD) AS SoLuongDiaDiem
FROM CHUYENDI CD
JOIN CTIETCD CT ON CD.MACD = CT.MACD
GROUP BY CD.TENCD
SELECT * FROM c44

--Tao view hien thi thong tin chuyen di co ngay khoi hang 2020
CREATE VIEW c55 AS
SELECT MACD, TENCD
FROM CHUYENDI
WHERE YEAR(NGKH) = 2020
SELECT * FROM c55

--Tao thu tuc hien thi khi biet thong tin chuyen di: mcd,tcd, tong so dia diem
CREATE PROC pro1 @MaChuyenDi varCHAR(20)
AS
SELECT CD.MACD, CD.TENCD, COUNT(CT.MADD) AS TongSoDiaDiem
From CHUYENDI CD
JOIN CTIETCD CT ON CD.MACD = CT.MACD
WHERE CD.MACD = @MaChuyenDi
GROUP BY CD.MACD, CD.TENCD

--Tao thu tuc hien thi thong tin co tong so ngay luu lon hon 10
CREATE PROCEDURE c4
AS
SELECT CD.MACD, CD.TENCD, SUM(CT.SNLUU) AS TongSoNgayLuu
FROM CHUYENDI CD
JOIN CTIETCD CT ON CD.MACD = CT.MACD
GROUP BY CD.MACD, CD.TENCD
HAVING SUM(CT.SNLUU) > 10

--Tao thu tuc khi biet ma dia diem--


CREATE PROCpro11 @MaDiaDiem varCHAR(20)
AS
SELECT MADD, TENDD, TP
FROM DIADIEM
WHERE MADD = @MaDiaDiem

--Tao trigger thuc hien ktra ngay khoi hanh va ngay ket thuc khi them/sua
--lon hon hoac bang ngay hien tai
CREATE TRIGGER ktra ON CHUYENDI
FOR INSERT, UPDATE
AS
BEGIN
IF EXISTS (
SELECT *
FROM CHUYENDI
WHERE NGKH < GETDATE()
)
BEGIN
PRINT 'Ngày khởi hành phải lớn hơn hoặc bằng ngày hiện tại';
ROLLBACK TRANSACTION;
RETURN;
END

IF EXISTS (
SELECT *
FROM CHUYENDI
WHERE NGKT < GETDATE()
)
BEGIN
PRINT 'Ngày kết thúc phải lớn hơn hoặc bằng ngày hiện tại';
ROLLBACK TRANSACTION;
RETURN;
END

IF EXISTS (
SELECT *
FROM CHUYENDI
WHERE NGKH > NGKT
)
BEGIN
PRINT 'Ngày khởi hành phải nhỏ hơn hoặc bằng ngày kết thúc';
ROLLBACK TRANSACTION;
RETURN;
END
END
--Viet trigger ktra SNLUU khi them/sua phai >=1
CREATE TRIGGER CheckSoNgayLuu
ON CTIETCD
FOR INSERT, UPDATE
AS
BEGIN
-- Kiểm tra điều kiện cho INSERT
IF EXISTS (
SELECT *
FROM CTIETCD
WHERE SNLUU < 1
)
BEGIN
PRINT 'Số ngày lưu lại phải lớn hơn hoặc bằng 1';
ROLLBACK TRANSACTION;
RETURN;
END

-- Kiểm tra điều kiện cho UPDATE


IF EXISTS (
SELECT *
FROM CTIETCD
WHERE SNLUU < 1
)
BEGIN
PRINT 'Số ngày lưu lại phải lớn hơn hoặc bằng 1';
ROLLBACK TRANSACTION;
RETURN;
END
END;

--Viet trigger thuc hien KHDK khi them/sua >=1


CREATE TRIGGER CheckSoKhachDangKy
ON CHUYENDI
FOR INSERT, UPDATE
AS
BEGIN
IF EXISTS (
SELECT *
FROM CHUYENDI
WHERE KHDK < 1
)
BEGIN
PRINT 'Số khách đăng ký phải lớn hơn hoặc bằng 1';
ROLLBACK TRANSACTION;
RETURN;
END

IF EXISTS (
SELECT *
FROM CHUYENDI
WHERE KHDK < 1
)
BEGIN
PRINT 'Số khách đăng ký phải lớn hơn hoặc bằng 1';
ROLLBACK TRANSACTION;
RETURN;
END
END;

--Tao trigger ktra ngay khoi hanh < ngay ket thuc khi them du lieu
CREATE TRIGGER CheckNgayKhoiHanh
ON CHUYENDI
FOR INSERT
AS
BEGIN
IF EXISTS (
SELECT *
FROM CHUYENDI
WHERE NGKH >= NGKT
)
BEGIN
PRINT 'Ngày khởi hành phải nhỏ hơn ngày kết thúc';
ROLLBACK TRANSACTION;
RETURN;
END
END;

BACKUP DATABASE [database_name] TO DISK = 'E:\database_backup.bak'


CREATE DATABASE QLThucTap_HoVaTenSV;
USE QLThucTap_HoVaTenSV;

CREATE TABLE SinhVien (


MaSV VARCHAR(10) PRIMARY KEY,
HoTenSV VARCHAR(100),
Lop VARCHAR(50)
);

CREATE TABLE GiangVien (


MaGV VARCHAR(10) PRIMARY KEY,
HoTenGV VARCHAR(100)
);

CREATE TABLE HuongDan (


MaGV VARCHAR(10)FOREIGN KEY REFERENCES GiangVien(MaGV),
MaSV VARCHAR(10) FOREIGN KEY REFERENCES SinhVien(MaSV),
TenDT VARCHAR(100),
NoiThucTap VARCHAR(100),
PRIMARY KEY (MaGV, MaSV)
);
INSERT INTO SinhVien (MaSV, HoTenSV, Lop) VALUES
('SV01', 'Vuong Tuan Anh', 'D14CNPM1'),
('SV02', 'Nguyen Van Sang', 'D14CNPM3'),
('SV03', 'Nguyen Thu Huyen', 'D14HTTMĐT1'),
('SV04', 'Phan Dinh Anh', 'D14TTNT&TGMT'),
('SV05', 'Tran Bao Ngoc', 'D14QT&ANM');

INSERT INTO GiangVien (MaGV, HoTenGV) VALUES


('GV01', 'Nguyen Quynh Anh'),
('GV02', 'Bui Khanh Linh'),
('GV03', 'Nguyen Khanh Tung'),
('GV04', 'Phuong Van Canh'),
('GV05', 'Nguyen Hong Khanh');

INSERT INTO HuongDan (MaGV, MaSV, TenDT, NoiThucTap) VALUES


('GV03', 'SV05', 'Xay dung he thong canh bao email spam', 'Bkav'),
('GV05', 'SV02', 'Xay dung he thong tu van khach hang', 'FSI'),
('GV04', 'SV01', 'Xay dung App food', 'FPT Software'),
('GV02', 'SV04', 'Khai pha quan diem nguoi dung san pham', 'SamSung'),
('GV01', 'SV03', 'Xay dung he thong AI ho tro ban hang online', 'Sapo');

-- Thong tin danh sach sv


SELECT SV.HoTenSV, SV.Lop, GV.HoTenGV, HD.TenDT, HD.NoiThucTap
FROM HuongDan HD
JOIN SinhVien SV ON HD.MaSV = SV.MaSV
JOIN GiangVien GV ON HD.MaGV = GV.MaGV;

--Thong tin sinh vien ma gv Canh huong dan


SELECT SV.HoTenSV
FROM SinhVien SV
JOIN HuongDan HD ON SV.MaSV = HD.MaSV
JOIN GiangVien GV ON HD.MaGV = GV.MaGV
WHERE GV.HoTenGV = 'Phương Văn Cảnh';

--Thong tin sv thuc tap tai CMNC


SELECT SV.HoTenSV, HD.TenDT, GV.HoTenGV
FROM SinhVien SV
JOIN HuongDan HD ON SV.MaSV = HD.MaSV
JOIN GiangVien GV ON HD.MaGV = GV.MaGV
WHERE HD.NoiThucTap = 'CMC';

--Hien thi giang vien huong dan sv tai Sam Sung


SELECT GV.HoTenGV
FROM GiangVien GV
JOIN HuongDan HD ON GV.MaGV = HD.MaGV
WHERE HD.NoiThucTap = 'Samsung'
GROUP BY GV.HoTenGV;

--Hien thi sinh vien va giang vien co de tai


SELECT SV.HoTenSV, GV.HoTenGV
FROM SinhVien SV
JOIN HuongDan HD ON SV.MaSV = HD.MaSV
JOIN GiangVien GV ON HD.MaGV = GV.MaGV
WHERE HD.TenDT = 'Xây dựng hệ thống AI hỗ trợ bán hàng online';

--So svien lop D14CNPM5 di thuc tap


SELECT COUNT(*)
FROM SinhVien
WHERE Lop = 'D14CNPM5' AND MaSV IN (SELECT MaSV FROM
HuongDan);

--Default cot Noi thuc tap la 'Chua co noi thu tap'


CREATE DEFAULT ntt
AS
'Chua co noi thuc tap'
EXEC sp_bindefault 'ntt', 'huongdan.noithuctap';

--Viet thu tuc nhap ma gv


CREATE PROCEDURE HienThiSinhVienTheoGiangVien
@MaGV VARCHAR(10) -- Tham số đầu vào: mã giảng viên
AS
BEGIN

SELECT SV.HoTenSV
FROM SinhVien SV
JOIN HuongDan HD ON SV.MaSV = HD.MaSV
WHERE HD.MaGV = @MaGV;
END;
EXEC HienThiSinhVienTheoGiangVien @MaGV = 'GV03';

--Thu tuc nhap ma sv


CREATE PROCEDURE HienThiGiangVienTheoSinhVien
@MaSV VARCHAR(10) -- Input parameter: student ID
AS
BEGIN
SELECT GV.HoTenGV
FROM GiangVien GV
JOIN HuongDan HD ON GV.MaGV = HD.MaGV
JOIN SinhVien SV ON HD.MaSV = SV.MaSV
WHERE SV.MaSV = @MaSV;
END;
EXEC HienThiGiangVienTheoSinhVien @MaSV = 'SV01';

--Tao view hien thi Ho ten sv, gv


CREATE VIEW vw_HienThi_SV AS
SELECT SV.HoTenSV AS StudentName, GV.HoTenGV AS InstructorName
FROM SinhVien SV
JOIN HuongDan HD ON SV.MaSV = HD.MaSV
JOIN GiangVien GV ON HD.MaGV = GV.MaGV;
select * from vw_HienThi_SV

--Tao view hien thi ho ten gv, svinh giang vien huong dan
CREATE VIEW vw_HienThi_GV AS
SELECT GV.HoTenGV AS InstructorName, SV.HoTenSV AS StudentName
FROM GiangVien GV
JOIN HuongDan HD ON GV.MaGV = HD.MaGV
JOIN SinhVien SV ON HD.MaSV = SV.MaSV
WHERE GV.MaGV = 'GV01';
SELECT * FROM vw_HienThi_GV;
CREATE DATABASE QUANLYKHACHSAN;
USE QUANLYKHACHSAN;

CREATE TABLE PHONG (


MAPH VARCHAR(10) PRIMARY KEY,
Loaiph VARCHAR(100),
DT varchar (20),
GIAPHONG INT
);

CREATE TABLE KHACHHANG (


MAKH VARCHAR(10) PRIMARY KEY,
TENKH VARCHAR(100),
dienthoai varchar (30),
DIACHI VARCHAR(255)
);

CREATE TABLE THUEPHONG (


MAHD VARCHAR(10) PRIMARY KEY,
MAKH VARCHAR(10)FOREIGN KEY REFERENCES
KHACHHANG(MAKH),
NGBD DATE
);

create table ctthuephong


MAHD VARCHAR(10) FOREIGN KEY REFERENCES Thuephong
(mahd),
MAPH VARCHAR(10)FOREIGN KEY REFERENCES Phong (maph),
primary key (mahd, maph),
ngkt date,
thanhtien int)

INSERT INTO PHONG (MAPH, Loaiph, DT, GIAPHONG)


VALUES
('P001', 'Single', '20m2', 500000),
('P002', 'Double', '30m2', 800000),
('P003', 'Suite', '50m2', 1200000);

INSERT INTO KHACHHANG (MAKH, TENKH, dienthoai, DIACHI)


VALUES
('KH001', 'Nguyen Thi Khanh Linh', '0123456789', 'Hanoi, Vietnam'),
('KH002', 'Le Minh Tu', '0987654321', 'HCM, Vietnam'),
('KH003', 'Tran Hoang Son', '0912345678', 'Da Nang, Vietnam');
INSERT INTO THUEPHONG (MAHD, MAKH, NGBD)
VALUES
('HD001', 'KH001', '2024-11-01'),
('HD002', 'KH002', '2024-11-05'),
('HD003', 'KH003', '2024-11-07');

INSERT INTO CTTHUEPHONG (MAHD, MAPH, NGKT, THANHTIEN)


VALUES
('HD001', 'P001', '2024-11-03', 1500000),
('HD001', 'P002', '2024-11-04', 1600000),
('HD002', 'P003', '2024-11-06', 2400000),
('HD003', 'P001', '2024-11-10', 1000000);

--Hien thi ten khach hang thue phong trong hop dong co ma HD01
SELECT KHACHHANG.TENKH
FROM KHACHHANG
JOIN THUEPHONG ON KHACHHANG.MAKH = THUEPHONG.MAKH
JOIN CTTHUEPHONG ON THUEPHONG.MAHD = CTTHUEPHONG.MAHD
WHERE THUEPHONG.MAHD = 'HD001';

--Hien thi thong tin khach hang chua thue bao gio
SELECT MAKH, TENKH, DIACHI
FROM KHACHHANG
WHERE MAKH NOT IN (
SELECT MAKH
FROM THUEPHONG
);

--Hien thi thong tin cac phong chua bao gio duoc thue
SELECT PHONG.MAPH, PHONG.LOAIPH, PHONG.DT, PHONG.GIAPHONG
FROM PHONG
WHERE PHONG.MAPH NOT IN (
SELECT MAPH
FROM CTTHUEPHONG
);
--Hien thi thong tin da thue phong HD01
SELECT KHACHHANG.MAKH, KHACHHANG.TENKH,
KHACHHANG.DIACHI
FROM KHACHHANG
JOIN THUEPHONG ON KHACHHANG.MAKH = THUEPHONG.MAKH
JOIN CTTHUEPHONG ON THUEPHONG.MAHD = CTTHUEPHONG.MAHD
WHERE CTTHUEPHONG.MAPH = 'HD01';

--Hien thi cac phong duoc khach KH01 thue


SELECT PHONG.MAPH, PHONG.LOAIPH, PHONG.DT, PHONG.GIAPHONG
FROM PHONG
JOIN CTTHUEPHONG ON PHONG.MAPH = CTTHUEPHONG.MAPH
JOIN THUEPHONG ON CTTHUEPHONG.MAHD = THUEPHONG.MAHD
WHERE THUEPHONG.MAKH = 'KH01';

--Hien thi cac phong thue NGBD 2020-09-02


SELECT PHONG.MAPH, PHONG.LOAIPH, PHONG.DT, PHONG.GIAPHONG
FROM PHONG
JOIN CTTHUEPHONG ON PHONG.MAPH = CTTHUEPHONG.MAPH
JOIN THUEPHONG ON CTTHUEPHONG.MAHD = THUEPHONG.MAHD
WHERE THUEPHONG.NGBD = '2020-09-02';

--Hien thi cac phong thue 7 ngay


SELECT PHONG.MAPH, PHONG.LOAIPH, PHONG.DT
FROM PHONG
JOIN CTTHUEPHONG ON PHONG.MAPH = CTTHUEPHONG.MAPH
WHERE DATEDIFF(DAY, CTTHUEPHONG.NGBD, CTTHUEPHONG.NGKT)
= 7;

--Hien thi ten khach, so lan thu voi so phong nhieu nhat
SELECT KHACHHANG.TENKH, COUNT(THUEPHONG.MAHD) AS
SoLanThue
FROM KHACHHANG
JOIN THUEPHONG ON KHACHHANG.MAKH = THUEPHONG.MAKH
GROUP BY KHACHHANG.MAKH, KHACHHANG.TENKH
HAVING COUNT(THUEPHONG.MAHD) >= (
SELECT MAX(SoLanThue)
FROM (
SELECT COUNT(THUEPHONG.MAHD) AS SoLanThue
FROM THUEPHONG
GROUP BY THUEPHONG.MAKH
) AS SubQuery
);
-- Phong duoc thue nhieu nhat
SELECT CTTHUEPHONG.MAPH, COUNT(CTTHUEPHONG.MAHD) AS
SoLanThue
FROM CTTHUEPHONG
GROUP BY CTTHUEPHONG.MAPH
HAVING COUNT(CTTHUEPHONG.MAHD) = (
SELECT MAX(SoLanThue)
FROM (
SELECT COUNT(CTTHUEPHONG.MAHD) AS SoLanThue
FROM CTTHUEPHONG
GROUP BY CTTHUEPHONG.MAPH
) AS SubQuery
);
--Khach hang Mai Hoa da thue bao phong
SELECT khachhang.tenkh, COUNT( CTTHUEPHONG.MAPH) AS
SoPhongThue
FROM KHACHHANG
JOIN THUEPHONG ON KHACHHANG.MAKH = THUEPHONG.MAKH
JOIN CTTHUEPHONG ON THUEPHONG.MAHD = CTTHUEPHONG.MAHD
group by khachhang.tenkh
having khachhang.tenkh = 'Mai Hoa'

--Hien thi gia phong cao nhat


select maph, loaiph, giaphong
from phong
where giaphong = (select max (giaphong) from phong)

--Tao bot sung rang buoc Defaul cho cot Thanh Tien = 0
CREATE DEFAULT DF_ThanhTien
as 0;
EXEC sp_bindefault 'DF_ThanhTien', 'CTTHUEPHONG.ThanhTien';

-- Tao rule cho cot Giaphong >=0


CREATE RULE Rule_GIAPHONG_Positive
AS
CHECK (GIAPHONG >= 0);
EXEC sp_bindrule 'Rule_GIAPHONG_Positive',
'CTTHUEPHONG.GIAPHONG';

-- Tao bo sung Defaul Diachi 'Chua xac dinh'


CREATE DEFAULT DF_DIACHI AS 'CHUA XAC DINH';
EXEC sp_bindefault 'DF_DIACHI', 'KHACHHANG.DIACHI';

--Tao thu tuc hien thi thong tin Khach hang khi biet ma phong va ngaybd
CREATE PROCEDURE GetCustomerInfoByRoomAndDate
@MAPH VARCHAR(10),
@NGBD DATE
AS
BEGIN
SELECT KH.MAKH, KH.TENKH, KH.DIACHI, KH.DIENTHOAI
FROM KHACHHANG KH
JOIN THUEPHONG TP ON KH.MAKH = TP.MAKH
JOIN CTTHUEPHONG CTP ON TP.MAHD = CTP.MAHD
WHERE CTP.MAPH = @MAPH
AND TP.NGBD = @NGBD;
END;
EXEC GetCustomerInfoByRoomAndDate 'PH01', '2020-09-02';

--Tao thu tuc thong tin Phong khi biet ma phong


CREATE PROCEDURE GetPhongInfoByMaph
@MAPH VARCHAR(10)
AS
BEGIN
SELECT MAPH, TENPH, DT, GIAPHONG
FROM PHONG
WHERE MAPH = @MAPH;
END;
EXEC GetPhongInfoByMaph @MAPH = 'PH01';

--Tao thu tuc xoa phong chua thue bao gio


CREATE PROCEDURE DeletePhongChuaThue
AS
BEGIN
DELETE FROM PHONG
WHERE MAPH NOT IN (SELECT DISTINCT MAPH FROM
CTTHUEPHONG);
ENDEXEC DeletePhongChuaThue;

--Tao thu tuc hien thi phong co nhieu khach thue nhat
CREATE PROCEDURE GetMostRentedRooms
AS
SELECT P.MAPH, P.Loaiph, P.DT, P.GIAPHONG, COUNT(*) AS SoLanThue
FROM CTTHUEPHONG CTP
JOIN PHONG P ON CTP.MAPH = P.MAPH
GROUP BY P.MAPH, P.Loaiph, P.DT, P.GIAPHONG
HAVING COUNT(*) = (SELECT MAX(SoLanThue) FROM (
SELECT COUNT(*) AS SoLanThue
FROM CTTHUEPHONG
GROUP BY MAPH
) AS RoomRentCounts)
ORDER BY SoLanThue DESC;
END;
EXEC GetMostRentedRooms;

--Tao thu tuc hien thi phong co gia thap nhat


create proc c6
as
begin
select loaiph, giaphong
from Phong
where giaphong = (select min (GIAPHONG) from Phong)
end
exec c5
--tao view hien thi khach hang co dia chi 'HNoi'
CREATE VIEW View_KhachHang_HaNoi AS
SELECT MAKH, TENKH
FROM KHACHHANG
WHERE DIACHI = 'HA NOI';
SELECT * FROM View_KhachHang_HaNoi

--tao view hien thi ten khach hang, so luong phong ma KH thuê
CREATE VIEW View_KhachHang_SoLuongPhong AS
SELECT
KH.TENKH,
COUNT(CP.MAPH) AS SoLuongPhong
FROM
KHACHHANG KH
JOIN
THUEPHONG TH ON KH.MAKH = TH.MAKH
JOIN
CTTHUEPHONG CP ON TH.MAHD = CP.MAHD
GROUP BY
KH.TENKH;
SELECT * FROM View_KhachHang_SoLuongPhong;

--tao view hien thi phong co gia lon nhat


CREATE VIEW View_Phong_GiaMax
AS
SELECT MAPH, TENPH, DT, GIAPHONG
FROM PHONG
WHERE GIAPHONG = (SELECT MAX(GIAPHONG) FROM PHONG)
SELECT * FROM View_Phong_GiaMax;

--Tao trigger ktra dien tich trong phong phai lon hon 0 khi them thong tin44
create trigger c5 on phong
for insert
as
if (select dt from inserted)<=0
begin
print 'Nhap dien tich > 0'
rollback tran
end
-- tao trigger ktra NGBD và NGKT khi them/sua lon hon hoac bang ngay HT
CREATE TRIGGER trg_CheckDate
ON THUEPHONG
FOR INSERT, UPDATE
AS
BEGIN
-- Kiểm tra nếu ngày bắt đầu hoặc ngày kết thúc nhỏ hơn ngày hiện tại
IF EXISTS (
SELECT *
FROM inserted
WHERE NGBD < GETDATE() OR NGKT < GETDATE()
)
BEGIN
-- Thông báo lỗi và hoàn tác giao dịch nếu không thỏa mãn điều kiện
PRINT 'Ngày bắt đầu và ngày kết thúc phải lớn hơn hoặc bằng ngày hiện tại!';
ROLLBACK TRANSACTION;
END
END;

--Tao trigger cap nhat Thanh Tien khi them du lieu bang Thuephonh
CREATE TRIGGER UpdateThanhTien
ON THUEPHONG
FOR INSERT
AS
BEGIN
UPDATE THUEPHONG
SET THANHTIEN = (SELECT GIAPHONG * SONG
FROM CTTHUEPHONG
WHERE MAHD = (SELECT MAHD FROM inserted))
WHERE MAHD = (SELECT MAHD FROM inserted);
END;

--backup cơ sở dữ liệu sang ổ đĩa khác--


BACKUP DATABASE [database_name] TO DISK = 'E:\database_backup.bak'
-- T?o c? s? d? li?u
CREATE DATABASE QLKH_MaSinhVien;

-- Chuy?n sang c? s? d? li?u v?a t?o


USE QLKH_MaSinhVien;

-- T?o b?ng GiangVien


CREATE TABLE GiangVien (
GV VARCHAR(5) PRIMARY KEY,
HoTen VARCHAR(100),
DiaChi VARCHAR(100),
NgaySinh DATE
);

-- Nh?p d? li?u vào b?ng GiangVien


INSERT INTO GiangVien (GV, HoTen, DiaChi, NgaySinh) VALUES
('GV01', 'Nguy?n H?ng Khánh', 'M? ?ình, Hà N?i', '1982-10-10'),
('GV02', 'Ph??ng V?n C?nh', 'Nam T? Liêm, Hà N?i', '1986-11-03'),
('GV03', 'Ph?m Quang Huy', '??ng ?a, Hà N?i', '1990-06-04'),
('GV04', 'Ngô Hoàng Huy', 'Tây H?, Hà N?i', '1993-12-10'),
('GV05', 'Lê Trang Linh', 'C?u Gi?y, Hà N?i', '1986-10-10');

-- T?o b?ng DeTai


CREATE TABLE DeTai (
DT VARCHAR(5) PRIMARY KEY,
TenDT VARCHAR(100),
Cap VARCHAR(50),
KinhPhi INT
);

-- Nh?p d? li?u vào b?ng DeTai


INSERT INTO DeTai (DT, TenDT, Cap, KinhPhi) VALUES
('DT01', 'Phát hi?n tri th?c', 'Nhà n??c', 700),
('DT02', 'Tính toán l??i', 'B?', 300),
('DT03', 'An toàn thông tin', 'B?', 270),
('DT04', 'Nh?n d?ng khuôn m?t', 'EPUface', 30);

-- T?o b?ng ThamGia


CREATE TABLE ThamGia (
GV VARCHAR(5),
DT VARCHAR(5),
SoGio INT,
PRIMARY KEY (GV, DT),
FOREIGN KEY (GV) REFERENCES GiangVien(GV),
FOREIGN KEY (DT) REFERENCES DeTai(DT)
);

-- Nh?p d? li?u vào b?ng ThamGia


INSERT INTO ThamGia (GV, DT, SoGio) VALUES
('GV01', 'DT01', 100),
('GV01', 'DT02', 80),
('GV01', 'DT03', 80),
('GV02', 'DT01', 120),
('GV02', 'DT03', 140),
('GV03', 'DT03', 150),
('GV04', 'DT04', 180);

-- Them cot thanh tien cho bang Tham gia


ALTER TABLE ThamGia
ADD ThanhTien int

-- Cap nhat lai gv


UPDATE GiangVien
SET DiaChi = 'C?u Gi?y, Hà N?i'
WHERE HoTen = 'Nguy?n H?ng Khánh';

-- Them thanh vien


INSERT INTO GiangVien (GV, HoTen, DiaChi, NgaySinh)
VALUES ('GV06', 'Nguy?n V?n Hi?u', '??ng ?a, Hà N?i', '1995-09-08');

-- Dua ra thong tin giang vien co dia chi Cau Giay, sx theo th? t? ten giam dan
SELECT GV, HoTen, DiaChi, NgaySinh
FROM GiangVien
WHERE DiaChi LIKE '%C?u Gi?y%'
ORDER BY HoTen DESC

-- Dua ra dsach tham gia vao de tai'Tinh toan luoi'


SELECT GiangVien.HoTen, GiangVien.DiaChi, GiangVien.NgaySinh
FROM GiangVien
JOIN ThamGia ON GiangVien.GV = ThamGia.GV
JOIN DeTai ON ThamGia.DT = DeTai.DT
WHERE DeTai.TenDT = 'Tính toán l??i';

--Dua ra dsach gom ho ten, dia chi, ngay sinh tgia ?e tai 'Phat hien tri thuc'/ 'Nhan
dien khuon mat EPU'
SELECT GiangVien.HoTen, GiangVien.DiaChi, GiangVien.NgaySinh
FROM GiangVien
JOIN ThamGia ON GiangVien.GV = ThamGia.GV
JOIN DeTai ON ThamGia.DT = DeTai.DT
WHERE DeTai.TenDT IN ('Phát hi?n tri th?c', 'Nh?n di?n khuôn m?t EPU');

-- Cho bt giang vien tham gia it nhat 2 de tai


SELECT GiangVien.HoTen, GiangVien.DiaChi, GiangVien.NgaySinh
FROM GiangVien
JOIN ThamGia ON GiangVien.GV = ThamGia.GV
GROUP BY GiangVien.GV, GiangVien.HoTen, GiangVien.DiaChi,
GiangVien.NgaySinh
HAVING COUNT(ThamGia.DT) >= 2;

-- Dua ra ma giang vien, ten gv, tong so tgia nghien cuu khoc hoc
SELECT GiangVien.GV, GiangVien.HoTen, SUM(ThamGia.SoGio) AS
TongSoGio
FROM GiangVien
JOIN ThamGia ON GiangVien.GV = ThamGia.GV
GROUP BY GiangVien.GV, GiangVien.HoTen;

-- Cho biet giang vien tham gia nhieu de tai nhat


SELECT GiangVien.HoTen
FROM GiangVien
JOIN ThamGia ON GiangVien.GV = ThamGia.GV
GROUP BY GiangVien.GV, GiangVien.HoTen
HAVING COUNT(ThamGia.DT) >= ALL (
SELECT COUNT(ThamGia.DT)
FROM ThamGia
GROUP BY ThamGia.GV
)
-- Cho bt ten nhung gvien sinh truoc nam 1989 va tgia 'An toan thong tin'
SELECT GiangVien.HoTen
FROM GiangVien
JOIN ThamGia ON GiangVien.GV = ThamGia.GV
JOIN DeTai ON ThamGia.DT = DeTai.DT
WHERE GiangVien.NgaySinh < '1989-01-01'
AND DeTai.TenDT = 'An toàn thông tin';

--De tai nao it kinh phi nhat


SELECT TenDT
FROM DeTai
WHERE KinhPhi = (SELECT MIN(KinhPhi) FROM DeTai);

-- Cho biet ten, ngay sinh song Ho Tay va de tai


SELECT GiangVien.HoTen, GiangVien.NgaySinh, DeTai.TenDT
FROM GiangVien
JOIN ThamGia ON GiangVien.GV = ThamGia.GV
JOIN DeTai ON ThamGia.DT = DeTai.DT
WHERE GiangVien.DiaChi = 'Tây H?'

-- Dua ra toan bo thong tin ma de tai, ten de tai, giang vien tgia, dc
SELECT DeTai.DT, DeTai.TenDT, GiangVien.HoTen, GiangVien.DiaChi,
GiangVien.NgaySinh, DeTai.KinhPhi, ThamGia.SoGio, DeTai.Cap
FROM GiangVien
JOIN ThamGia ON GiangVien.GV = ThamGia.GV
JOIN DeTai ON ThamGia.DT = DeTai.DT;

-- T?o view de hien thi thong tin gv, de tai co ma gv 01


CREATE VIEW vw_HienThi_GV AS
SELECT GiangVien.GV, GiangVien.HoTen, GiangVien.DiaChi,
GiangVien.NgaySinh, DeTai.DT, DeTai.TenDT
FROM GiangVien
JOIN ThamGia ON GiangVien.GV = ThamGia.GV
JOIN DeTai ON ThamGia.DT = DeTai.DT
WHERE GiangVien.GV = 'GV01';
SELECT * FROM vw_HienThi_GV;

-- Tao view hien thi thong tin de tai va giang vien co ma dt 01


CREATE VIEW vw_HienThi_DT AS
SELECT DeTai.DT, DeTai.TenDT, GiangVien.GV, GiangVien.HoTen,
GiangVien.DiaChi, GiangVien.NgaySinh
FROM DeTai
JOIN ThamGia ON DeTai.DT = ThamGia.DT
JOIN GiangVien ON ThamGia.GV = GiangVien.GV
WHERE DeTai.DT = 'DT01';
SELECT * FROM vw_HienThi_DT;

--tao view liet ke de tai cap Bo


SELECT TenDT
FROM vw_DeTai_Bo
WHERE Cap = 'B?';

-- tao view liet ke kinh phi > 270


CREATE VIEW vw_DeTai_loc AS
SELECT TenDT, KinhPhi
FROM DeTai
WHERE KinhPhi > 270;

-- Tao thu tuc hien thi Ten de tai cua nhung de tai co kinh phi nho hon so chi dinh
CREATE PROCEDURE sp_HienThiDeTaiTheoKinhPhi (@KinhPhiMax
DECIMAL)
AS
BEGIN
-- Ki?m tra và hi?n th? tên ?? tài có kinh phí nh? h?n giá tr? ch? ??nh
IF EXISTS (SELECT 1 FROM DeTai WHERE KinhPhi < @KinhPhiMax)
BEGIN
SELECT TenDT
FROM DeTai
WHERE KinhPhi < @KinhPhiMax;
END
ELSE
BEGIN
PRINT 'Không có ?? tài nào';
END
END;
EXEC sp_HienThiDeTaiTheoKinhPhi @KinhPhiMax = 300;

-- Tao trigg? ktra so gio > 50


CREATE TRIGGER trg_CheckSoGio
ON ThamGia
FOR INSERT
AS
BEGIN
IF EXISTS (SELECT 1 FROM inserted WHERE SoGio <= 50)
BEGIN
PRINT 'Không nh?p ???c';
ROLLBACK TRANSACTION;
END
END;

-- viet trigger cap nhat thanh tien tu bang tham gia, Thanhtien = sogio* 50000
CREATE TRIGGER trigger_UpdateThanhTien
ON ThamGia
FOR INSERT, UPDATE
AS
BEGIN
-- C?p nh?t giá tr? thành ti?n cho m?i b?n ghi trong b?ng inserted
UPDATE ThamGia
SET ThanhTien = SoGio * 50000
FROM ThamGia AS ThamGiaTable
INNER JOIN inserted AS InsertedTable
ON ThamGiaTable.GV = InsertedTable.GV
AND ThamGiaTable.DT = InsertedTable.DT
AND ThamGiaTable.SoGio = InsertedTable.SoGio;
END;
--backup c? s? d? li?u sang ? ??a khác--
BACKUP DATABASE [database_name] TO DISK = 'E:\database_backup.bak'
CREATE DATABASE Quanthuvien_Hotensv;
USE Quanthuvien_Hotensv;

CREATE TABLE Sach (


Masach VARCHAR(20) PRIMARY KEY,
Tensach VARCHAR(255),
NXB VARCHAR(255),
NamXB YEAR,
Theloai VARCHAR(255),
Soluong INT
);
CREATE TABLE Docgia (
MaDG VARCHAR(20) PRIMARY KEY,
Hoten VARCHAR(255),
DT VARCHAR(20),
Diachi VARCHAR(255)
);
CREATE TABLE Phieumuon (
Mapm VARCHAR(20) PRIMARY KEY,
Madg VARCHAR(20),
Ngaymuon DATE,
FOREIGN KEY (Madg) REFERENCES Docgia(MaDG)
);
CREATE TABLE CTPhieumuon (
Mapm VARCHAR(20),
Masach VARCHAR(20),
Soluong INT,
Ngayhentra DATE,
PRIMARY KEY (Mapm, Masach),
FOREIGN KEY (Mapm) REFERENCES Phieumuon(Mapm),
FOREIGN KEY (Masach) REFERENCES Sach(Masach)
);
INSERT INTO Sach (Masach, Tensach, NXB, NamXB, Theloai, Soluong)
VALUES
('S001', 'Harry Potter va Hon da Phu thuy', 'Nha xuat ban Kim Dong', 2000,
'Fantasy', 5),
('S002', 'De Men Phieu Luu Ky', 'Nha xuat ban Tre', 1990, 'Tre em', 3),
('S003', 'Song nhu nguoi Nhat', 'Nha xuat ban The gioi', 2020, 'Ky nang song', 4);

INSERT INTO Docgia (MaDG, Hoten, DT, Diachi)


VALUES
('DG001', 'Nguyen Thi Khanh Linh', '0123456789', 'Ha Noi'),
('DG002', 'Tran Van A', '0987654321', 'Ho Chi Minh');
INSERT INTO Phieumuon (Mapm, Madg, Ngaymuon)
VALUES
('PM001', 'DG001', '2024-11-01'),
('PM002', 'DG002', '2024-11-03');

INSERT INTO CTPhieumuon (Mapm, Masach, Soluong, Ngayhentra)


VALUES
('PM001', 'S001', 2, '2024-11-15'),
('PM001', 'S002', 1, '2024-11-15'),
('PM002', 'S003', 1, '2024-11-17');

--Hien thi ten ban PM01-


SELECT Docgia.Hoten
FROM Phieumuon
JOIN Docgia ON Phieumuon.Madg = Docgia.MaDG
WHERE Phieumuon.Mapm = 'PM001';

--Hien thi sach sx 2022


SELECT *
FROM Sach
WHERE NXB = 'Nha xuat ban Giao duc' AND NamXB = 2022;

--Hien thi doc gia Ha Noi


SELECT *
FROM Docgia
WHERE Diachi = 'Ha Noi';

--Hien thi cuon sach ngay 20/11/2023


SELECT Sach.Masach, Sach.Tensach, Phieumuon.Ngaymuon
FROM Phieumuon
JOIN CTPhieumuon ON Phieumuon.Mapm = CTPhieumuon.Mapm
JOIN Sach ON CTPhieumuon.Masach = Sach.Masach
WHERE Phieumuon.Ngaymuon = '2023-11-20';

--Hien thi tong so sach ngay 20/11/2023


SELECT Phieumuon.Ngaymuon, SUM(CTPhieumuon.Soluong) AS
TongSoSachMuon
FROM Phieumuon
JOIN CTPhieumuon ON Phieumuon.Mapm = CTPhieumuon.Mapm
WHERE Phieumuon.Ngaymuon = '2023-11-20'
GROUP BY Phieumuon.Ngaymuon;

--Tong so sach muon boi DG01


SELECT Docgia.MaDG, Docgia.Hoten, SUM(CTPhieumuon.Soluong) AS
TongSoSachMuon
FROM Phieumuon
JOIN Docgia ON Phieumuon.Madg = Docgia.MaDG
JOIN CTPhieumuon ON Phieumuon.Mapm = CTPhieumuon.Mapm
WHERE Docgia.MaDG = 'DG001'
GROUP BY Docgia.MaDG, Docgia.Hoten;

--Tong so sach The loai Thieu nhi


SELECT Sach.Theloai, SUM(CTPhieumuon.Soluong) AS TongSoSachMuon
FROM CTPhieumuon
JOIN Sach ON CTPhieumuon.Masach = Sach.Masach
WHERE Sach.Theloai = 'Thieu nhi'
GROUP BY Sach.Theloai;

--Tong so sach muon theo the loai


SELECT Sach.Theloai, SUM(CTPhieumuon.Soluong) AS TongSoSachMuon
FROM CTPhieumuon
JOIN Sach ON CTPhieumuon.Masach = Sach.Masach
GROUP BY Sach.Theloai;

--Tong so sach muon theo ten tgia


SELECT Sach.NXB, SUM(CTPhieumuon.Soluong) AS TongSoSachMuon
FROM CTPhieumuon
JOIN Sach ON CTPhieumuon.Masach = Sach.Masach
GROUP BY Sach.NXB;

--Cac doc gia muon nhieu sach nhat


SELECT Docgia.MaDG, Docgia.Hoten, SUM(CTPhieumuon.Soluong) AS
TongSoSachMuon
FROM Phieumuon
JOIN Docgia ON Phieumuon.Madg = Docgia.MaDG
JOIN CTPhieumuon ON Phieumuon.Mapm = CTPhieumuon.Mapm
GROUP BY Docgia.MaDG, Docgia.Hoten
HAVING SUM(CTPhieumuon.Soluong) >=
(SELECT MAX(SUM(CTPhieumuon.Soluong))
FROM Phieumuon
JOIN CTPhieumuon ON Phieumuon.Mapm = CTPhieumuon.Mapm
GROUP BY Phieumuon.Madg);

-- Doc gia muon > 3 quyenr


SELECT Docgia.MaDG, Docgia.Hoten, SUM(CTPhieumuon.Soluong) AS
TongSoSachMuon
FROM Phieumuon
JOIN Docgia ON Phieumuon.Madg = Docgia.MaDG
JOIN CTPhieumuon ON Phieumuon.Mapm = CTPhieumuon.Mapm
GROUP BY Docgia.MaDG, Docgia.Hoten
HAVING SUM(CTPhieumuon.Soluong) > 3;

--Cuon sach muon >3 lan


SELECT Sach.Masach, Sach.Tensach, SUM(CTPhieumuon.Soluong) AS
TongSoLuotMuon
FROM CTPhieumuon
JOIN Sach ON CTPhieumuon.Masach = Sach.Masach
GROUP BY Sach.Masach, Sach.Tensach
HAVING SUM(CTPhieumuon.Soluong) > 3;

--Cuon sach chua co khach muon


SELECT Sach.Masach, Sach.Tensach, Sach.NXB
FROM Sach
LEFT JOIN CTPhieumuon ON Sach.Masach = CTPhieumuon.Masach
WHERE CTPhieumuon.Masach IS NULL;

-- Doc gia khong o Ha Noi


SELECT MaDG, Hoten, DT, Diachi
FROM Docgia
WHERE Diachi <> 'Hà Nội';

--Cuong sach khong duoc sx 'NXS Giao duc'


SELECT Masach, Tensach, NXB
FROM Sach
WHERE NXB <> 'Giáo dục';

-- Nam 2020 co quyen sach the loai gi


SELECT Theloai
FROM Sach
WHERE NamXB = 2020
GROUP BY Theloai;

--Tao default cho cot muon bang ngay hien tai


create default ngaymuon
as getdate ()
exec sp_bindefault 'ngaymuon','Phieumuon.ngaymuon'

--Tao rule soluongsach >0


CREATE RULE soluong
AS
@Sl > 0
EXEC sp_bindrule 'soluong', 'Sach.Soluong';
-- Tao thu tuc khi bt ma phieu muon
CREATE PROCEDURE GetReaderInfoByPhieuMuon
@Mapm VARCHAR(20)
AS
BEGIN
SELECT Docgia.MaDG, Docgia.Hoten, Docgia.DT, Docgia.Diachi
FROM Phieumuon
JOIN Docgia ON Phieumuon.Madg = Docgia.MaDG
WHERE Phieumuon.Mapm = @Mapm;
END;
EXEC GetReaderInfoByPhieuMuon 'PM01';

--Tao thu tuc khi bt ma doc gia, hien thi sluong sach moi loai
CREATE PROCEDURE GetBookQuantityByReader
@MaDG VARCHAR(20)
AS
BEGIN
SELECT Sach.Theloai, SUM(CTPhieumuon.Soluong) AS TongSoLuong
FROM CTPhieumuon
JOIN Phieumuon ON CTPhieumuon.Mapm = Phieumuon.Mapm
JOIN Sach ON CTPhieumuon.Masach = Sach.Masach
WHERE Phieumuon.Madg = @MaDG
GROUP BY Sach.Theloai;
END;
EXEC GetBookQuantityByReader 'DG01';

--Tao trigger cap nhat lai so luong sach trong thu vien khi sl sach trong
CTPhieumuon thay doi
CREATE TRIGGER UpdateBookQuantity
ON CTPhieumuon
for INSERT, UPDATE, DELETE
AS
BEGIN
-- Nếu có bản ghi INSERT hoặc UPDATE
IF EXISTS (SELECT * FROM inserted)
BEGIN
UPDATE Sach
SET Soluong = Soluong - (SELECT Soluong FROM inserted WHERE
inserted.Masach = Sach.Masach)
WHERE Masach IN (SELECT Masach FROM inserted);
END

-- Nếu có bản ghi DELETE


IF EXISTS (SELECT * FROM deleted)
BEGIN
UPDATE Sach
SET Soluong = Soluong + (SELECT Soluong FROM deleted WHERE
deleted.Masach = Sach.Masach)
WHERE Masach IN (SELECT Masach FROM deleted);
END
END;

--Tao trigger cap nhat so luong sach trong thu vien khi xoa sach muon trong
CTPhieumuon
CREATE TRIGGER UpdateSoluongSach
ON CTPhieumuon
FOR DELETE
AS
BEGIN
-- Cập nhật lại số lượng sách trong bảng Sach
UPDATE Sach
SET Soluong = Soluong + (SELECT Soluong FROM deleted WHERE Masach
= Sach.Masach)
FROM Sach
WHERE Sach.Masach = (SELECT Masach FROM deleted);
END;

You might also like