You are on page 1of 17

CREATE DATABASE QLBanHang

USE QLBanHang
GO

CREATE TABLE tblLoaiHang(


sMaloaihang NVARCHAR(10) not null,
sTenloaihang NVARCHAR(50) not null
);

ALTER TABLE tblLoaiHang ADD CONSTRAINT PK_sMaloaihang


PRIMARY KEY(sMaloaihang);

CREATE TABLE tblNhaCungCap


(
iMaNCC int IDENTITY(1,1) NOT NULL,
sTenNhaCC NVARCHAR(50) NULL,
sTengiaodich NVARCHAR(50) NULL,
sDiachi NVARCHAR(50) NULL,
sDienthoai NVARCHAR(12) NULL,
CONSTRAINT PK_tblNhaCungCap PRIMARY KEY (iMaNCC)
);

CREATE TABLE tblMatHang


(
sMahang NVARCHAR(10) NOT NULL,
sTenhang NVARCHAR(30) NOT NULL,
iMaNCC INT NULL,
sMaloaihang NVARCHAR(10) NULL,
fSoluong FLOAT NULL,
fGiahang FLOAT NULL
);

ALTER TABLE tblMatHang


ADD CONSTRAINT PK_mathang PRIMARY KEY(sMahang),
CONSTRAINT FK_mathang_loaihang FOREIGN KEY (sMaloaihang)
REFERENCES tblLoaiHang(sMaloaihang),
CONSTRAINT FK_mathang_nhacungcap FOREIGN KEY(iMaNCC)
REFERENCES tblNhaCungCap(iMaNCC);

/* 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
);

CREATE TABLE tblNhanVien(


iMaNV INT NOT NULL,
sTenNV NVARCHAR(30) NOT NULL,
sDiachi NVARCHAR(50) NULL,
sDienthoai NVARCHAR(12) NOT NULL,
dNgaysinh DATETIME NOT NULL,
dNgayvaolam DATETIME NOT NULL,
fLuongcoban FLOAT NOT NULL,
fPhucap FLOAT NOT NULL,
);
/* B1.1c: */
ALTER TABLE tblNhanVien
ADD sCMND NVARCHAR(15) UNIQUE;

/* 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,
);

CREATE TABLE tblChiTietNhapHang(


iSoHD INT NOT NULL,
sMahang NVARCHAR(10) NOT NULL,
fGianhap FLOAT NULL,
fSoluongnhap FLOAT NULL,
);

/* B2.2b: */
ALTER TABLE tblDonnhaphang
ADD CONSTRAINT PK_tblDonnhaphang PRIMARY KEY(iSoHD),
CONSTRAINT FK_nhanvien_donnhaphang FOREIGN KEY(iMaNV)
REFERENCES tblNhanVien(iMaNV);

ALTER TABLE tblChiTietNhapHang


ADD CONSTRAINT PK_tblChiTietNhapHang PRIMARY KEY(iSoHD, sMaHang),
CONSTRAINT FK_mathang_chitietnhaphang FOREIGN KEY(sMaHang)
REFERENCES tblMatHang(sMaHang),
CONSTRAINT FK_donnhaphang_chitietnhaphang FOREIGN KEY(iSoHD)
REFERENCES tblDonnhaphang(iSoHD);

/* 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)
);

ALTER TABLE tblDonDatHang


ADD CONSTRAINT PK_tblDonDatHang PRIMARY KEY(iSoHD),
CONSTRAINT CK_tblDonDatHang CHECK(dNgaygiaohang >= dNgaydathang),
CONSTRAINT DF_tblDonDatHang DEFAULT GETDATE() FOR dNgaydathang;

/* 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: */

ALTER TABLE dbo.tblChiTietDatHang


ADD CONSTRAINT FK_MatHang_ChiTietDatHang FOREIGN KEY (sMahang) REFERENCES
dbo.tblMatHang(sMahang),
CONSTRAINT FK_DonDatHang_ChiTietDatHang FOREIGN KEY (iSoHD) REFERENCES
dbo.tblDonDatHang(iSoHD);

/* 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*/

insert into tblLoaiHang(sMaloaihang,sTenloaihang)


