USE ThuchanhSQL_TranThanhMinh_1810A01; /*================Bài 1.1==================*/ /*---Phần a---*/ CREATE TABLE tblLoaiHang( sMaloaihang nvarchar(10) NOT NULL, sTenloaihang nvarchar(30) NOT NULL, CONSTRAINT PK_tblLoaiHang 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, CONSTRAINT PK_tblMatHang PRIMARY KEY (sMahang) ); ALTER TABLE tblMatHang ADD CONSTRAINT FK_mathang_nhacungcap FOREIGN KEY (iMaNCC) REFERENCES tblNhaCungCap(iMaNCC); ALTER TABLE tblMatHang ADD CONSTRAINT FK_mathang_loaihang FOREIGN KEY (sMaloaihang) REFERENCES tblLoaiHang(sMaloaihang); /*---Phần b + d---*/ CREATE TABLE tblKhachHang( iMaKH int NOT NULL, sTenKH nvarchar(30)NULL, sDiachi nvarchar(50)NULL, sDienthoai nvarchar(12)NULL, CONSTRAINT PK_tblKhachHang PRIMARY KEY (iMaKH) ); CREATE TABLE tblNhanVien( iMaNV int NOT NULL, sTenNV nvarchar(30)NULL, sDiachi nvarchar(50)NULL, sDienthoai nvarchar(12)NULL, dNgaysinh date NULL, dNgayvaolam date NULL, fLuongcoban float NULL, fPhucap float NULL, CONSTRAINT PK_tblNhanVien PRIMARY KEY (iMaNV) ); /*---Phần c---*/ ALTER TABLE tblNhanVien ADD sCMND nvarchar(9) UNIQUE; /*---Phần e---*/ ALTER TABLE tblNhanVien ADD CONSTRAINT CK_Nhanvien CHECK (Year(GETDATE())- Year(dNgaysinh)>=18); /*---Phần f---*/ ALTER TABLE tblMatHang ADD sDonvitinh nvarchar(10); /*---Phần g---*/ CREATE INDEX ID_Tenhang ON tblMatHang(sTenhang); /*=====================Bài 1.2========================*/ /*---Phần a---*/ CREATE TABLE tblDonnhaphang( iSoHD int NOT NULL PRIMARY KEY, iMaNV int NOT NULL, dNgaynhaphang date NULL ); CREATE TABLE tblChiTietNhapHang( iSoHD int NOT NULL, sMahang nvarchar(10)NOT NULL, fGianhap float NULL, fSoluongnhap float NULL ); /*---Phần b---*/ ALTER TABLE tblChiTietNhapHang ADD CONSTRAINT PK_tblChiTietNhapHang PRIMARY KEY (iSoHD,sMahang); ALTER TABLE tblDonnhaphang ADD CONSTRAINT FK_nhanvien_donnhaphang FOREIGN KEY (iMaNV) REFERENCES tblNhanVien(iMaNV); ALTER TABLE tblChiTietNhapHang ADD CONSTRAINT FK_mathang_chitietnhaphang FOREIGN KEY (sMahang) REFERENCES tblMatHang(sMahang); ALTER TABLE tblChiTietNhapHang ADD CONSTRAINT FK_donnhaphang_chitietnhaphang FOREIGN KEY (iSoHD) REFERENCES tblDonnhaphang(iSoHD); /*---Phần c---*/ ALTER TABLE tblChiTietNhapHang ADD CONSTRAINT CK_ChiTietNhapHang CHECK (fGianhap>0); ALTER TABLE tblChiTietNhapHang ADD CONSTRAINT CK_CTnhaphang CHECK (fSoluongnhap>0); /*=====================Bài 1.3========================*/ /*---Phần a---*/ ALTER TABLE tblKhachHang ADD bGioitinh bit; /*---Phần b---*/ CREATE TABLE tblDonDatHang( iSoHD int NOT NULL, iMaNV int NOT NULL, iMaKH int NOT NULL, dNgaydathang date NULL, dNgaygiaohang date NULL, sDiachigiaohang nvarchar(50) NULL, CONSTRAINT PK_tblDonDatHang PRIMARY KEY (iSoHD) ); ALTER TABLE tblDonDatHang ADD CONSTRAINT CK_DonDatHang CHECK (dNgaygiaohang>=dNgaydathang); ALTER TABLE tblDonDatHang ADD CONSTRAINT CK_DF DEFAULT GETDATE() FOR dNgaydathang; ALTER TABLE tblDonDatHang ADD CONSTRAINT CK_DonDH CHECK (dNgaydathang<=GETDATE()); /*---Phần c---*/ ALTER TABLE tblDonDatHang ADD CONSTRAINT FK_khachhang_dondathang FOREIGN KEY (iMaKH) REFERENCES tblKhachHang; /*--- Phần d---*/ ALTER TABLE tblDonDatHang ADD CONSTRAINT FK_nhanvien_dondathang FOREIGN KEY (iMaNV) REFERENCES tblNhanVien; /*=====================Bài 1.4========================*/ /*---Phần a---*/ CREATE TABLE tblChiTietDatHang( iSoHD int NOT NULL, sMahang nvarchar(20)NOT NULL, fGiaban float NULL, fSoluongmua float NULL, fMucgiamgia float NULL ); /*---Phần b---*/ ALTER TABLE tblChiTietDatHang ALTER COLUMN sMahang nvarchar(10) NOT NULL; /*---Phần c---*/ ALTER TABLE tblChiTietDatHang ADD CONSTRAINT FK_dondathang_chitietdathang FOREIGN KEY (iSoHD) REFERENCES tblDonDatHang(iSoHD); ALTER TABLE tblChiTietDatHang ADD CONSTRAINT FK_mathang_chitietdathang FOREIGN KEY (sMahang) REFERENCES tblMatHang(sMahang); /*---Phần d---*/ ALTER TABLE tblChiTietDatHang ADD CONSTRAINT PK_tblChiTietDatHang PRIMARY KEY (iSoHD,sMahang); /*---Phần e---*/ ALTER TABLE tblChiTietDatHang ADD CONSTRAINT CK_chitietdathang CHECK (fGiaban>0); ALTER TABLE tblChiTietDatHang ADD CONSTRAINT CK_soluongmua CHECK (fSoluongmua>0); ALTER TABLE tblChiTietDatHang ADD CONSTRAINT CK_mucgiamgia CHECK (fMucgiamgia>0); /*--------------------BUỔI THỰC HÀNH SỐ 2----------------------*/ /*============Bai 2.1==============*/ /*---Phần a---*/ INSERT INTO tblLoaiHang VALUES (N'LH01',N'Máy Ảnh'),(N'LH02',N'Điện Thoại'),(N'LH03',N'Máy Tính'); SELECT * FROM tblLoaiHang; /*---Phần b---*/ INSERT INTO tblMatHang VALUES (N'MH01',N'Compact',NULL,N'LH01',10,500000,N'VNĐ'), (N'MH02',N'Bridge Camera',NULL,N'LH01',0,550000,N'VNĐ'), (N'MH03',N'DSLR',NULL,N'LH01',15,700000,N'VNĐ'), (N'MH04',N'Iphone 6s',NULL,N'LH02',2,800000,N'VNĐ'), (N'MH05',N'Samsung',NULL,N'LH02',20,5000000,N'VNĐ'), (N'MH06',N'Nokia',NULL,N'LH02',10,2500000,N'VNĐ'), (N'MH07',N'Hp',NULL,N'LH03',0,1500000,N'VNĐ'), (N'MH08',N'Asus',NULL,N'LH03',3,3500000,N'VNĐ'), (N'MH09',N'Dell',NULL,N'LH03',8,5500000,N'VNĐ'); SELECT * FROM tblMatHang; /*DELETE FROM tblMatHang WHERE sMahang=N'MH09';*/ /*---Phần c---*/ INSERT INTO tblNhaCungCap VALUES (N'Apple',N'Giao dịch Apple',N'Apple',N'0963527721'), (N'VDC',N'Giao dịch VDC',N'VDC',N'0964251116'), (N'FPT',N'Giao dịch FPT',N'FPT',N'0987263312'); SELECT * FROM tblNhaCungCap; /*---Phần d---*/ DELETE FROM tblMatHang WHERE fSoluong = 0; SELECT * FROM tblMatHang; /*---Phần e---*/ UPDATE tblNhanVien SET fPhucap = fPhucap+((fPhucap/100)*10) WHERE DATEDIFF(YEAR, dNgayvaolam, GETDATE()) > 5; SELECT * FROM tblNhanVien; /*=============Bai 2.2=============*/ /*---Phần a---*/ INSERT INTO tblKhachHang VALUES (1,N'Nguyễn Thị Hạnh',N'Hà Nội',N'0123457895',1), (2,N'Nguyễn Văn Tiến',N'Hưng Yên',N'0126958441',0), (3,N'Trần Văn Dũng',N'Bắc Giang',N'016589478',0); INSERT INTO tblKhachHang VALUES (4,N'Trần Thị Vân',N'Bắc Giang',N'016589418',1); SELECT * FROM tblKhachHang; INSERT INTO tblNhanVien VALUES (1,N'Nguyễn Duy Khánh',N'Hà Nội',N'0163496729','1999-11-07','2017-08- 11',7000000,900000,123456789), (2,N'Vũ Minh Cương',N'Hưng Yên',N'0163498899','1998-01-11','2016-08- 11',8500000,1500000,122291639), (3,N'Nguyễn Thị Nghiệp',N'Hưng Yên',N'0163401569','1998-07-11','2017-03- 25',6000000,900000,122678923); SELECT * FROM tblNhanVien; /*---Phần b---*/ INSERT INTO tblDonDatHang VALUES (1,1,1,'2017-09-15 00:00:00','2017-09-18 00:00:00',N'Hà Nội'), (2,1,2,'2017-09-06 00:00:00','2017-09-09 00:00:00',N'Hoàng Mai - Hà Nội'), (3,2,3,'2017-09-25 00:00:00','2017-10-10 00:00:00',N'Hưng Yên'); SELECT * FROM tblDonDatHang; /*---Phần c---*/ INSERT INTO tblChiTietDatHang VALUES (1,N'MH01',5000000,1,10), (1,N'MH08',4500000,1,5), (1,N'MH03',7000000,1,7), (2,N'MH04',6000000,1,10), (2,N'MH05',15000000,1,15), (2,N'MH06',7500000,1,7), (3,N'MH09',5000000,1,10), (3,N'MH04',6000000,1,10), (3,N'MH06',7500000,1,7); SELECT * FROM tblChiTietDatHang; /*---Phần d---*/ UPDATE tblChiTietDatHang SET fMucgiamgia = 10/100 WHERE tblChiTietDatHang.iSoHD IN (SELECT tblDonDatHang.iSoHD FROM tblDonDatHang WHERE MONTH(tblDonDatHang.dNgaydathang) = 7 AND YEAR(tblDonDatHang.dNgaydathang) = 2016); /*---Phần e---*/ DELETE FROM tblChiTietDatHang WHERE tblChiTietDatHang.iSoHD = 1; /*================Bài 2.3=================*/ /*---Phần a---*/ INSERT INTO tblDonDatHang VALUES (4,1,2,'2017-08-08','2017-08-18',N'20 Tân Mai, Hà Nội'), (5,2,2,'2017-07-16','2017-07-17',N'Bắc Giang, Hà Nội'), (6,2,2,'2017-06-03','2017-06-05',N'Hoàng Mai, Hà Nội'), (7,3,3,'2017-08-20','2017-08-28',N'20 Dạ Trạch, Hưng Yên'), (8,2,3,'2017-07-17','2017-07-25',N'Thanh Xuân, Hà Nội'), (9,2,3,'2017-06-04','2017-06-12',N'Việt Yên - Bắc Giang'); SELECT * FROM tblDonDatHang; INSERT INTO tblChiTietDatHang VALUES (4,N'MH01',10000000,2,10), (4,N'MH03',13500000,3,5), (4,N'MH04',14000000,2,7), (7,N'MH05',18000000,3,10), (7,N'MH06',30000000,2,15), (7,N'MH08',30000000,4,7); /*---Phần b---*/ INSERT INTO tblLoaiHang VALUES ('LH04',N'Thời Trang'), ('LH05',N'Sức Khỏe'); /*---Phần c---*/ INSERT INTO tblMatHang VALUES ('MH10', N'Quần bò', NULL, 'LH04', 20, 350000, 'VNĐ'), ('MH11', N'Quần âu', NULL, 'LH04', 20, 500000, 'VNĐ'), ('MH12', N'Áo thun', NULL, 'LH04', 20, 250000, 'VNĐ'), ('MH13', N'Giày nam', NULL, 'LH04', 20, 750000, 'VNĐ'), ('MH14', N'Giày nữ', NULL, 'LH04', 20, 640000, 'VNĐ'); /*---Phần d---*/ INSERT INTO tblChiTietDatHang VALUES (5,N'MH10',1000000,2,11), (5,N'MH11',1250000,3,6), (5,N'MH12',1600000,2,8), (5,N'MH13',190000,3,9); SELECT * FROM tblDonDatHang; /*---Phần e---*/ UPDATE tblChiTietDatHang SET fMucgiamgia = 5/100 FROM tblLoaiHang, tblDonDatHang WHERE tblDonDatHang.iSoHD = tblChiTietDatHang.iSoHD AND tblLoaiHang.sMaloaihang = tblChiTietDatHang.sMahang AND sTenloaihang = N'Thời Trang' AND GETDATE()<dNgaygiaohang; /*---Phần f---*/ DELETE FROM tblLoaiHang WHERE sTenloaihang = N'Sức Khỏe'; /*================Bài 2.4=================*/ /*---Phần a---*/ INSERT INTO tblKhachHang VALUES (4,N'Tạ Quang Trung',N'Hà Nội',N'0123457895',0), (5,N'Nguyễn Thị Kim Ngân',N'Vĩnh Phúc',N'09736483133',1), (6,N'Lê Ngân Giang',N'Vĩnh Yên',N'016574258',1); INSERT INTO tblNhanVien VALUES (4,N'Đỗ Thị Tuyên',N'Hà Nội',N'01653924400','1998-10-22','2017-11- 11',9000000,900000,0123842143), (5,N'Nguyễn Duy Thành',N'Hà Nội',N'0961787598','1998-05-07','2017-11- 11',9500000,1500000,0672364812), (6,N'Nguyễn Đức Duy',N'Vĩnh Phúc',N'0163401569','1998-07-11','2017-03- 25',6000000,900000,0791368743); /*---Phần b---*/ INSERT INTO tblDonnhaphang VALUES (1,1,'2017-12-15'), (2,2,'2017-11-29'), (3,1,'2017-12-22'); /*---Phần c---*/ INSERT INTO tblChiTietNhapHang VALUES (1,'MH01',5000,20), (2,'MH03',23000,15), (3,'MH04',76000,40), (1,'MH10',15000,100), (2,'MH11',20000,30), (3,'MH12',55000,25); /*---Phần d---*/ DELETE FROM tblChiTietNhapHang WHERE tblChiTietNhapHang.iSoHD = 1; /*--------------------BUỔI THỰC HÀNH SỐ 3----------------------*/ /*===================Bai 3.1=====================*/ /*---Phần a---*/ SELECT sTenhang FROM tblMatHang WHERE fSoluong < 100; /*---Phần b---*/ CREATE VIEW vwSoluongMH AS SELECT tblLoaiHang.sMaloaihang, sTenloaihang, COUNT(tblMatHang.sMahang) as SoLuong FROM tblMatHang INNER JOIN tblLoaiHang ON tblLoaiHang.sMaloaihang = tblMatHang.sMaloaihang GROUP BY tblLoaiHang.sMaloaihang,sTenloaihang; SELECT * FROM vwSoluongMH; SELECT * FROM tblMatHang; /*---Phần c---*/ SELECT tblChiTietDatHang.iSoHD, tblDonDatHang.iMaKH, SUM(fSoluongmua*fGiaban - fSoluongmua*fGiaban*fMucgiamgia/100) AS fSotien FROM tblChiTietDatHang, tblDonDatHang WHERE tblChiTietDatHang.iSoHD=tblDonDatHang.iSoHD GROUP BY tblChiTietDatHang.iSoHD, tblDonDatHang.iMaKH; /*---Phần d---*/ SELECT * FROM tblDonDatHang; SELECT * FROM tblChiTietDatHang; SELECT SUM(fSoluongmua*fGiaban - fSoluongmua*fGiaban*fMucgiamgia/100) AS fTongsotienhang, MONTH(dNgaydathang) AS iThang FROM tblChiTietDatHang, tblDonDatHang WHERE tblChiTietDatHang.iSoHD=tblDonDatHang.iSoHD AND YEAR(dNgaydathang) = 2016 GROUP BY MONTH(dNgaydathang); /*---Phần e---*/ SELECT tblMatHang.sMahang, sTenhang FROM (tblMatHang INNER JOIN tblChiTietDatHang ON tblMatHang.sMahang = tblChiTietDatHang.sMahang) INNER JOIN tblDonDatHang ON tblDonDatHang.iSoHD = tblChiTietDatHang.iSoHD WHERE YEAR(dNgaydathang)=2016 GROUP BY tblMatHang.sMahang, sTenhang HAVING COUNT(tblChiTietDatHang.sMahang)=1; /*=================Bai 3.2===================*/ /*---Phần a---*/ CREATE VIEW vwTongTienHang_TongMatHang AS SELECT tblDonnhaphang.iSoHD, tblMatHang.sMahang, tblMatHang.sTenhang, SUM(fGianhap*fSoluongnhap) AS Tongtienhang,COUNT(tblChiTietNhapHang.sMahang) AS Tongsomathang FROM tblMatHang INNER JOIN tblChiTietNhapHang ON tblMatHang.sMahang = tblChiTietNhapHang.sMahang INNER JOIN tblDonnhaphang ON tblDonnhaphang.iSoHD = tblChiTietNhapHang.iSoHD GROUP BY tblMatHang.sMahang,tblMatHang.sTenhang,tblDonnhaphang.iSoHD; SELECT * FROM vwTongTienHang_TongMatHang; /*---Phần b---*/ SELECT*FROM tblMatHang WHERE tblMatHang.sMahang NOT IN ( SELECT tblChiTietNhapHang.sMahang FROM tblChiTietNhapHang INNER JOIN tblDonnhaphang ON tblChiTietNhapHang.iSoHD=tblDonnhaphang.iSoHD WHERE MONTH(tblDonnhaphang.dNgaynhaphang)= 6 AND YEAR(tblDonnhaphang.dNgaynhaphang)=2017); /*---Phần c---*/ SELECT sTenNhaCC, tblLoaiHang.sTenloaihang, sTenhang FROM tblNhaCungCap INNER JOIN tblMatHang ON tblNhaCungCap.iMaNCC = tblMatHang.iMaNCC INNER JOIN tblLoaiHang ON tblLoaiHang.sMaloaihang = tblMatHang.sMaloaihang WHERE tblLoaiHang.sTenloaihang = N'Máy Ảnh'; /*---Phần d---*/ CREATE VIEW vwSoluongloaihang AS SELECT tblLoaiHang.sMaloaihang, SUM(tblChiTietDatHang.fSoluongmua) AS Soluongdaban FROM tblLoaiHang INNER JOIN tblMatHang ON tblLoaiHang.sMaloaihang=tblMatHang.sMaloaihang INNER JOIN tblChiTietDatHang ON tblChiTietDatHang.sMahang=tblMatHang.sMahang INNER JOIN tblDonDatHang ON tblDonDatHang.iSoHD = tblChiTietDatHang.iSoHD WHERE YEAR(dNgaygiaohang)=2016 GROUP BY tblLoaiHang.sMaloaihang; SELECT*FROM vwSoluongloaihang; /*---Phần e---*/ SELECT tblNhanVien.iMaNV, SUM(fSoluongmua*fGiaban - fSoluongmua*fGiaban*fMucgiamgia/100) AS Tongtienhangdaban FROM tblNhanVien INNER JOIN tblDonDatHang ON tblNhanVien.iMaNV=tblDonDatHang.iMaNV INNER JOIN tblChiTietDatHang ON tblChiTietDatHang.iSoHD=tblDonDatHang.iSoHD WHERE YEAR(dNgaygiaohang)=2016 GROUP BY tblNhanVien.iMaNV; /*===================Bai 3.3=====================*/ /*---Phần a---*/ SELECT iMaKH, sTenKH, bGioitinh FROM tblKhachHang WHERE bGioitinh=1 AND iMaKH NOT IN (SELECT iMaKH FROM tblDonDatHang); /*---Phần b---*/ SELECT * FROM tblChiTietDatHang; SELECT * FROM tblMatHang; SELECT tblLoaiHang.sMaloaihang, tblMatHang.sMahang, sTenloaihang, sTenhang, fSoluongmua FROM tblChiTietDatHang RIGHT JOIN tblMatHang ON tblChiTietDatHang.sMahang = tblMatHang.sMahang INNER JOIN tblLoaiHang ON tblLoaiHang.sMaloaihang = tblMatHang.sMaloaihang WHERE tblLoaiHang.sTenloaihang = N'Thời Trang'; /*---Phần c---*/ SELECT tblKhachHang.iMaKH, sTenKH, bGioitinh, SUM(fSoluongmua*fGiaban - fSoluongmua*fGiaban*fMucgiamgia/100) AS Tongtiendathang FROM tblKhachHang INNER JOIN tblDonDatHang ON tblKhachHang.iMaKH=tblDonDatHang.iMaKH INNER JOIN tblChiTietDatHang ON tblChiTietDatHang.iSoHD=tblDonDatHang.iSoHD WHERE bGioitinh=0 GROUP BY tblKhachHang.iMaKH, sTenKH, bGioitinh; /*---Phần d---*/ CREATE VIEW vwSoluongKHtheoGT AS SELECT bGioitinh, COUNT(tblKhachHang.bGioitinh) AS SoLuong FROM tblKhachHang GROUP BY bGioitinh; SELECT * FROM vwSoluongKHtheoGT; /*---Phần e---*/ CREATE VIEW vwKHmuanhieunhat AS SELECT TOP 3 tblKhachHang.sTenKH, COUNT(tblDonDatHang.iSoHD) AS SoLuongMuaHang FROM tblKhachHang INNER JOIN tblDonDatHang ON tblKhachHang.iMaKH = tblDonDatHang.iMaKH INNER JOIN tblChiTietDatHang ON tblChiTietDatHang.iSoHD = tblDonDatHang.iSoHD GROUP BY tblKhachHang.sTenKH ORDER BY SoLuongMuaHang DESC; SELECT * FROM vwKHmuanhieunhat; /*---Phần f---*/ CREATE VIEW vwDanhsachmathang_GiabanTB AS SELECT tblMatHang.sMahang, tblMatHang.sTenhang, AVG(fGiaban) AS TBGiaban FROM tblMatHang INNER JOIN tblChiTietDatHang ON tblMatHang.sMahang=tblChiTietDatHang.sMahang GROUP BY tblMatHang.sMahang,tblMatHang.sTenhang; SELECT * FROM vwDanhsachmathang_GiabanTB; /*---Phần g---*/ UPDATE tblMatHang SET fGiahang=(SELECT MAX(fGiaban) FROM tblChiTietDatHang INNER JOIN tblDonDatHang ON tblDonDatHang.iSoHD=tblChiTietDatHang.iSoHD WHERE DATEDIFF(YEAR,dNgaydathang,GETDATE())<=30 AND tblChiTietDatHang.sMahang=tblMatHang.sMahang GROUP BY tblChiTietDatHang.sMahang)*1.1; SELECT * FROM tblMatHang; /*--------------------BUỔI THỰC HÀNH SỐ 4----------------------*/ /*====================Bai 4.1============================*/ /*---Phần a---*/ CREATE PROCEDURE spMHkhongbanduoc @Year Nvarchar(30) AS BEGIN SELECT*FROM tblMatHang WHERE tblMatHang.sMahang NOT IN (SELECT sMahang FROM tblChiTietDatHang INNER JOIN tblDonDatHang ON tblDonDatHang.iSoHD=tblChiTietDatHang.iSoHD WHERE YEAR(tblDonDatHang.dNgaydathang)= YEAR(@Year)) END GO EXECUTE spMHkhongbanduoc N'2017'; /*---Phần b---*/ CREATE PROCEDURE spTangluongchoNhanVien @Soluonghang INT, @Year INT AS BEGIN UPDATE tblNhanVien SET fLuongcoban = fLuongcoban*1.5 WHERE tblNhanVien.iMaNV IN (SELECT tblNhanVien.iMaNV FROM tblDonDatHang INNER JOIN tblChiTietDatHang ON tblDonDatHang.iSoHD=tblChiTietDatHang.iSoHD INNER JOIN tblNhanVien ON tblNhanVien.iMaNV=tblDonDatHang.iMaNV WHERE YEAR(dNgaydathang)=@Year GROUP BY tblNhanVien.iMaNV HAVING SUM(tblChiTietDatHang.fSoluongmua)>@Soluonghang) END GO EXEC spTangluongchoNhanVien 3,2017; SELECT * FROM tblNhanVien; --check /*---Phần c---*/ CREATE PROCEDURE spThongke @Mahang Nvarchar(10) AS BEGIN SELECT tblMatHang.sMahang, SUM(fSoluongmua) AS fTongsoluonghangbanduoc FROM tblMatHang INNER JOIN tblChiTietDatHang ON tblMatHang.sMahang=tblChiTietDatHang.sMahang WHERE tblMatHang.sMahang=@Mahang GROUP BY tblMatHang.sMahang END GO EXECUTE spThongke N'MH01'; /*---Phần d---*/ CREATE PROCEDURE spTongtienhang @Year INT AS BEGIN SELECT SUM(fGiaban*fSoluongmua-fGiaban*fSoluongmua*fMucgiamgia/100) AS Tongtienhang FROM tblChiTietDatHang INNER JOIN tblDonDatHang ON tblDonDatHang.iSoHD=tblChiTietDatHang.iSoHD WHERE YEAR(dNgaygiaohang)=@Year END GO EXECUTE spTongtienhang 2017; /*---Phần e---*/ CREATE TRIGGER Tg_Them_Sua ON tblChiTietDatHang FOR INSERT, UPDATE AS BEGIN DECLARE @Giaban FLOAT, @Giahang FLOAT, @Mahang Nvarchar(10) SELECT @Mahang = sMahang, @Giaban = fGiaban FROM INSERTED SELECT @Giahang = (SELECT fGiahang FROM tblMatHang WHERE sMahang=@Mahang) IF (@Giaban < @Giahang) BEGIN PRINT'Giá bán ra nhỏ hơn giá gốc, xin kiểm tra lại!'; ROLLBACK TRANSACTION; END END GO INSERT INTO tblChiTietDatHang VALUES(12,N'MH13',208000,1,10); SELECT * FROM tblChiTietDatHang; SELECT * FROM tblMatHang; /*---Phần f---*/ CREATE TRIGGER Tg_Dambao ON tblChiTietDatHang FOR INSERT AS BEGIN DECLARE @slhienco float /* Số lượng hàng hiện có */ DECLARE @slbanra float /* Số lượng hàng được bán */ DECLARE @Mahang nvarchar(10) /* Mã hàng được bán */ SELECT @Mahang = sMahang, @slbanra = fSoluongmua FROM INSERTED SELECT @slhienco = (SELECT fSoluong FROM tblMatHang WHERE sMahang=@Mahang) /*Nếu số lượng hàng hiện có nhỏ hơn số lượng bán thì huỷ bỏ thao tác bổ sung dữ liệu */ IF (@slhienco < @slbanra) BEGIN PRINT(N'Số lượng hàng bán ra vượt quá số lượng hàng hiện có') ROLLBACK TRANSACTION END /* Nếu dữ liệu hợp lệ thì giảm số lượng hàng hiện có */ IF (@slhienco >= @slbanra) BEGIN UPDATE tblMatHang SET fSoluong = fSoluong-@slbanra WHERE sMahang = @Mahang END END GO INSERT INTO tblChiTietDatHang VALUES (12,N'MH11',300000,21,11); SELECT * FROM tblMatHang; SELECT * FROM tblChiTietDatHang; /*======================Bai 4.2===========================*/ /*---Phần a---*/ CREATE PROCEDURE spThembanghi @iSoHD INT, @MaNV INT, @MaKH INT, @Ngaygiaohang DATETIME, @Ngaydathang DATETIME, @Diachigiaohang Nvarchar(50) AS IF (DAY(@Ngaydathang)<DAY(GETDATE()) AND @Ngaygiaohang>=@Ngaydathang) BEGIN INSERT INTO tblDonDatHang(iSoHD,iMaNV,iMaKH,dNgaygiaohang,dNgaydathang,sDiachigiaohang) VALUES(@iSoHD,@MaNV,@MaKH,@Ngaygiaohang,@Ngaydathang,@Diachigiaohang) END ELSE PRINT 'Điều kiện sai.Vui lòng kiểm tra lại!'; GO EXECUTE spThembanghi '15','1','2','2017-10-03','2017-10-05',N'20 Hoàng Mai, Hà Nội'; SELECT * FROM tblDonDatHang; /*---Phần b---*/ ALTER TABLE tblKhachHang ADD TongTienHang FLOAT; --Lấy ra được tổng tiền hàng của từng khách hàng SELECT tblKhachHang.iMaKH, SUM(fGiaban*fSoluongmua- fGiaban*fSoluongmua*fMucgiamgia/100) AS TongTienHang FROM tblChiTietDatHang INNER JOIN tblDonDatHang ON tblChiTietDatHang.iSoHD = tblDonDatHang.iSoHD INNER JOIN tblKhachHang ON tblKhachHang.iMaKH = tblDonDatHang.iMaKH GROUP BY tblKhachHang.iMaKH; --Tạo Trigger CREATE TRIGGER Tg_Tongtienhang ON tblChiTietDatHang FOR INSERT AS BEGIN DECLARE @TongTienHang FLOAT, @MaKH INT, @iSoHD int SELECT @iSoHD = iSoHD FROM INSERTED SELECT @MaKH = (SELECT tblDonDatHang.iMaKH FROM tblDonDatHang WHERE tblDonDatHang.iSoHD = @iSoHD) SELECT @TongTienHang = (SELECT (fGiaban*fSoluongmua- fGiaban*fSoluongmua*fMucgiamgia/100) AS TongTienHang FROM INSERTED) IF NOT EXISTS (SELECT iMaKH FROM tblDonDatHang WHERE tblDonDatHang.iMaKH = @MaKH) BEGIN PRINT N'Khách hàng chưa đặt hàng' ROLLBACK TRAN END ELSE BEGIN UPDATE tblKhachHang SET TongTienHang = TongTienHang + @TongTienHang WHERE iMaKH = @MaKH END END GO INSERT INTO tblDonDatHang VALUES(14,2,3,'2017-10-20','2017-10-25',N'Bắc Giang'); INSERT INTO tblChiTietDatHang VALUES (14,N'MH15',200000,1,10); SELECT * FROM tblChiTietDatHang; /*---Phần c---*/ CREATE PROCEDURE spTenmathang @TenNCC Nvarchar(50), @Year INT AS BEGIN SELECT sTenhang, tblNhaCungCap.iMaNCC FROM tblNhaCungCap INNER JOIN tblMatHang ON tblNhaCungCap.iMaNCC=tblMatHang.iMaNCC INNER JOIN tblChiTietNhapHang ON tblMatHang.sMahang=tblChiTietNhapHang.sMahang INNER JOIN tblDonnhaphang ON tblDonnhaphang.iSoHD=tblChiTietNhapHang.iSoHD WHERE YEAR(dNgaynhaphang)=@Year AND sTenNhaCC=@TenNCC END GO EXECUTE spTenmathang N'Apple','2017'; /*---Phần d---*/ CREATE PROCEDURE spTenNCC @TenMH Nvarchar(50) AS BEGIN SELECT sTenNhaCC, DAY(tblDonnhaphang.dNgaynhaphang) AS Ngaynhaphang FROM tblNhaCungCap INNER JOIN tblMatHang ON tblNhaCungCap.iMaNCC=tblMatHang.iMaNCC INNER JOIN tblChiTietNhapHang ON tblMatHang.sMahang=tblChiTietNhapHang.sMahang INNER JOIN tblDonnhaphang ON tblDonnhaphang.iSoHD=tblChiTietNhapHang.iSoHD WHERE sTenhang=@TenMH END GO EXECUTE spTenNCC N'Laptop'; /*---Phần e---*/ ALTER TABLE tblDonDatHang ADD Tongsomathang FLOAT; SELECT * FROM tblDonDatHang; CREATE TRIGGER Tg_Giatritongsomathang ON tblChiTietDatHang FOR INSERT AS BEGIN DECLARE @iSoHD INT SELECT @iSoHD = (SELECT iSoHD FROM INSERTED) UPDATE tblDonDatHang SET Tongsomathang = Tongsomathang + 1 WHERE iSoHD = @iSoHD END GO INSERT INTO tblChiTietDatHang VALUES (10,N'MH12',2000000,4,20); SELECT * FROM tblDonDatHang; --check SELECT * FROM tblChiTietDatHang; SELECT * FROM tblMatHang; /*========================Bài 4.3======================*/ /*---Phần a---*/ CREATE PROCEDURE spMathang @Mahang Nvarchar(10),@Tenhang Nvarchar(30),@MaNCC INT,@Maloaihang Nvarchar(10),@Soluong Float,@Giahang Float,@Donvitinh Nvarchar(10) AS BEGIN INSERT INTO tblMatHang VALUES(@Mahang,@Tenhang,@MaNCC,@Maloaihang,@Soluong,@Giahang,@Donvitinh) END GO EXECUTE spMathang 'MH16', N'Áo phông',1,'LH02',25,453000,'VNĐ'; SELECT * FROM tblMatHang; /*---Phần b---*/ CREATE PROCEDURE spGiamgiaMH @Giatri FLOAT, @Mucgiamgia FLOAT AS BEGIN UPDATE tblChiTietDatHang SET tblChiTietDatHang.fMucgiamgia=@Mucgiamgia FROM tblChiTietDatHang INNER JOIN tblDonDatHang ON tblChiTietDatHang.iSoHD=tblDonDatHang.iSoHD WHERE MONTH(GETDATE())=MONTH(tblDonDatHang.dNgaydathang)AND fMucgiamgia=0 AND (fGiaban*fSoluongmua)>=@Giatri END GO EXECUTE spGiamgiaMH 5000,10; SELECT * FROM tblChiTietDatHang; /*---Phần c---*/ CREATE PROCEDURE spThemDDH_CTDH @chuoi nvarchar(256), @sMahang nvarchar(10)=null, @iSoHD int , @fGiaban float =null, @fSoluongmua int = null, @fMucgiamgia float=0, @iMaNV int, @iMaKH int, @dNgaygiaohang nvarchar(20), @dNgaydathang nvarchar(20), @sDiachigiaohang nvarchar(20) AS BEGIN WHILE LEN(@chuoi) <> 0 BEGIN SET @sMahang = SUBSTRING(@chuoi , 1 , CHARINDEX(',', @chuoi)-1) SET @chuoi = SUBSTRING(@chuoi ,CHARINDEX(',', @chuoi)+1, LEN(@chuoi)) IF CHARINDEX(',', @chuoi) = 0 BEGIN SET @fSoluongmua = SUBSTRING(@chuoi , 1 , LEN(@chuoi)) SET @chuoi = '' SET @fGiaban = (SELECT fGiahang FROM tblMatHang WHERE sMahang = @sMahang) END ELSE BEGIN SET @fSoluongmua = SUBSTRING(@chuoi , 1 , CHARINDEX(',', @chuoi)-1) SET @chuoi = SUBSTRING(@chuoi ,CHARINDEX(',', @chuoi)+1, LEN(@chuoi)) SET @fGiaban = (SELECT fGiahang FROM tblMatHang WHERE sMahang = @sMahang) END INSERT INTO tblDonDatHang(iSoHD,iMaNV,iMaKH,dNgaygiaohang,dNgaydathang,sDiachigiaohang) VALUES(@iSoHD,@iMaNV,@iMaKH,@dNgaygiaohang,@dNgaydathang, @sDiachigiaohang) INSERT INTO tblChiTietDatHang(iSoHD,sMahang,fGiaban,fSoluongmua,fMucgiamgia) VALUES(@iSoHD,@sMahang,@fGiaban,@fSoluongmua,@fMucgiamgia) SET @iSoHD = @iSoHD +1 END END GO spThemDDH_CTDH @chuoi = 'MH12,6,MH03,9,MH14,10', @iSoHD =19 , @iMaNV=1, @iMaKH =2, @dNgaygiaohang =N'2017-10-08', @dNgaydathang =N'2017-10-06', @sDiachigiaohang= N'Hà Nội'; SELECT*FROM tblChiTietDatHang; SELECT*FROM tblDonDatHang; DELETE FROM tblDonDatHang WHERE iSoHD=17; /*---Phần d---*/ CREATE TRIGGER Tg_XoaNV ON tblNhanVien AFTER INSERT AS BEGIN DECLARE @MaNVX int, @MaNVNhap int, @MaNVXuat int, @SoNVXNhap int, @SoNVXXuat int, @SoNVKXNhap int, @SoNVKXXuat int SELECT @MaNVX = (SELECT iMaNV FROM INSERTED) SELECT @SoNVXNhap = (SELECT COUNT(iSoHD) AS tongHD FROM tblDonnhaphang WHERE tblDonnhaphang.iMaNV = @MaNVX) SELECT @SoNVXXuat = (SELECT COUNT(iSoHD) FROM tblDonDatHang WHERE tblDonDatHang.iMaNV = @MaNVX) SELECT @SoNVKXNhap = (SELECT TOP 1 COUNT(iSoHD) FROM tblDonnhaphang HAVING COUNT(iSoHD) < @SoNVXNhap) SELECT @SoNVKXXuat = (SELECT TOP 1 COUNT(iSoHD) FROM tblDonDatHang HAVING COUNT(iSoHD) < @SoNVXXuat) SELECT @MaNVNhap = (SELECT iMaNV FROM tblDonnhaphang WHERE tblDonnhaphang.iSoHD= @SoNVKXNhap) SELECT @MaNVXuat = (SELECT iMaNV FROM tblDonDatHang WHERE tblDonDatHang.iSoHD= @SoNVKXXuat) UPDATE tblDonnhaphang SET iMaNV=@MaNVNhap WHERE iMaNV=@MaNVX UPDATE tblDonDatHang SET iMaNV=@MaNVXuat WHERE iMaNV=@MaNVX END
SELECT*FROM tblNhanVien; SELECT*FROM tblDonnhaphang; SELECT COUNT(iSoHD) as tongsoHD, iMaNV FROM tblDonDatHang GROUP BY iMaNV HAVING COUNT(iSoHD)<8;