You are on page 1of 14

Software Group Leader SGL

By Member:

htplasma, Plassma :for Vn-zoom

Bi tp tng hp SQL And p n

S dng cu lnh SELECT vit cc yu cu truy vn d liu sau y:


2. 1 Cho bit danh sch cc i tc cung cp hng cho cng ty.
2. 2 M hng, tn hng v s lng ca cc mt hng hin c trong cng ty.
2. 3 H tn v i ch v nm bt u lm vic ca cc nhn vin trong
cng ty.
2. 4 a ch v in thoi ca nh cung cp c tn giao dch VINAMILK l g?
2. 5 Cho bit m v tn ca cc mt hng c gi ln hn 100000 v s lng c t hn
50.
2. 6 Cho bit mi mt hng trong cng ty do ai cung cp.
2. 7 Cng ty Vit Tin cung cp nhng mt hng no?
2. 8 Loi hng thc phm do nhng cng ty no cung cp v a ch ca cc cng ty
l g?
2. 9 Nhng khch hng no (tn giao dch) t mua mt hng Sa hp XYZ ca
cng ty?
2. 10 n t hng s 1 do ai t v do nhn vin no lp, thi gian v a im giao
hng l u?
2. 11 Hy cho bit s tin lng m cng ty phi tr cho mi nhn vin l bao nhiu
(lng = lng c bn + ph cp).
2. 12 Trong n t hng s 3 t mua nhng mt hng no v s tin m khch hng
phi tr cho mi mt hng l bao nhiu (s tin phi tr cho mi mt hang tnh theo cng
thc
SOLUONGGIABAN SOLUONGGIABANMUCGIAMGIA/100)
2. 13 Hy cho bit c nhng khch hng no li chnh l i tc cung cp hng ca cng
ty (tc l c cng tn giao dch).
// thm 2. 14 Trong cng ty c nhng nhn vin no c cng ngy sinh?
2. 15 Nhng n t hng no yu cu giao hng ngay ti cng ty t hng v nhng
n l ca cng ty no? (Q3-3)
//2. 16 Cho bit tn cng ty, tn giao dch, a ch v in thoi ca cc khch hng v
cc nh cung cp hng cho cng ty.
2. 17 Nhng mt hng no cha tng c khch hng t mua?(Q4-3)
//2. 18 Nhng nhn vin no ca cng ty cha tng lp bt k mt ho n t hng
no?
Tng hp SQL -

SGL Plassma :

Software Group Leader SGL

By Member:

htplasma, Plassma :for Vn-zoom

2. 19 Nhng nhn vin no ca cng ty c lng c bn cao nht?


2. 20 Tng s tin m khch hng phi tr cho mi n t hng l bao nhiu?
2. 21 Trong nm 2003, nhng mt hng no ch c t mua ng mt ln.
//2. 22 Hy cho bit mi mt khch hng phi b ra bao nhiu tin t mua hng
Ca cng ty?
2. 23 Mi mt nhn vin ca cng ty lp bao nhiu n t hng (nu nhn vin
cha h lp mt ho n no th cho kt qu l 0)
//2. 24 Cho bit tng s tin hng m ca hng thu c trong mi thng ca nm 2003
(thi c gian tnh theo ngy t hng).
2. 25 Hy cho bit tng s tin li m cng ty thu c t mi mt hng trong nm
2003.
//2. 26 Hy cho bit tng s lng hng ca mi mt hng m cng ty c (tng s
lng hng hin c v bn).
//2. 27 Nhn vin no ca cng ty bn c s lng hng nhiu nht v s lng hng
bn c ca nhng nhn vin ny l bao nhiu?
2. 28 n t hng no c s lng hng c t mua t nht?
Lm thm
//2. 29 S tin nhiu nht m mi khch hng tng b ra t hng trong cc n t
hng l bao nhiu?
2. 30 Mi mt n t hng t mua nhng mt hng no v tng s tin m mi n
t hng phi tr l bao nhiu?
2. 31 Hy cho bit mi mt loi hng bao gm nhng mt hng no, tng s lng
hng ca mi loi v tng s lng ca tt c cc mt hng hin c trong cng ty l bao
nhiu?
2. 32 Thng k xem trong nm 2003, mi mt mt hng trong mi thng v trong c
nm bn c vi s lng bao nhiu
Yu cu: Kt qu c hin th di dng bng, hai ct: ct u l m hng v tn
hng, cc ct cn li tng ng vi cc thng t 1 n 12 v c nm. Nh vy mi dng
trong kt qu cho bit s lng hng bn c mi thng v trong c nm ca mi mt
hng.
S dng cu lnh UPDATE thc hin cc yu cu sau:
2. 33 Cp nht li gi tr ca trng NGAYCHUYENHANG ca nhng bn ghi c
NGAYCHUYENHANG cha xc nh (NULL) trong bng DONDATHANG
Bng vi gi tr ca trng NGAYDATHANG.
2. 34 Tng s lung hng ca mhng mt hng do cng ty VINAMILK cung cp ln
gp i.
2. 35 Cp nht gi tr ca trng NOIGIAOHANG trong bng DONDATHANG bng
a ch ca khch hng ii vi nhng n t hng cha xc nh c ni giao hng
(gi tr trng NOIGIAOHANG bng NULL).
2. 36 Cp nht li d liu trong bng KHACHHANG sao cho nu tn cng ty v tn
giao dch ca khch hng trng vi tn cng ty v tn giao dch ca mt nh cung cp
no th a ch, in thoi, fax v e-mail phi ging nhau.
Tng hp SQL -

SGL Plassma :

Software Group Leader SGL

By Member:

htplasma, Plassma :for Vn-zoom

2. 37 Tng lng ln gp ri cho nhng nhn vin bn c s lng hng nhiu hn


100 trong nm 2003.
2. 38 Tng ph cp ln bng 50% lng cho nhng nhn vin bn c hng nhiu
Nht.
2. 39 Gim 25% lng ca nhng nhn vin trong nm 2003 khng lp c bt k
n t hng no.
2. 40 Gi s trong bng DONDATHANG c thm trng SOTIEN cho bit s tin m
khch hng phi tr trong mi n t hng. Hy tnh gi tr cho trng ny.
Thc hin cc yu cu di y bng cu lnh DELETE.
2. 41 Xo khi bng NHANVIEN nhng nhn vin lm vic trong cng ty qu 40
nm.
2. 42 Xo nhng n t hng trc nm 2000 ra khi c s d liu.
2. 43 Xo khi bng LOAIHANG nhng loi hng hin khng c mt hng.
2. 44 Xo khi bng KHACHHANG nhng khch hng hin khng c bt k n t
hng no cho cng ty.
2. 45 Xo khi bng MATHANG nhng mt hng c s lng bng 0 v khn c
t mua trong bt k n t hng no.
Li gii:
Cc php ni c s dng trong cc truy vn di y s dng c php ca SQL2.
2.1 SELECT macongty,tencongty,tengiaodich
FROM nhacungcap
2.2 SELECT mahang,tenhang,soluong
FROM mathang
2.3 SELECT ho,ten,year(ngaylamviec) AS namlamviec
FROM nhanvien
2.4 SELECT diachi,dienthoai
FROM nhacungcap
WHERE tengiaodich='VINAMILK'
2.5 SELECT mahang,tenhang
FROM mathang
WHERE giahang>100000 AND soluong<50
2.6 SELECT mahang,tenhang,
nhacungcap.macongty,tencongty,tengiaodich
FROM mathang INNER JOIN nhacungcap
ON mathang.macongty=nhacungcap.macongty
2.7 SELECT mahang,tenhang
FROM mathang INNER JOIN nhacungcap
ON mathang.macongty=nhacungcap.macongty
WHERE tencongty='Vit Tin'
2.8 SELECT DISTINCT nhacungcap.macongty,tencongty,diachi
FROM (loaihang INNER JOIN mathang
Tng hp SQL -

SGL Plassma :

Software Group Leader SGL

By Member:

htplasma, Plassma :for Vn-zoom

ON loaihang.maloaihang=mathang.maloaihang)
INNER JOIN nhacungcap
ON mathang.macongty=nhacungcap.macongty
WHERE tenloaihang='Thc phm'
2.9 SELECT DISTINCT tengiaodich
FROM ((mathang INNER JOIN chitietdathang
ON mathang.mahang=chitietdathang.mahang)
INNER JOIN dondathang
ON chitietdathang.sohoadon=dondathang.sohoadon)
INNER JOIN khachhang
ON dondathang.makhachhang=khachhang.makhachhang
WHERE tenhang='Sa hp'
2.10 SELECT dondathang.manhanvien,ho,ten,
ngaygiaohang,noigiaohang
FROM nhanvien INNER JOIN dondathang
ON nhanvien.manhanvien=dondathang.manhanvien
WHERE sohoadon=1
2.11 SELECT manhanvien,ho,ten,
luongcoban + CASE
WHEN phucap IS NULL THEN 0
ELSE phucap
END AS luong
FROM nhanvien
2.12 SELECT a.mahang,tenhang,
a.soluong*giaban*(1-mucgiamgia/100) AS sotien
FROM chitietdathang AS a INNER JOIN mathang AS b
ON a.mahang=b.mahang
2.13 SELECT makhachhang,khachhang.tencongty,
khachhang.tengiaodich
FROM khachhang INNER JOIN nhacungcap
ON khachhang.tengiaodich=nhacungcap.tengiaodich
2.14 SELECT a.ho,a.ten,b.ho,b.ten,b.ngaysinh
FROM nhanvien a INNER JOIN nhanvien b
ON a.ngaysinh=b.ngaysinh AND
a.manhanvien<>b.manhanvien
2.15 SELECT sohoadon,tencongty,tengiaodich,
ngaydathang,noigiaohang
FROM dondathang INNER JOIN khachhang
ON dondathang.noigiaohang=khachhang.diachi
2.16 SELECT tencongty,tengiaodich,diachi,dienthoai
FROM khachhang
UNION ALL
SELECT tencongty,tengiaodich,diachi,dienthoai
FROM nhacungcap
Tng hp SQL -

SGL Plassma :

Software Group Leader SGL

By Member:

htplasma, Plassma :for Vn-zoom

2.17 SELECT mahang,tenhang


FROM mathang
WHERE NOT EXISTS (SELECT mahang FROM chitietdathang
WHERE mahang=mathang.mahang)
2.18 SELECT manhanvien,ho,ten
FROM nhanvien
WHERE NOT EXISTS (SELECT manhanvien FROM dondathang
WHERE manhanvien=nhanvien.manhanvien)
2.19 SELECT manhanvien,ho,ten,luongcoban
FROM nhanvien
WHERE luongcoban=(SELECT MAX(luongcoban) FROM nhanvien)
2.20 SELECT dondathang.sohoadon,dondathang.makhachhang,
tencongty,tengiaodich,
SUM(soluong*giaban-soluong*giaban*mucgiamgia/100)
FROM (khachhang INNER JOIN dondathang
ON khachhang.makhachhang=dondathang.makhachhang)
INNER JOIN chitietdathang
ON dondathang.sohoadon=chitietdathang.sohoadon
GROUP BY dondathang.makhachhang,tencongty,
tengiaodich,dondathang.sohoadon
2.21 SELECT mathang.mahang,tenhang
FROM (mathang INNER JOIN chitietdathang
ON mathang.mahang=chitietdathang.mahang)
iNNER JOIN dondathang
ON chitietdathang.sohoadon=dondathang.sohoadon
WHERE YEAR(ngaydathang)=2003
GROUP BY mathang.mahang,tenhang
HAVING COUNT(chitietdathang.mahang)=1
2.22 SELECT khachhang.makhachhang,tencongty,tengiaodich,
SUM(soluong*giaban-soluong*giaban*mucgiamgia/100)
FROM (khachhang INNER JOIN dondathang
ON khachhang.makhachhang = dondathang.makhachhang)
INNER JOIN chitietdathang
ON dondathang.sohoadon=chitietdathang.sohoadon
GROUP BY khachhang.makhachhang,tencongty,tengiaodich
2.23 SELECT nhanvien.manhanvien,ho,ten,COUNT(sohoadon)
FROM nhanvien LEFT OUTER JOIN dondathang
ON nhanvien.manhanvien=dondathang.manhanvien
GROUP BY nhanvien.manhanvien,ho,ten
2.24 SELECT MONTH(ngaydathang) AS thang,
SUM(soluong*giaban-soluong*giaban*mucgiamgia/100)
FROM dondathang INNER JOIN chitietdathang
ON dondathang.sohoadon=chitietdathang.sohoadon
WHERE year(ngaydathang)=2003
GROUP BY month(ngaydathang)
Tng hp SQL -