values(N'0901LH',N'Quần');
insert into tblLoaiHang
values(N'0902LH',N'Áo');
insert into tblLoaiHang
values(N'0903LH',N'Sữa');

/*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*/

insert into tblNhaCungCap(sTenNhaCC,sTengiaodich, sDiachi, sDienthoai)


values( N'NB',N'Bán',N'Nhật',N'0904670891'),
(N'HQ',N'Bán',N'Hàn',N'076897895'),
(N'VN',N'Bán',N'Việt Nam',N'0904670890'),
(N'TQ',N'Bán', N'Trung Quốc',N'0329687849'),
(N'MM',N'Bán', N'Mỹ',N'0369541235');
--Bài 2.2--
/*phần 5*/
insert into tblKhachHang(iMaKH,sTenKH, sDiachi, sDienthoai, bGioitinh)
values(0902,N'Hòa',N'Hà Nội',0988885559,0);
insert into tblKhachHang
values(0904,N'Hoàng',N'Hà Nội',098887700,1);
insert into tblKhachHang
values(0906,N'Ánh',N'Hải Dương',0976585559,0);
insert into tblKhachHang
values(0908,N'Huy',N'Hà Nội',098657070,1);
insert into tblKhachHang
values(0910,N'Ngọc',N'Hải Dương',0967585955,0);

/*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';

/*phần b ĐƠN NHẬP HÀNG*/

insert into tblDonNhapHang


values(0109,0901,'2018-07-05');
insert into tblDonNhapHang
values(0209,0903,'2017-06-10');
insert into tblDonNhapHang
values(0309,0905,'2019-05-08');
insert into tblDonNhapHang
values(0409,0907,'2019-09-10');
insert into tblDonNhapHang
values(0509,0909,'2018-05-08');

/*phần c CHI TIẾT NHẬP HÀNG*/

insert into tblChiTietNhapHang


values(0109,N'0901MH',150000,16);
insert into tblChiTietNhapHang
values(0109,N'0902MH',160000,20);
insert into tblChiTietNhapHang
values(0209,N'0903MH',100000,25);
insert into tblChiTietNhapHang
values(0209,N'0904MH',160000,12);
insert into tblChiTietNhapHang
values(0309,N'0905MH',80000,17);
insert into tblChiTietNhapHang
values(0309,N'0906MH',480000,24);
insert into tblChiTietNhapHang
values(0409,N'0907MH',80000,17);
insert into tblChiTietNhapHang
values(0409,N'0908MH',480000,24);
insert into tblChiTietNhapHang
values(0409,N'0909MH',80000,17);
insert into tblChiTietNhapHang
values(0509,N'0910MH',480000,12);
insert into tblChiTietNhapHang
values(0509,N'0905MH',80000,7);
insert into tblChiTietNhapHang
values(0509,N'0906MH',480000,14);
insert into tblChiTietNhapHang
values(0109,N'0905MH',80000,17);
insert into tblChiTietNhapHang
values(0209,N'0906MH',480000,4);
insert into tblChiTietNhapHang
values(0309,N'0905MH',80000,10);

/* BAI TH 3 */
/* 3.1 */
/* a */
select sMahang,sTenhang from tblMatHang where fsoluong<100
/* b */

CREATE VIEW vw_TongSoMatHang


as
SELECT tblMatHang.sMaloaihang,SUM(fSoluong) AS Tổngsốlượng
FROM tblMatHang, tblLoaiHang
WHERE tblMatHang.sMaloaihang=tblLoaiHang.sMaloaihang
GROUP BY tblMatHang.sMaloaihang
SELECT * FROM tblMatHang
SELECT * FROM vw_TongSoMatHang

/* 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:

SELECT * FROM vw_tongtienvstongmh

/*------b Danh sách các mặt hàng không được nhập về trong tháng 6 năm 2017 */

CREATE VIEW vw_DSMHnhap#t6


AS
SELECT tblMatHang.sMahang,sTenhang,dNgaynhaphang
FROM tblDonnhaphang,tblChiTietNhapHang,tblMatHang
WHERE tblDonnhaphang.iSoHD=tblChiTietNhapHang.iSoHD AND
tblChiTietNhapHang.sMahang=tblMatHang.sMahang
AND tblChiTietNhapHang.iSoHD NOT IN(
SELECT iSoHD
FROM tblDonnhaphang
WHERE YEAR(dNgaynhaphang)=2017 AND MONTH(dNgaynhaphang)=6)

SELECT * FROM vw_DSMHnhap#t6


SELECT * FROM tblDonnhaphang
SELECT * FROM tblChiTietNhapHang

/*------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'

/*------d Số lượng từng loại hàng bán 2016*/

CREATE VIEW vw_HangBan2016


as
SELECT tblChiTietDatHang.sMahang,sTenhang,SUM(fSoluongmua) AS SL_BÁN_2016
FROM tblMatHang,tblChiTietDatHang,tblDonDatHang
WHERE tblChiTietDatHang.iSoHD=tblDonDatHang.iSoHD AND tblChiTietDatHang.sMahang =
tblMatHang.sMahang
AND YEAR(tblDonDatHang.dNgaydathang)=2016
GROUP BY tblChiTietDatHang.sMahang,sTenhang

/*------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

SELECT * FROM tblNhanVien


SELECT * FROM tblDonDatHang
SELECT * FROM tblChiTietDatHang

/*--------BÀI 3.3------------*/

/*------a DSKH Nữ đã đặt hàng 2 lần */


select tblKhachHang.iMaKH,tblKhachHang.sTenKH,tblKhachHang.bGioitinh
from tblKhachHang,tblDonDatHang
where tblDonDatHang.iMaKH=tblKhachHang.iMaKH and bGioitinh='0'
group by tblKhachHang.iMaKH,tblKhachHang.sTenKH,tblKhachHang.bGioitinh
having count(tblDonDatHang.iSoHD)=2;

select * from tblKhachHang


select * from tblDonDatHang
/*------b Thống kê số lượng đặt hàng của mặt hàng */
CREATE VIEW vw_DSdathang
AS
SELECT sTenloaihang,SUM(fSoluongmua) AS SL
FROM tblMatHang,tblLoaiHang,tblChiTietDatHang
WHERE tblMatHang.sMaloaihang = tblLoaiHang.sMaloaihang AND tblMatHang.sMahang =
tblChiTietDatHang.sMahang
AND sTenloaihang=N'Quần'
GROUP BY sTenloaihang

SELECT * FROM vw_DSdathang

/*------c DSKH nam và tổng tiền mỗi người đặt hàng*/


CREATE VIEW vw_DSKHN_tongtien
as
SELECT tblDonDatHang.iMaKH,sTenKH,SUM(fGiaban*fSoluongmua) AS Tổng_Tiền_KH
FROM tblKhachHang,tblDonDatHang,tblChiTietDatHang
WHERE tblKhachHang.iMaKH=tblDonDatHang.iMaKH AND
tblChiTietDatHang.iSoHD=tblDonDatHang.iSoHD
AND bGioitinh = 1
GROUP BY tblDonDatHang.iMaKH,sTenKH

SELECT * FROM vw_DSKHN_tongtien

/*------d Thống kê số lượng khách hàng theo giới tính*/

CREATE VIEW vw_SLKhachhangtheoGT


as
SELECT bGioitinh,COUNT(iMaKH) AS SL_KháchHang
FROM tblKhachHang
GROUP BY bGioitinh
-- --

SELECT * FROM vw_SLKhachhangtheoGT

/*------e DS 3 KH mua hàng nhiều nhất*/


CREATE VIEW vw_KHmuaMAX
as
SELECT TOP 3 tblDonDatHang.iMaKH,sTenKH,SUM(fSoluongmua) AS MAX_SL
FROM dbo.tblKhachHang,dbo.tblDonDatHang,dbo.tblChiTietDatHang
WHERE dbo.tblKhachHang.iMaKH=dbo.tblDonDatHang.iMaKH AND dbo.tblDonDatHang.iSoHD =
dbo.tblChiTietDatHang.iSoHD
GROUP BY tblDonDatHang.iMaKH,sTenKH
ORDER BY SUM(fSoluongmua) DESC

SELECT * FROM vw_KHmuaMAX

/*------f DSMH và giá bán trung bình*/

CREATE VIEW vw_DSMHvagiaTB


as
SELECT tblChiTietDatHang.sMahang,sTenhang,AVG(fGiaban) AS GIABAN_trungbinh
FROM tblMatHang,dbo.tblChiTietDatHang
WHERE tblMatHang.sMahang=tblChiTietDatHang.sMahang
GROUP BY tblChiTietDatHang.sMahang,sTenhang
SELECT * FROM vw_DSMHvagiaTB

/*------g Cập nhật giá bán theo qui tắc*/

CREATE VIEW vw_GBanmax


AS
SELECT tblChiTietDatHang.sMahang,sTenhang,MAX(tblChiTietDatHang.fGiaban)
AS[fGiamualonnhat]
FROM tblChiTietDatHang,tblDonDathang,tblMatHang
WHERE tblChiTietDatHang.iSoHD=tblDonDathang.iSoHD
AND tblMatHang.sMahang=tblChiTietDatHang.sMahang
AND (DAY(GETDATE())-DAY(dNgaydathang))<=30
GROUP BY tblChiTietDatHang.sMahang,sTenhang

SELECT *FROM vw_GBanmax

UPDATE tblMatHang
SET fGiahang= vw_GBanmax.fGiamualonnhat* 1.1
FROM vw_GBanmax, tblMatHang
WHERE tblMatHang.sMahang=vw_GBanmax.sMahang

SELECT *FROM tblMatHang

SELECT * from vw_tongtienvstongmh


/*2.b*/

/*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*/

create proc _09MHkhongban


@nam int
as
begin
select * from tblMatHang where tblMatHang.sMahang not in
(select sMahang from tblChiTietDatHang inner join
tblDondathang on tblChiTietDatHang.iSoHD=tblDonDatHang.iSoHD
where year(dngaydathang)=@nam)
end
exec _09MHkhongban 2017

/*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 đó*/

create procedure Thongtinhang


(@thang int,@nam int)
as
begin
select sTenhang,sum(tblMatHang.fSoluong) as [Tongsoluong],
sum(fGianhap*fSoluongnhap) as [Tongsotien]
from tblChiTietNhapHang, tblDonnhaphang, tblMatHang
where tblChiTietNhapHang.iSoHD =tblDonnhaphang.iSoHD
and tblChiTietNhapHang.sMahang= tblMatHang.sMahang
and YEAR (tblDonnhaphang.dNgaynhaphang)=@nam
and month (tblDonnhaphang.dNgaynhaphang)=@thang
group by tblMatHang.fSoluong, tblMatHang.sTenhang
end

exec Thongtinhang @thang='05',@nam='2019'

select * from tblNhanVien


/* Câu 3: Tạo thủ tục thực hiện tăng lương lên gấp rưỡi cho casc nhân viên đã bán
hàng với số lượng hàng nhiều hơn số lượng hàng truyền vào, số lượng hàng là tham số
truyền vào */

create procedure TangluongNV


@soluong float

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

exec TangluongNV @soluong='20'

select * from tblNhanVien

/*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 đó*/

CREATE PROCEDURE khachhang_09 (@thang INT,@nam INT)


AS
BEGIN
SELECT tblKhachHang.sTenKH
FROM tblDonDatHang,tblKhachHang
WHERE tblKhachHang.iMaKH=tblDonDatHang.iMaKH
AND YEAR(tblDonDatHang.dNgaydathang)=@nam
AND month(tblDondatHang.dNgaydathang)=@thang
END
exec khachhang_09 @nam='2018',@thang='1'

/*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*/

CREATE PROCEDURE giamgia_09(@giatri FLOAT, @mgg FLOAT)


AS
BEGIN
UPDATE tblChiTietDatHang
SET fMucgiamgia =@mgg
FROM tblMatHang,tblChiTietDatHang
WHERE tblChiTietDatHang.sMahang=tblMatHang.sMahang
AND (tblChiTietDatHang.fGiaban*tblChiTietDatHang.fSoluongmua)>@giatri
AND tblChiTietDatHang.fMucgiamgia=0
END
exec giamgia_09 @giatri='200000',@mgg='0.2'
SELECT * FROM tblChiTietDatHang;

-----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*/

ALTER table tblMatHang


ADD iTSNhap float default (0)

Create trigger tongmhsaukhinhap111


ON tblChiTietNhapHang
AFTER insert
As
Begin
declare @mh varchar(10), @slnhap float
select @mh = sMahang, @slnhap = fSoluongnhap from inserted
if exists (select * from tblMatHang where sMahang=@mh)
begin
update tblMatHang
set fSoluong=fSoluong+@slnhap
where sMahang=@mh
end
else
begin
Raiserror('Ma hang chua ton tai',16,10,@mh)
rollback tran
end
End

--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*/

create trigger KTgia


on tblChiTietNhapHang
after INSERT
as
begin
declare @gianhap float, @giah float, @mh varchar(10)
select @gianhap= fGianhap, @mh=sMahang from inserted

SELECT @giah= fGiahang FROM tblMatHang where sMahang=@mh


if(@gianhap<@giah)
BEGIN

PRINT('Nhap hang thanh cong')


end
else
BEGIN
PRINT('Gia nhap phai nho hon gia hang')
ROLLBACK tran
END
end

--Kiem tra

INSERT INTO tblChiTietNhapHang(iSoHD,sMahang,fGianhap,fSoluongnhap)


VALUES(0209,N'0907MH',90000,10);

select * from tblChiTietNhapHang

/*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 đó*/

--Thêm cột TongTienHang


ALTER TABLE dbo.tblKhachHang ADD fTongTienHang123 FLOAT
alter table tblKhachHang
drop column Tongtienhang
select *from tblKhachHang
UPDATE dbo.tblKhachHang
SET fTongTienHang123 = 0

-- Tạo trigger

CREATE TRIGGER trTudongtang_Tongtienhang


ON tblChiTietDatHang
AFTER INSERT
AS
BEGIN
Declare @MaKH int, @TongTien float
Select @MaKH = (SELECT tblDondathang.iMaKH
FROM tblDondathang INNER JOIN INSERTED ON
tblDondathang.iSoHD = INSERTED.iSoHD)
Select @TongTien = (SELECT sum(fGiaban*fSoluongmua-fSoluongmua*fMucgiamgia)
AS[Tong tien]
FROM INSERTED INNER JOIN tblDondathang ON
INSERTED.iSoHD = tblDondathang.iSoHD)
IF EXISTS (SELECT sTenKH FROM tblKhachHang WHERE @MaKH = iMaKH)
BEGIN
UPDATE tblKhachHang
SET fTongTienHang123 = fTongTienHang123 + @TongTien
WHERE @MaKH = iMaKH
END
ELSE
BEGIN
PRINT N'Khach hang chua dat hang'
ROLLBACK TRAN
END
END
---Kiểm tra

INSERT INTO tblChiTietDatHang(iSoHD,sMahang,fGiaban,fSoluongmua,fMucgiamgia)


VALUES(03,'0908MH',25000,5,0.2);

SELECT *FROM dbo.tblChiTietDatHang


SELECT *FROM dbo.tblKhachHang

/* 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*/

ALTER TABLE dbo.tblDonDatHang


ADD TongTienHang2 INT

select * from tblDonDatHang

CREATE TRIGGER tongtien_Tang


ON tblChiTietDatHang
AFTER INSERT
as
BEGIN
DECLARE @mhd INT
SELECT @mhd=iSoHD FROM inserted
IF EXISTS
(SELECT *
FROM tblDonDatHang
WHERE @mhd=iSoHD
GROUP BY iSoHD )
BEGIN
UPDATE tblDonDatHang
SET TongTienHang2 = TongTienHang2 +1
WHERE @mhd=iSoHD
END
ELSE
BEGIN
PRINT('ma hoa don khong ton tai')
END
END
INSERT INTO dbo.tblChiTietDatHang
VALUES(08,N'0903MH',100000,2,0.5);

--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

CREATE USER uses5 FOR LOGIN nguyenthihuyen321

GRANT INSERt,UPDATE,DELETE,SELECT
ON tblNhaCungCap
TO uses5

/*Câu 6: Tạo Role có tên “BPNhapHang” và cấp quyền:*/

CREATE ROLE BPNhapHang1

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:

CREATE ROLE BPNhapHang1;


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 SELECT ON tblMatHang TO BPNhapHang;

You might also like