Professional Documents
Culture Documents
USE QLBanHang
GO
/* B1.1a: Save D */
/* B1.1b: */
CREATE TABLE tblKhachHang(
iMaKH INT NOT NULL,
sTenKH NVARCHAR(30) NOT NULL,
sDiachi NVARCHAR(50) NULL,
sDienthoai NVARCHAR(12) NOT NULL
);
/* B1.1d: */
ALTER TABLE tblKhachHang ADD CONSTRAINT PK_tblKhachHang
PRIMARY KEY(iMaKH);
ALTER TABLE tblNhanVien ADD CONSTRAINT PK_tblNhanVien
PRIMARY KEY(iMaNV);
/* B1.1e: */
ALTER TABLE tblNhanVien
ADD CONSTRAINT CK_Ngay CHECK(YEAR(dNgayvaolam)-YEAR(dNgaysinh)>=18);
/* B1.1f: */
ALTER TABLE tblMatHang
ADD sDonvitinh NVARCHAR(20) NOT NULL;
/* B1.1g: */
CREATE INDEX IndexTen ON tblMatHang(sTenhang);
/* B2.2a: */
CREATE TABLE tblDonnhaphang(
iSoHD INT NOT NULL,
iMaNV INT NOT NULL,
dNgaynhaphang DATETIME NULL,
);
/* B2.2b: */
ALTER TABLE tblDonnhaphang
ADD CONSTRAINT PK_tblDonnhaphang PRIMARY KEY(iSoHD),
CONSTRAINT FK_nhanvien_donnhaphang FOREIGN KEY(iMaNV)
REFERENCES tblNhanVien(iMaNV);
/* B2.2c: */
ALTER TABLE tblChiTietNhapHang
ADD CONSTRAINT CK_fGianhap CHECK(fGianhap > 0),
CONSTRAINT CK_fSoluongnhap CHECK(fSoluongnhap > 0);
/* B3.3a: */
ALTER TABLE tblKhachHang
ADD bGioitinh BIT NULL;
/* B3.3b: */
CREATE TABLE tblDonDatHang(
iSoHD INT NOT NULL,
iMaNV INT NOT NULL,
iMaKH INT NOT NULL,
dNgaydathang DATETIME,
dNgaygiaohang DATETIME,
sDiachigiaohang NVARCHAR(50)
);
/* B3.3c: */
ALTER TABLE tblDonDatHang
ADD CONSTRAINT FK_KhachHang_DonDatHang FOREIGN KEY(iMaKH)
REFERENCES tblKhachHang(iMaKH);
/* B3.3d: */
ALTER TABLE tblDonDatHang
ADD CONSTRAINT FK_NhanVien_DonDatHang FOREIGN KEY(iMaNV)
REFERENCES tblNhanVien(iMaNV);
/* B4.1a: */
CREATE TABLE tblChiTietDatHang
(
iSoHD INT NOT NULL,
sMahang NVARCHAR(20) NOT NULL,
fGiaban FLOAT,
fSoluongmua FLOAT,
fMucgiamgia FLOAT,
);
/* B4.1b: */
ALTER TABLE dbo.tblChiTietDatHang ALTER COLUMN sMahang NVARCHAR(10) NOT NULL;
/* B4.1c: */
/* B4.1d: */
ALTER TABLE dbo.tblChiTietDatHang ADD CONSTRAINT PK_tblChiTietDatHang PRIMARY
KEY(iSoHD,sMahang);
/* B4.1e: */
ALTER TABLE dbo.tblChiTietDatHang
ADD CONSTRAINT CK_fGiaban CHECK (fGiaban >0),
CONSTRAINT CK_fSoluongmua CHECK (fSoluongmua >0),
CONSTRAINT CK_fMucgiamgia CHECK (fMucgiamgia >=0);
--Bài TH2--
--Bài 2.1--
/*phần 1*/
/*phần 3*/
insert into
tblMatHang(sMahang,sTenhang,iMaNCC,sMaloaihang,fSoluong,fGiahang,sDonvitinh)
values(N'0901MH',N'Quần vải',1,N'0901LH',10,200000,N'chiếc');
insert into
tblMatHang(sMahang,sTenhang,iMaNCC,sMaloaihang,fSoluong,fGiahang,sDonvitinh)
values(N'0902MH',N'Quần jean',1,N'0901LH',12,280000,N'chiếc');
insert into
tblMatHang(sMahang,sTenhang,iMaNCC,sMaloaihang,fSoluong,fGiahang,sDonvitinh)
values(N'0903MH',N'Quần thô',1,N'0901LH',20,250000,N'chiếc');
insert into
tblMatHang(sMahang,sTenhang,iMaNCC,sMaloaihang,fSoluong,fGiahang,sDonvitinh)
values(N'0904MH',N'Áo len',2,N'0902LH',15,260000,N'cái');
insert into
tblMatHang(sMahang,sTenhang,iMaNCC,sMaloaihang,fSoluong,fGiahang,sDonvitinh)
values(N'0905MH',N'Áo phông',4,N'0902LH',12,200000,N'cái');
insert into
tblMatHang(sMahang,sTenhang,iMaNCC,sMaloaihang,fSoluong,fGiahang,sDonvitinh)
values(N'0906MH',N'Áo khoác',2,N'0902LH',16,300000,N'cái');
insert into
tblMatHang(sMahang,sTenhang,iMaNCC,sMaloaihang,fSoluong,fGiahang,sDonvitinh)
values(N'0907MH',N'Sữa ông thọ',4,N'0903LH',20,500000,N'hộp');
insert into
tblMatHang(sMahang,sTenhang,iMaNCC,sMaloaihang,fSoluong,fGiahang,sDonvitinh)
values(N'0908MH',N'Sữa bột',3,N'0903LH',21,1000000,N'hộp');
insert into
tblMatHang(sMahang,sTenhang,iMaNCC,sMaloaihang,fSoluong,fGiahang,sDonvitinh)
values(N'0909MH',N'Sữa Milo',5,N'0903LH',11,600000,N'hộp');
insert into
tblMatHang(sMahang,sTenhang,iMaNCC,sMaloaihang,fSoluong,fGiahang,sDonvitinh)
values(N'0910MH',N'Sữa Fami',3,N'0903LH',13,530000,N'hộp');
/*phần 2*/
/*phần 6*/
insert into tblNhanVien
(iMaNV,sTenNV,sDiachi,sDienthoai,dNgaysinh,dNgayvaolam,fLuongcoban,fPhucap,sCMND)
values(0901,N'Hòa',N'Thái Bình',0988885551,'1983-09-19','2010-09-
20',4500000,200000,'123456779');
insert into tblNhanVien
values(0903,N'Hoa',N'Quảng Ninh',0988885552,'2001-08-20','2020-10-
21',4000000,250000,'1269056780');
insert into tblNhanVien
values(0905,N'Bình',N'Hải Phòng',0988885553,'1999-01-20','2019-09-
26',4000000,300000,'1234449785');
insert into tblNhanVien
values(0907,N'Linh',N'Thái Nguyên',0977775558,'1999-01-20','2020-08-
20',4500000,210000,'123456778');
insert into tblNhanVien
values(0909,N'Hùng',N'Quảng Ngãi',0966665009,'2000-08-20','2020-10-
22',4000000,220000,'1269056781');
insert into tblNhanVien
values(0911,N'Ba',N'Yên Bái',0967890344,'1998-01-20','2019-09-
25',4000000,300000,'1234449786');
insert into tblNhanVien
values(0913,N'Hằng',N'Hòa Bình',0988665558,'1994-09-19','2018-07-
20',4500000,270000,'123456777');
insert into tblNhanVien
values(0915,N'Lan',N'Tây Ninh',0966885009,'2000-08-20','2019-10-
21',4000000,250000,'1269056782');
insert into tblNhanVien
values(0917,N'Khải',N'Hải Phòng',0967890345,'1997-02-20','2019-09-
10',4500000,300000,'1234449787');
insert into tblNhanVien
values(0919,N'Đức',N'Đà Nẵng',09678903456,'1995-01-28','2020-06-
10',4500000,330000,'1234449788');
/*phần 7*/
update tblnhanvien
set fPhucap=fPhucap+500000
where datediff(year,getdate(),dNgayvaolam)>=5;
/*phần 8*/
delete from tblNhanVien where datediff(year,getdate(), dNgaysinh) <= 20;
/*phần 9*/
insert into tblDonDatHang
(iSoHD,iMaKH,iMaNV,dNgaydathang,dNgaygiaohang,sDiachigiaohang)
values(01,0902,0915,'2018-01-10','2018-01-14',N'Hà Nội'),
(02,0904,0913,'2018-01-09','2018-01-14',N'Hà Nội'),
(03,0906,0911,'2017-01-06','2017-01-10',N'Hà Nội'),
(04,0908,0909,'2017-01-10','2017-01-14',N'Hà Nội'),
(05,0910,0907,'2019-01-09','2019-01-14',N'Hà Nội'),
(06,0902,0905,'2016-01-06','2016-01-10',N'Hà Nội'),
(07,0904,0903,'2016-01-10','2021-01-14',N'Hà Nội'),
(08,0906,0901,'2016-01-09','2016-02-14',N'Hà Nội');
/*phần c*/
insert into tblChiTietDatHang (iSoHD,sMahang,fGiaban,fSoluongmua,fMucgiamgia)
values(01,N'0901MH',200000,10,0.1),
(01,N'0902MH',280000,20,0.2),
(02,N'0903MH',250000,7,0.3),
(02,N'0904MH',260000,10,0.4),
(03,N'0905MH',200000,8,0.5),
(03,N'0906MH',300000,10,0.6),
(04, N'0907MH',500000,6,0.7),
(04, N'0908MH',1000000,15,0.8),
(06,N'0910MH',530000,20,0.2),
(05,N'0903MH',250000,13,0.3),
(06,N'0904MH',260000,5,0.4),
(07,N'0905MH',200000,3,0.5),
(08,N'0906MH',300000,2,0.6),
(07,N'0907MH',500000,7,0.7);
insert into tblChiTietDatHang
values
select*from tblChiTietDatHang
/* phần d*/
update tblChiTietDatHang
set fmucgiamgia=fmucgiamgia*10/100
from tblDonDatHang,tblChiTietDatHang
where tblDonDatHang.iSohd=tblChiTietDatHang.iSoHD and month(dNgaydathang)=07 and
year(dNgaydathang)=2016;
/* phần e*/
delete tblChiTietDatHang where sMahang='0902MH';
/* BAI TH 3 */
/* 3.1 */
/* a */
select sMahang,sTenhang from tblMatHang where fsoluong<100
/* b */
/* c */
SELECT tblChiTietDatHang.iSoHD,SUM((fGiaban*fSoluongmua)-fMucgiamgia) AS
Tổng_số_tiền
FROM tblDonDatHang INNER JOIN tblChiTietDatHang
ON tblChiTietDatHang.iSoHD = tblDonDatHang.iSoHD
GROUP BY tblChiTietDatHang.iSoHD
/*------d------*/
SELECT MONTH(tblDonDatHang.dNgaydathang) AS Tháng,SUM(fGiaban*fSoluongmua) AS
Tong_tien
FROM tblDonDatHang JOIN tblChiTietDatHang
ON tblChiTietDatHang.iSoHD = tblDonDatHang.iSoHD
WHERE YEAR(dNgaydathang)=2016
GROUP BY MONTH(tblDonDatHang.dNgaydathang)
/*------e------*/
SELECT mh.sMahang,mh.sTenhang,count(ctdh.sMahang) AS Số_Lần
FROM tblDonDatHang AS ddh,tblChiTietDatHang AS ctdh,tblMatHang AS mh
WHERE ddh.iSoHD=ctdh.iSoHD AND ctdh.sMahang = mh.sMahang AND
YEAR(ddh.dNgaydathang)=2016
GROUP BY mh.sMahang,mh.sTenhang
HAVING count(ctdh.sMahang)=1
/*-------BÀI 3.2------------*/
/*------a Tính tổng tiền hàng và tổng số mặt hàng*/
CREATE VIEW vw_tongtienvstongmh
as
SELECT tblChiTietDatHang.iSoHD,SUM(fGiaban*fSoluongmua)
AS Tổng_Tiền_Hàng,COUNT(tblChiTietDatHang.sMahang)
AS Tổng_số_mặt_hàng
FROM tblDonDatHang,tblChiTietDatHang,tblMatHang
WHERE tblDonDatHang.iSoHD=tblChiTietDatHang.iSoHD AND
tblChiTietDatHang.sMahang=tblMatHang.sMahang
GROUP BY tblChiTietDatHang.iSoHD
--test:
/*------b Danh sách các mặt hàng không được nhập về trong tháng 6 năm 2017 */
/*------c Tên NCC cung cấp một mặt hàng nào đó*/
SELECT tblMatHang.iMaNCC,STenNhaCC,sTenhang
FROM tblMatHang,tblNhaCungCap
WHERE tblMatHang.iMaNCC=tblNhaCungCap.iMaNCC AND sTenhang =N'Quần vải'
/*------e Tổng số tiền hàng bán từng nhân viên năm 2016*/
SELECT tblNhanVien.iMaNV,tblNhanVien.sTenNV,SUM(fGiaban*fSoluongmua) AS
TTiền_ĐãBán2016
FROM tblNhanVien,tblDonDatHang,tblChiTietDatHang
WHERE tblNhanVien.iMaNV = tblDonDatHang.iMaNV AND tblDonDatHang.iSoHD =
tblChiTietDatHang.iSoHD
AND YEAR(dNgaydathang)=2016
GROUP BY tblNhanVien.iMaNV,tblNhanVien.sTenNV
/*--------BÀI 3.3------------*/
UPDATE tblMatHang
SET fGiahang= vw_GBanmax.fGiamualonnhat* 1.1
FROM vw_GBanmax, tblMatHang
WHERE tblMatHang.sMahang=vw_GBanmax.sMahang
/*2d*/
SELECT * FROM vw_HangBan2016
/*3c*/
SELECT * FROM vw_DSKHN_tongtien
/*3d*/
SELECT * FROM vw_SLKhachhangtheoGT
SELECT * FROM tblKhachHang
/*3e*/
SELECT * FROM vw_KHmuaMAX
/*3f*/
SELECT * FROM vw_DSMHvagiaTB
/* BAI TH 4*/
/* Câu 1 tạo thủ tục cho danh sách các mặt hàng không được bán trong năm nào đó,
với năm là tham số truyền vào*/
/*Câu 2: Tạo thủ tục cho biết tên hàng, tổng số lượng và tổng số tiền đã nhập
của các mặt hàng trong một tháng- một năm nào đó*/
as
begin
update tblNhanVien
set fLuongcoban=fLuongcoban*1.5
where tblNhanVien.iMaNV in
(select tblNhanVien.iMaNV from tblChiTietDatHang, tblDonDatHang, tblNhanVien
where
tblChiTietDatHang.iSoHD = tblDonDatHang.iSoHD
and tblDonDatHang.iMaNV =tblNhanVien.iMaNV
group by tblNhanVien.iMaNV
having sum(fSoluongmua)>@soluong)
end
/*Câu 4: Tạo thủ tục cho biết các thông tin gồm: tên mặt hàng, số lượng, đơn
giá, thành tiền của các mặt hàng*/
create procedure ThongtinMH (@mahd int)
as
begin
SELECT tblMatHang.sTenhang, tblChiTietDatHang.fSoluongmua,
tblChiTietDatHang.fGiaban,
SUM(tblChiTietDatHang.fGiaban*tblChiTietDatHang.fSoluongmua*tblChiTietDatHang.fMucg
iamgia) as[Tổng thành tiền]
FROM tblMatHang,tblChiTietDatHang
WHERE tblChiTietDatHang.sMahang=tblMatHang.sMahang and tblChiTietDatHang.iSoHD=1802
GROUP BY tblMatHang.sTenhang, tblChiTietDatHang.fSoluongmua,
tblChiTietDatHang.fGiaban
END
exec ThongtinMH @mahd='05'
/*5. Tạo thủ tục cho biết tên khách hàng đã mua hàng trong một tháng - một
năm nào đó*/
/*6. Tạo thủ tục thực hiện giảm giá cho các mặt hàng được đặt trong
tháng hiện tại thỏa mãn điều kiện*/
-----Câu 7: Tạo thủ tục cho tên các khách hàng đã đến mua hàng từ 3 lần trong 1
nămnào đó
Create proc khmuahon3lan(@nam int)
as
begin
select sTenKH, count(sTenKH) as [số lần khách mua]
from tblDonDatHang,tblKhachHang
where tblKhachHang.iMaKH=tblDonDatHang.iMaKH and
YEAR(tblDonDatHang.dNgaydathang)=@nam
group by sTenKH
having count(sTenKH)>=3
end
exec khmuahon3lan @nam='2018'
/* BAI TH 5 */
/* 1. Thêm cột iTSNhap vào bảng tblMatHang. Tạo trigger để nhập mặt hàng thì
tổng số lượng trong kho tăng tương ứng*/
--KT
INSERT INTO tblChiTietNhapHang(iSoHD,sMahang,fGianhap,fSoluongnhap)
VALUES(0509,'0903MH',23000,21);
select*from tblChiTietNhapHang
/* Cau 2: Tạo trigger sao cho don giá nhập của một mặt hàng phải đảm bảo nhỏ hơn
giá của mặt hàng đó hiện tại*/
--Kiem tra
/*Cau 3: Thêm cột TongTienHang (float) vào bảng tblKhachHang, sau đó tại
Trigger sao cho giá trị TongTienHang
tự động tăng lên mỗi khi khách hàng thực hiện mua một mặt hàng nào đó*/
-- Tạo trigger
/* Cau 4:
Thêm cột TongSoMatHang (int) vào bảng tblDONDATHANG, tạo trigger sao
cho giá trị của TongSoMatHang tự động tăng lên mỗi khi bổ
sung thêm một mặt hàng khách đặt mua trong đơn đặt hàng tương ứng*/
--Câu 5: Tạo tài khoản đăng nhập SQLServer có tên là tên sinh viên và
mật khẩu tuỳ ý.
CREATE LOGIN nguyenthihuyen321
WITH PASSWORD = '321871',
DEFAULT_DATABASE =QLyBanHang_NguyenThiHuyen
GO
GRANT INSERt,UPDATE,DELETE,SELECT
ON tblNhaCungCap
TO uses5
GRANT INSERT,SELECT
ON tblNhacungcap
TO BPNhapHang
GRANT INSERT,SELECT
ON tblDonnhaphang
TO BPNhapHang
GRANT INSERT,SELECT
ON tblChitietnhaphang
TO BPNhapHang
GRANT SELECT
ON tblNhanvien
TO BPNhapHang
GRANT INSERT,SELECT
ON tblMathang
TO BPNhapHang
--Cau6: