Sunteți pe pagina 1din 15

/*----------------Buổi thực hành 1------------------*/

CREATE DATABASE ThuchanhSQL_TranThanhMinh_1810A01;


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;

S-ar putea să vă placă și