SGL Plassma :

Software Group Leader SGL

By Member:

htplasma, Plassma :for Vn-zoom

2.25 SELECT c.mahang,tenhang,


SUM(b.soluong*giaban-b.soluong*giaban*mucgiamgia/100)SUM(b.soluong*giahang)
FROM (dondathang AS a INNER JOIN chitietdathang AS b
ON a.sohoadon=b.sohoadon)
INNER JOIN mathang AS c
ON b.mahang=c.mahang
WHERE YEAR(ngaydathang)=2003
GROUP BY c.mahang,tenhang
2.26 SELECT mathang.mahang,tenhang,
mathang.soluong +
CASE
WHEN SUM(chitietdathang.soluong) IS NULL THEN 0
ELSE SUM(chitietdathang.soluong)
END AS tongsoluong
FROM mathang LEFT OUTER JOIN chitietdathang
ON mathang.mahang=chitietdathang.mahang
GROUP BY mathang.mahang,tenhang,mathang.soluong
2.27 SELECT nhanvien.manhanvien,ho,ten,sum(soluong)
FROM (nhanvien INNER JOIN dondathang
ON nhanvien.manhanvien=dondathang.manhanvien)
INNER JOIN chitietdathang
ON dondathang.sohoadon=chitietdathang.sohoadon
GROUP BY nhanvien.manhanvien,ho,ten
HAVING sum(soluong)>=ALL(SELECT sum(soluong)
FROM (nhanvien INNER JOIN dondathang
ON nhanvien.manhanvien=dondathang.manhanvien)
INNER JOIN chitietdathang ON
dondathang.sohoadon=chitietdathang.sohoadon
GROUP BY nhanvien.manhanvien,ho,ten)
2.28 SELECT dondathang.sohoadon,SUM(soluong)
FROM dondathang INNER JOIN chitietdathang
ON dondathang.sohoadon=chitietdathang.sohoadon
GROUP BY dondathang.sohoadon
HAVING sum(soluong)<=ALL(SELECT sum(soluong)
FROM dondathang INNER JOIN chitietdathang
ON dondathang.sohoadon=chitietdathang.sohoadon
GROUP BY dondathang.sohoadon)
2.29 SELECT TOP 1
SUM(soluong*giaban-soluong*giaban*mucgiamgia/100)
FROM dondathang INNER JOIN chitietdathang
ON dondathang.sohoadon=chitietdathang.sohoadon
ORDER BY 1 DESC
2.30 SELECT a.sohoadon,b.mahang,tenhang,
b.soluong*giaban-b.soluong*giaban*mucgiamgia/100
Tng hp SQL -

SGL Plassma :

Software Group Leader SGL

By Member:

htplasma, Plassma :for Vn-zoom

FROM (dondathang AS a INNER JOIN chitietdathang AS b


ON a.sohoadon = b.sohoadon)
INNER JOIN mathang AS c ON b.mahang = c.mahang
ORDER BY a.sohoadon
COMPUTE SUM(b.soluong*giabanb.soluong*giaban*mucgiamgia/100) BY a.sohoadon
2.31 SELECT loaihang.maloaihang,tenloaihang,
mahang,tenhang,soluong
FROM loaihang INNER JOIN mathang
ON loaihang.maloaihang=mathang.maloaihang
ORDER BY loaihang.maloaihang
COMPUTE SUM(soluong) BY loaihang.maloaihang
COMPUTE SUM(soluong)
2.32 SELECT b.mahang,tenhang,
SUM(CASE MONTH(ngaydathang) WHEN 1 THEN b.soluong
ELSE 0 END) AS Thang1,
SUM(CASE MONTH(ngaydathang) WHEN 2 THEN b.soluong
ELSE 0 END) AS Thang2,
SUM(CASE MONTH(ngaydathang) WHEN 3 THEN b.soluong
ELSE 0 END) AS Thang3,
SUM(CASE MONTH(ngaydathang) WHEN 4 THEN b.soluong
ELSE 0 END) AS Thang4,
SUM(CASE MONTH(ngaydathang) WHEN 5 THEN b.soluong
ELSE 0 END) AS Thang5,
SUM(CASE MONTH(ngaydathang) WHEN 6 THEN b.soluong
ELSE 0 END) AS Thang6,
SUM(CASE MONTH(ngaydathang) WHEN 7 THEN b.soluong
ELSE 0 END) AS Thang7,
SUM(CASE MONTH(ngaydathang) WHEN 8 THEN b.soluong
ELSE 0 END) AS Thang8,
SUM(CASE MONTH(ngaydathang) WHEN 9 THEN b.soluong
ELSE 0 END) AS Thang9,
SUM(CASE MONTH(ngaydathang) WHEN 10 THEN b.soluong
ELSE 0 END) AS Thang10,
SUM(CASE MONTH(ngaydathang) WHEN 11 THEN b.soluong
ELSE 0 END) AS Thang11,
SUM(CASE MONTH(ngaydathang) WHEN 12 THEN b.soluong
ELSE 0 END) AS Thang12,
SUM(b.soluong) AS CaNam
FROM (dondathang AS a INNER JOIN chitietdathang AS b
ON a.sohoadon=b.sohoadon)
INNER JOIN mathang AS c ON b.mahang=c.mahang
WHERE YEAR(ngaydathang)=1996
GROUP BY b.mahang,tenhang
2.33 UPDATE dondathang
Tng hp SQL -

SGL Plassma :

Software Group Leader SGL

By Member:

htplasma, Plassma :for Vn-zoom

SET ngaychuyenhang = ngaydathang


WHERE ngaychuyenhang IS NULL
2.34 UPDATE mathang
SET soluong=soluong*2
FROM nhacungcap
WHERE nhacungcap.macongty=mathang.macongty AND
tencongty='VINAMILK'
2.35 UPDATE dondathang
SET noigiaohang=diachi
FROM khachhang
WHERE dondathang.makhachhang=khachhang.makhachang AND
noigiaohang IS NULL
2.36 UPDATE khachhang
SET khachhang.diachi = nhacungcap.diachi,
khachhang.dienthoai = nhacungcap.dienthoai,
khachhang.fax = nhacungcap.fax,
khachhang.email = nhacungcap.email
FROM nhacungcap
WHERE khachhang.tencongty = nhacungcap.tencongty AND
khachhang.tengiaodich = nhacungcap.tengiaodich
2.37 UPDATE nhanvien
SET luongcoban=luongcoban*1.5
WHERE manhanvien =
(SELECT manhanvien
FROM dondathang INNER JOIN chitietdathang
ON dondathang.sohoadon=chitietdathang.sohoadon
WHERE manhanvien=nhanvien.manhanvien
GROUP BY manhanvien
HAVING SUM(soluong)>100)
2.38 UPDATE nhanvien
SET phucap=luongcoban/2
WHERE manhanvien IN
(SELECT manhanvien
FROM dondathang INNER JOIN chitietdathang
ON dondathang.sohoadon=chitietdathang.sohoadon
GROUP BY manhanvien
HAVING SUM(soluong)>=ALL
(SELECT SUM(soluong)
FROM dondathang INNER JOIN chitietdathang
ON dondathang.sohoadon=chitietdathang.sohoadon
GROUP BY manhanvien))
2.39 UPDATE nhanvien
SET luongcoban=luongcoban*0.85
WHERE NOT EXISTS (SELECT manhanvien
FROM dondathang
WHERE manhanvien=nhanvien.manhanvien)
Tng hp SQL -

SGL Plassma :

Software Group Leader SGL

By Member:

htplasma, Plassma :for Vn-zoom

2.40 UPDATE dondathang


SET sotien =
(SELECT SUM(soluong*giaban+soluong*giaban*mucgiamgia)
FROM chitietdathang
WHERE sohoadon=dondathang.sohoadon
GROUP BY sohoadon)
2.41 DELETE FROM nhanvien
WHERE DATEDIFF(YY,ngaylamviec,GETDATE())>40
2.42 DELETE FROM dondathang
WHERE ngaydathang<'1/1/2000'
2.43 DELETE FROM loaihang
WHERE NOT EXISTS (SELECT mahang
FROM mathang
WHERE maloaihang=loaihang.maloaihang)
2.44 DELETE FROM khachhang
WHERE NOT EXISTS (SELECT sohoadon FROM dondathang
WHERE makhachhang=khachhang.makhachhang)
2.45 DELETE FROM mathang
WHERE soluong=0 AND
NOT EXISTS (SELECT sohoadon
FROM chitietdathang
WHERE mahang=mathang.mahang)
_______________________________________
Bi 4
Q1: B sung rng buc thit lp gi tr mc nh bng 1 cho ct SOLUONG v bng 0
cho ct MUCGIAMGIA trong bng CHITIETDATHANG
Q2: B sung cho bng DONDATHANG rng buc kim tra ngy giao hng v ngy
chuyn hng phi sau hoc bng vi ngy t hng.
Q3 B sung rng buc cho bng NHANVIEN m bo rng mt nhn vin ch c
th lm vic trong cng ty khi 18 tui v khng qu 60 tui.
Q4 Vi cc bng to c, cu lnh:
DROP TABLE nhacungcap
c th thc hin c khng? Ti sao?
Q5 Cho khung nhn c nh ngha nh sau:
CREATE VIEW view_donhang
AS
SELECT dondathang.sohoadon,makhachhang,manhanvien,
ngaydathang,ngaygiaohang,ngaychuyenhang,
noigiaohang,mahang,
giaban,soluong,mucgiamgia
FROM dondathang INNER JOIN chitietdathang
ON dondathang.sohoadon = chitietdathang.sohoadon
a. C th thng qua khung nhn ny b sung d liu cho bng
DONDATHANG c khng?
b. C th thng qua khung nhn ny b sung d liu cho bng
Tng hp SQL -

SGL Plassma :

Software Group Leader SGL

By Member:

htplasma, Plassma :for Vn-zoom

CHITIETDATHANG c khng?
Q6 Vi khung nhn c nh ngha nh sau:
CREATE VIEW view_donhang
AS
SELECT dondathang.sohoadon,makhachhang,manhanvien,
ngaydathang,ngaygiaohang,ngaychuyenhang,
noigiaohang,mahang,
giaban*soluong as thanhtien,
mucgiamgia
FROM dondathang INNER JOIN chitietdathang
ON dondathang.sohoadon = chitietdathang.sohoadon
a. C th thng qua khung nhn ny xo hay cp nht d liu trong bng
DONDATHANG c khng?
b. C th thng qua khung nhn ny cp nht d liu trong bng
CHITIETDATHANG c khng?
Li gii
Q1 ALTER TABLE chitietdathang
ADD
CONSTRAINT df_chitietdathang_soluong
DEFAULT(1) FOR soluong,
CONSTRAINT df_chitietdathang_mucgiamgia
DEFAULT(0) FOR Mucgiamgia
Q2 ALTER TABLE dondathang
ADD
CONSTRAINT chk_dondathang_ngay
CHECK (ngaygiaohang>=ngaydathang AND
ngaychuyenhang>=ngaydathang)
Q3 ALTER TABLE nhanvien
ADD
CONSTRAINT chk_nhanvien_ngaylamviec
CHECK (datediff(yy,ngaysinh,ngaylamviec)
BETWEEN 18 AND 60)
Q4 Cu lnh khng thc hin c do bng cn xo ang c tham chiu bi bng
MATHANG
Q5 a. Khng.
b. Khng
Q6 a.C th cp nht nhng khng th xo
b. C th c
Bi
Da trn c s d liu bi tp chng 2, thc hin cc yu cu sau:
5.1 To th tc lu tr thng qua th tc ny c th b sung thm mt bn ghi mi
cho bng MATHANG (th tc phi thc hin kim tra tnh hp l ca d liu cn b
sung: khng trng kho chnh v m bo ton vn tham chiu)
5.2 To th tc lu tr c chc nng thng k tng s lng hng bn c ca mt
mt hng c m bt k (m mt hng cn thng k l tham s
Tng hp SQL -

SGL Plassma :

Software Group Leader SGL

By Member:

htplasma, Plassma :for Vn-zoom

Ca th tc).
5.3 Vit hm tr v mt bng trong cho bit tng s lng hng bn ca mi mt
hng. S dng hm ny thng k xem tng s lng hng (hin c v bn) ca mi
mt hng l bao nhiu.
5.4 Vit trigger cho bng CHITIETDATHANG theo yu cu sau:
Khi mt bn ghi mi c b sung vo bng ny th gim s lng hng hin c
nu s lng hng hin c ln hn hoc bng s lng hng c bn ra. Ngc li th
hu b thao tc b sung.
Khi cp nht li s lng hng c bn, kim tra s lng hng c cp nht
li c ph hp hay khng (s lng hng bn ra khng
c vt qu s lng hng hin c v khng c nh hn 1). Nu d liu hp l th
gim (hoc tng) s lng hng hin c trong cng ty, ng li th hu b thao tc cp
nht.
5.5 Vit trigger cho bng CHITIETDATHANG sao cho ch chp nhn gi hng bn ra
phi nh hn hoc bng gi gc (gi ca mt hng trong bng MATHANG)
5.6 qun l cc bn tin trong mt Website, ngi ta s dng hai bng sau:
Bng LOAIBANTIN (loi bn tin)
CREATE TABLE loaibantin
(
maphanloai
INT
NOT NULL
PRIMARY KEY,
tenphanloai
NVARCHAR(100) NOT NULL ,
bantinmoinhat
INT
DEFAULT(0)
)
Bng BANTIN (bn tin)
CREATE TABLE bantin
(
maso
INT
NOT NULL
PRIMARY KEY,
ngayduatin
DATETIME
NULL ,
tieude
NVARCHAR(200) NULL ,
noidung
NTEXT
NULL ,
maphanloai
INT
NULL
FOREIGN KEY
REFERENCES loaibantin(maphanloai)
)
Trong bng LOAIBANTIN, gi tr ct BANTINMOINHAT cho bit m s ca bn
tin thuc loi tng ng mi nht (dc b sung sau cng).
Hy vit cc trigger cho bng BANTIN sao cho:
Khi mt bn tin mi c b sung, cp nht li ct BANTINMOINHAT Ca
dng tng ng vi loi bn tin va b sung.
Khi mt bn tin b xo, cp nht li gi tr ca ct BANTINMOINHAT trong
bng LOAIBANTIN ca dng ng vi loi bn tin va xa l m s ca bn tin trc
(da vo ngy a tin). Nu khng cn bn tin no cng loi th gi tr ca ct ny
bng 0.
Tng hp SQL -

SGL Plassma :

Software Group Leader SGL

By Member:

htplasma, Plassma :for Vn-zoom

Khi cp nht li m s ca mt bn tin v nu n l bn tin mi nht th cp


nht li gi tr ct BANTINMOINHAT l m s mi.
Li gii
5.1 CREATE PROCEDURE sp_insert_mathang(
@mahang
NVARCHAR(10),
@tenhang
NVARCHAR(50),
@macongty
NVARCHAR(10) = NULL,
@maloaihang INT = NULL,
@soluong
INT = 0,
@donvitinh NVARCHAR(20) = NULL,
@giahang money = 0)
AS
IF NOT EXISTS(SELECT mahang FROM mathang
WHERE mahang=@mahang)
IF (@macongty IS NULL OR EXISTS(SELECT macongty
FROM nhacungcap
WHERE macongty=@macongty))
AND
(@maloaihang IS NULL OR
EXISTS(SELECT maloaihang FROM loaihang
WHERE maloaihang=@maloaihang))
INSERT INTO mathang
VALUES(@mahang,@tenhang,
@macongty,@maloaihang,
@soluong,@donvitinh,@giahang)
5.2 CREATE PROCEDURE sp_thongkebanhang(@mahang NVARCHAR(10))
AS
SELECT mathang.mahang,tenhang,
SUM(chitietdathang.soluong) AS tongsoluong
FROM mathang LEFT OUTER JOIN chitietdathang
ON mathang.mahang=chitietdathang.mahang
WHERE mathang.mahang=@mahang
GROUP BY mathang.mahang,tenhang
5.3 nh ngha hm:
CREATE FUNCTION func_banhang()
RETURNS TABLE
AS
RETURN (SELECT mathang.mahang,tenhang,
CASE
WHEN sum(chitietdathang.soluong) IS NULL THEN 0
ELSE sum(chitietdathang.soluong)
END AS tongsl
Tng hp SQL -

SGL Plassma :

Software Group Leader SGL

By Member:

htplasma, Plassma :for Vn-zoom

FROM mathang LEFT OUTER JOIN chitietdathang


ON mathang.mahang = chitietdathang.mahang
GROUP BY mathang.mahang,tenhang)
S dng hm nh ngha:
SELECT a.mahang,a.tenhang,soluong+tongsl
FROM mathang AS a INNER JOIN dbo.func_banhang() AS b
ON a.mahang=b.mahang
5.4 CREATE TRIGGER trg_chitietdathang_insert
ON chitietdathang
FOR INSERT
AS
BEGIN
DECLARE @mahang NVARCHAR(100)
DECLARE @soluongban INT
DECLARE @soluongcon INT
SELECT @mahang=mahang,@soluongban=soluong
FROM inserted
SELECT @soluongcon=soluong FROM mathang
WHERE mahang=@mahang
IF @soluongcon>=@soluongban
UPDATE mathang SET soluong=soluong-@soluongban
WHERE mahang=@mahang
ELSE
ROLLBACK TRANSACTION
END
CREATE TRIGGER trg_chitietdathang_update_soluong
ON chitietdathang
FOR UPDATE
AS
IF UPDATE(soluong)
BEGIN
IF EXISTS(SELECT sohoadon FROM inserted WHERE soluong<0)
ROLLBACK TRANSACTION
ELSE
BEGIN
UPDATE mathang
SET soluong=soluong(SELECT SUM(inserted.soluong-deleted.soluong)
FROM inserted INNER JOIN deleted
ON inserted.sohoadon=deleted.sohoadon AND
inserted.mahang=deleted.mahang
WHERE inserted.mahang=mathang.mahang
GROUP BY inserted.mahang)
WHERE mahang IN (SELECT DISTINCT mahang
Tng hp SQL -

SGL Plassma :

Software Group Leader SGL

By Member:

htplasma, Plassma :for Vn-zoom

FROM inserted)
IF EXISTS(SELECT mahang FROM mathang
WHERE soluong<0)
ROLLBACK TRANSACTION
END
END
5.5 CREATE TRIGGER trg_chitietdathang_giaban
ON chitietdathang
FOR INSERT,UPDATE
AS
IF UPDATE(giaban)
IF EXISTS(SELECT inserted.mahang
FROM mathang INNER JOIN inserted
ON mathang.mahang=inserted.mahang
WHERE mathang.giahang>inserted.giaban)
ROLLBACK TRANSACTION
_______________________________________

Tng hp SQL -

SGL Plassma :

You might also like