Thực Hành Hệ Quản Trị Cơ Sở Dữ Liệu(SQL SERVER) – 11 LT-TM
Ngô Tất Đạt Page 1
create database QLNXTONKHO
on primary
(
name=QLNXTONKHO_DATA,
filename='D:\QLNXTONKHO_DATA.MDF',
size=50MB,
maxsize=200MB,
filegrowth=10MB
)
log on
(
name=QLNXTONKHO_LOG,
filename='D:\QLNXTONKHO_LOG.LDF',
size=10MB,
maxsize=unlimited,
filegrowth=5MB
)
use QLNXTONKHO
create table VATTU
(
Mavtu char(4) not null,
Tenvtu nvarchar(50),
Dvitinh nvarchar(10),
Phantram real
)
Ngaynhap datetime,
Sodh char(4) not null
)
create table CTPNHAP
(
Sopn char(4) not null,
Mavtu char(4) not null,
Slnhap int,
Dgnhap money
) create table PXUAT
(
Sopx char(4) not null,
Ngayxuat datetime,
Tenkh nvarchar(100)
)
create table CTPXUAT
(
Sopx char(4) not null,
Mavtu char(4) not null,
Slxuat int,
Dgxuat money
)
create table TONKHO
(
constraint FK_CTDH_MAVT foreign key(Mavtu) references VATTU(Mavtu)
alter table PNHAP
add
constraint PK_PNHAP primary key(Sopn),
constraint FK_PNHAP_Sodh foreign key(Sodh) references DONDH(Sodh)
alter table CTPNHAP
add
constraint PK_CTPNHAP primary key(Sopn,Mavtu),
constraint FK_CTPNHAP_SOPN foreign key(Sopn) references
PNHAP(Sopn),
constraint FK_CTPNHAP_MAVT foreign key(Mavtu) references
VATTU(Mavtu)
alter table PXUAT
add constraint PK_PXUAT primary key(Sopx)
alter table CTPXUAT
add
Thực Hành Hệ Quản Trị Cơ Sở Dữ Liệu(SQL SERVER) – 11 LT-TM
Ngô Tất Đạt Page 4
constraint PK_CTPXUAT primary key(Sopx,Mavtu),
constraint FK_CTPXUAT_SOPX foreign key(Sopx) references
PXUAT(Sopx),
constraint FK_CTPXUAT_MAVT foreign key(Mavtu) references
VATTU(Mavtu)
constraint CHK_CTPX_DGX check(Dgxuat>0) alter table TONKHO
add
constraint CHK_TONKHO_SLD check(Sldau>=0),
constraint CHK_TONKHO_TSLN check(Tongslnhap>=0),
Thực Hành Hệ Quản Trị Cơ Sở Dữ Liệu(SQL SERVER) – 11 LT-TM
Ngô Tất Đạt Page 5
constraint CHK_TONKHO_TSLX check(Tongslxuat>=0),
constraint DF_TONKHO_SLD default 0 for Sldau,
constraint DF_TONKHO_TSLN default 0 for Tongslnhap,
constraint DF_TONKHO_TSLX default 0 for Tongslxuat
Chèn d liu
insert into VATTU values('BU01',N'Bàn i Philip A',N'Cái',17)
insert into VATTU values('BU02',N'Bàn i Philip B',N'Cái',17)
insert into VATTU values('BU03',N'Bàn i Philip C',N'Cái',17)
',40)
',40)
u Karaoke',N'B',30)
u Karaoke 6 s',N'B',30)
i IK-2002',N'B',NULL)
insert into VATTU values('TL15',N'T lnh Sanyo 150 lít',N'Cái',25)
insert into VATTU values('TL90',N'T lnh Sanyo 90 lít',N'Cái',20)
insert into VATTU values('TV14',N'Tivi Sony 14 inches',N'Cái',15)
insert into VATTU values('TV21',N'Tivi Sony 21 inches',N'Cái',10)
insert into VATTU values('TV29',N'Tivi Sony 29 inches',N'Cái',10)
insert into DonDH Values('D003','2/10/2006','C02')
insert into DONDH Values('D004','2/17/2006','C05')
insert into DONDH Values('D005','3/1/2006','C02')
insert into DONDH Values('D001', '7/1/2006','C04') THEM GIA TRI VAO BANG CTDONDH
insert into CTDONDH Values('D001','DD01',20)
insert into CTDONDH Values('D001','DD02',15)
insert into CTDONDH Values('D002','VD02',30)
insert into CTDONDH Values('D001','TV14',30)
insert into CTDONDH Values('D003','TV14',10)
insert into CTDONDH Values('D003','TV29',20)
insert into CTDONDH Values('D004','TL90',10)
insert into CTDONDH Values('D005','TV14',10)
insert into CTDONDH Values('D005','TV29',20) THEM GIA TRI VAO BANG PNHAP
insert into PNHAP Values('N001','1/17/2006','D001')
insert into PNHAP Values('N002','1/20/2006','D004')
insert into PNHAP Values('N003','1/31/2006','D002')
insert into PNHAP Values('N004','2/15/2006','D003')
insert into PNHAP Values('N005','2/15/2007','D003')
insert into PNHAP Values('N006','2/28/2007','D005')
THEM GIA TRI VAO BANG CTPNHAP
insert into CTPNHAP Values('N001','DD01',8,2500000)
insert into TONKHO Values(200601,'VD02',0,30,10,20)
insert into TONKHO Values(200602,'DD01',4,0,0,4)
insert into TONKHO Values(200602,'DD02',8,0,0,8)
insert into TONKHO Values(200602,'TV14',5,0,0,5)
insert into TONKHO Values(200602,'VD01',20,0,0,20)
insert into TONKHO Values(200603,'DD01',0,190,0,190)
BÀI TP TRUY VN
1. Thêm d liu vào các bng bng lnh INSERT INTO.
2. Thêm ct tgnhap kiu numeric vào bng PNHAP
alter table PNHAP
add Tgnhap numeric
3. Thêm ct tgxuat kiu numeric vào bng PXUAT
alter table PXUAT
add Tgxuat numeric
4. Làm li tt c nhng ví d p và nhng ví d yêu cu phi làm
mà cha hoàn tt,
n qua câu tip theo
5. Cho bit thông tin sopn,mavtu, slgnhap, dgnhap, thanh tien ca tng mavtu.
select sopn,mavtu, slnhap, dgnhap,slnhap*dgnhap as [thanh tien]
from CTPNHAP
Thực Hành Hệ Quản Trị Cơ Sở Dữ Liệu(SQL SERVER) – 11 LT-TM
select Sopx,Tenvtu, Slxuat, Dgxuat,Slxuat*Dgxuat as [thanh tien]
from CTPXUAT C, VATTU V
where C.Mavtu=V.Mavtu
11. Cho bit thông tin sopx,ngayxuat,mavtu, slgxuat, dgxuat, thanh tien ca
tng mavtu.
select P.Sopx,Ngayxuat=convert(char(10),Ngayxuat,103),Mavtu, Slxuat,
Dgxuat,Slxuat*Dgxuat as [thanh tien]
from CTPXUAT C, PXUAT P
where C.Sopx=P.Sopx
12. Cho bit thông tin sopx,ngayxuat,ten vt t, slgxuat, dgxuat, thanh tien ca
tng mavtu
t n 03/03/2006.Yêu cu ngày nhnh dng dd-mm-
yyyy
Thực Hành Hệ Quản Trị Cơ Sở Dữ Liệu(SQL SERVER) – 11 LT-TM
Ngô Tất Đạt Page 9
select P.Sopx,Ngayxuat=convert(char(10),Ngayxuat,103),Tenvtu, Slxuat,
Dgxuat,Slxuat*Dgxuat as [thanh tien]
from CTPXUAT C, PXUAT P, VATTU V
where C.Sopx=P.Sopx and V.Mavtu=C.Mavtu and Ngayxuat between
'01/15/2006' and '03/03/2006'
13. Cp nht ct tng tr giá nhp(tgnhap) cho bng PNHAP.
ng ctpnhap.Ch cp nht cho các
SOPN là N001,N002
update PNHAP
set Tgnhap= (
ng ctpxuat.Ch cp nht cho các
phiu xuat tr-01.
Thực Hành Hệ Quản Trị Cơ Sở Dữ Liệu(SQL SERVER) – 11 LT-TM
Ngô Tất Đạt Page 10
update PXUAT
set Tgxuat = (
select sum(Slxuat*Dgxuat)
from CTPXUAT C
where C.Sopx = PXUAT.Sopx
)
where convert(char(7),PXUAT.Ngayxuat,111)='2006/01'
17. Xoá mã vt t
delete from VATTU where dvitinh=N'B'
18. Insert li nhng mu tin va b xoá
',40)
',40)
u Karaoke',N'B',30)
insert into VATTU values('KO04u Karaoke 6 s',N'B',30)
i IK-2002',N'B',NULL)
',30)
',15)
19. Th hin thông tin : mã vt t, tên vt t
select Mavtu,Tenvtu
from VATTU
25. Cho bit s lt hàng ca tng nhà cung cp.Thông tin gm tên
nhà cung cp, s lt hàng.
select Tenncc,count(Sodh) as 'SO LUONG DON DAT HANG'
from DONDH D, NHACC N
where D.Manhacc=N.Manhacc
group by Tenncc
26. Cho bit thông tin sodh, tennhacc,tenvtu, sldat
select D.Sodh, Tenncc,Tenvtu, Sldat
from DONDH D, NHACC N, CTDONDH C,VATTU V
where D.Manhacc=N.Manhacc and V.Mavtu=C.Mavtu and C.Sodh=D.Sodh
27. Cho bit thông tin sodh,tennhacc,tenvtu, tongsldat trong tháng 1 và 2
select
D.Sodh,Ngaydh=convert(char(10),Ngaydh,103),Tenncc,Tenvtu,TongSoLuongDat
=sum(Sldat)
from DONDH D, NHACC N, CTDONDH C,VATTU V
where D.Manhacc=N.Manhacc and V.Mavtu=C.Mavtu and C.Sodh=D.Sodh and
month(Ngaydh) in (1,2)
group by D.Sodh,convert(char(10),Ngaydh,103),Tenncc,Tenvtu
28. Th hin thông tin khách hàng C01 và C02
select *
from NhaCC
where Manhacc in ('C01','C02')
29. Th hit hàng(DONDH) trong tháng 01 và 02
select Sodh,Ngaydh=convert(char(10),Ngaydh,103),Manhacc
from DONDH
33. Hin th danh sách vt t trong bng VATTU, sp xp tên vt t gim dn
select *
from VATTU
order by Tenvtu desc
34. Hin th danh sách các nhà cung cp Q1 HCM , sp h tên nà cung cp
n.
select *
from NhaCC
where Diachi like'%Q1,HCM'
order by Tenncc
35. Hin th danh sách thông tin trong bng CTPNHAP có thêm ct thành
tin(ct biu thc)
bit rng thành tin= SLNHAP * DGNHAP
select *, Slnhap*Dgnhap as 'ThanhTien'
from CTPNHAP
36. Hin th danh sách thông tin trong bng PNHAP có thêm ct tr giá,
bit rng tr giá = tng thành tin ca các mu tin chi tit tng ng trong bng
CTPNHAP.
Thực Hành Hệ Quản Trị Cơ Sở Dữ Liệu(SQL SERVER) – 11 LT-TM
Ngô Tất Đạt Page 13
select P.Sopn, Ngaynhap=convert(char(7),Ngaynhap,111),Sodh,Tgnhap,
sum(Slnhap*Dgnhap) as 'TriGia'
from CTPNHAP C,PNHAP P
where C.SOPN=P.SOPN
group by P.Sopn, Ngaynhap,Sodh,tgnhap
Thực Hành Hệ Quản Trị Cơ Sở Dữ Liệu(SQL SERVER) – 11 LT-TM
Ngô Tất Đạt Page 14
BÀI TẬP VIEW 1. To view có tên vw_DMVT bao gm các thông tin sau; mã vt t, tên vt t.
lit kê danh sách các vt t hin có trong bng VATTU.
if exists (select * from sysobjects where name='vw_DMVT')
drop view vw_DMVT
Go
create view vw_DMVT
as
select Mavtu,tenvtu
from VATTU
2. To view có tên vw_dondh_tongsldat bao gm các thông tin sau : s t
hàng, tng s lt .
thng kê tng s lt hàng.
if exists (select * from sysobjects where name='vw_dondh_tongsldat')
drop view vw_dondh_tongsldat
Go
create view vw_dondh_tongsldat
as
select Sodh,TongSLDat=sum(sldat)
from CTDONDH
group by Sodh
3. To view có tên vw_dondh_tongslnhap bao gm các thông tin sau: s t
5. To view có tên vw_dondh_tongsldatnhap_daydu bao gm các thông tin sau
: s t hàng.
lit kê nh hàng(tng
lt bng tng lng nhp)
if exists (select * from sysobjects where
name='vw_dondh_tongsldatnhap_daydu')
drop view vw_dondh_tongsldatnhap_daydu
GO
create view vw_dondh_tongsldatnhap_daydu
as
select Sodh as 'Don Hang Day Du'
from CTDONDH C
group by Sodh
having sum(sldat)= (select sum(slnhap) from PNHAP P,CTPNHAP CT
where C.Sodh=P.Sodh and P.Sopn=CT.Sopn)
6. To view có tên vw_tongnhap bao g
vt t , tng s lng nhp.
thng kê tng s lng nhp ca các vt t trong t
ng yyyy-mm).
chú ý không dùng bng tn kho.
if exists (select * from sysobjects where name='vw_tongnhap')
drop view vw_tongnhap
GO
create view vw_tongnhap
as
select
NamThang=convert(char(7),Ngaynhap,111),Mavtu,TSL_Nhap=sum(Slnhap)
from PNHAP P,CTPNHAP C
where P.Sopn=C.Sopn
as
select D.Sodh,Ngaydh,V.Mavtu,Tenvtu,Sldat,TongSL_Nhap= (select
sum(Slnhap)
from PNHAP P,CTPNHAP CT
where P.Sopn=CT.Sopn and
D.Sodh=P.Sodh and V.Mavtu=CT.Mavtu
)
from DONDH D,CTDONDH C,VATTU V
where D.Sodh=C.Sodh and C.Mavtu=V.Mavtu
Kt hp các view các câu trên , thc hin các truy vn chn l tr li các
câu hi sau:
1. Cho bit danh sách các phit hàng cha tc nhp hàng.
if exists (select * from sysobjects where name='vw_Sodh_chua_nhaphang')
drop view vw_Sodh_chua_nhaphang
GO
Thực Hành Hệ Quản Trị Cơ Sở Dữ Liệu(SQL SERVER) – 11 LT-TM
Ngô Tất Đạt Page 17
create view vw_Sodh_chua_nhaphang
as
select Sodh
from vw_dondh_tongsldat
where Sodh not in (select Sodh from vw_dondh_tongslnhap)
where V.Mavtu=C.Mavtu
group by V.Mavtu,Tenvtu
order by sum(Slxuat) desc
t hàng nào có nhiu mt hàng nht.
if exists (select * from sysobjects where name='vw_Sodh_nhieu_VT_nhat')
drop view vw_Sodh_nhieu_VT_nhat
Thực Hành Hệ Quản Trị Cơ Sở Dữ Liệu(SQL SERVER) – 11 LT-TM
Ngô Tất Đạt Page 18
GO
create view vw_Sodh_nhieu_VT_nhat
as
select Top 1 with ties Sodh,TSL_Vatu=count(Mavtu)
from CTDONDH
group by Sodh
order by count(Mavtu) desc
6. Cho bit tình hình nhp xut ca vt t , thông tin g-
mm), mã vt t, tên vt t, tng s lng nhp, tng s lng xut.
if exists (select * from sysobjects where name='vw_tinhhinh_nhapxuat')
drop view vw_tinhhinh_nhapxuat
GO
create view vw_tinhhinh_nhapxuat
as
select Namthang,V.Mavtu,Tenvtu,TSL_Nhap,TSL_Xuat = ( select
sum(Slxuat)
from CTPXUAT C,PXUAT P
where V.Mavtu=C.Mavtu and
from DONDH D,VATTU V,CTDONDH C
where D.Sodh=C.Sodh AND C.Mavtu=V.Mavtu
group by convert(char(7),Ngaydh,111),V.Mavtu,Tenvtu
Thực Hành Hệ Quản Trị Cơ Sở Dữ Liệu(SQL SERVER) – 11 LT-TM
Ngô Tất Đạt Page 20
Bài tập về BIẾN và IF
Dùng cả hai cách IF….ELSE và IF EXISTS 1. Tính xem có vt t nào bán ra s lng nhiu hn 4 hay không? Nu có in
t t có s lng > 4
ng thi Mã vt t, tên vt t.Nu không thy thì xut thông báo
không tìm thy.
if (select count(*) from CTPXUAT where SLXUAT >4) >0
begin
print N' DANH SÁCH CÁC VT T CÓ S LNG XUT > 4 LÀ: '
select V.MAVTU,TENVTU,SLXUAT
from VATTU V, CTPXUAT C
where V.MAVTU=C.MAVTU and SLXUAT >4
end
else
print N' Không tìm thy'
end
else
print N' Không tìm thy '
IF EXISTS
if exists ( select * from PNHAP where datename(dw,NGAYNHAP)='Friday' )
begin
print N' Nhn hàng nhp vào ngày Friday là: '
select
SOPN,NGAYNHAP=convert(char(10),NGAYNHAP,103),SODH,THU=datename(
dw,NGAYNHAP)
from PNHAP
where datename(dw,NGAYNHAP)='Friday'
end
else
print N' Không tìm thy'
3. Tìm nhng phit hàng t n tháng 3/2006. Nu tìm
thng phit
hàng t i các thông tin ca các
phit hàng tìm thy.
nu không thy thì xuy.Khi in thông báo nh
truyn bin vào thông báo.
DECLARE @TUNGAY CHAR(7),@DENNGAY CHAR(7)
SET @TUNGAY = '2006/01'
SET @DENNGAY = '2006/03'
if (select count(*) from DONDH where year(NGAYDH)=2006 and
month(NGAYDH) between 1 and 3) >0
print N' Không tìm thy nhng phit hàng t n
ngày '+ @DENNGAY
4. Tìm nhng phit hàng cha tng nhp hàng trong tháng 01/2006. Nu
tim thy thì xut thông báo: Nhng phit
hàng cha tng nhp hàng trong tháng 01/2006 , kèm thông tin các phit
hàng cha tng nhp hàng trong 01/2006.
nu không thy xuy nha
tng nhp hàng 01/2006.
Dùng bi xut thông báo.
declare @NGAYDH char(7)
set @NGAYDH = '2006/01'
if (select count(*) from DONDH where
convert(char(7),NGAYDH,111)=@NGAYDH and SODH not in(select SODH from
PNHAP)) >0
begin
print N' Nhng phit hàng cha tng nhp hàng trong '+
@NGAYDH +': '
select SODH,NGAYDH=convert(char(10),NGAYDH,103),MANHACC
from DONDH
where convert(char(7),NGAYDH,111)=@NGAYDH and SODH not
in(select SODH from PNHAP)
end
else
Thực Hành Hệ Quản Trị Cơ Sở Dữ Liệu(SQL SERVER) – 11 LT-TM
Ngô Tất Đạt Page 23
print N' Không tìm thy nhng phit hàng cha tng nhp hàng trong
convert(char(7),NGAYNHAP,111)=@NGAYNHAP) >0
begin
print N' Nhng phiu nhp trong '+ @NGAYNHAP +': '
select
NAMTHANG=convert(char(7),NGAYNHAP,111),MAVTU,TSL_NHAP=SUM(SLN
HAP)
from PNHAP P,CTPNHAP C
where C.SOPN=P.SOPN and
convert(char(7),NGAYNHAP,111)=@NGAYNHAP
group by convert(char(7),NGAYNHAP,111),MAVTU
end
else
Thực Hành Hệ Quản Trị Cơ Sở Dữ Liệu(SQL SERVER) – 11 LT-TM
Ngô Tất Đạt Page 24
print N' Không tìm thy nhng phiu nhp trong '+ @NGAYNHAP
IF EXISTS
declare @NGAYNHAP char(7)
set @NGAYNHAP = '2006/01'
if exists (select * from PNHAP P,CTPNHAP C where C.SOPN=P.SOPN and
convert(char(7),NGAYNHAP,111)=@NGAYNHAP)
begin
print N' Nhng phiu nhp trong '+ @NGAYNHAP +': '
select
NAMTHANG=convert(char(7),NGAYNHAP,111),MAVTU,TSL_NHAP=SUM(SLN
HAP)
from PNHAP P,CTPNHAP C
Ngô Tất Đạt Page 25
print N' Không tìm thy nhng phiu xut trong '+ @NGAYXUAT
IF EXISTS
declare @NGAYXUAT char(7)
set @NGAYXUAT = '2006/01'
if exists (select * from PXUAT P,CTPXUAT C where C.SOPX=P.SOPX and
convert(char(7),NGAYXUAT,111)=@NGAYXUAT)
begin
print N' Nhng phiu xut trong '+ @NGAYXUAT +': '
select
NAMTHANG=convert(char(7),NGAYXUAT,111),MAVTU,TSL_XUAT=SUM(SLX
UAT)
from PXUAT P,CTPXUAT C
where C.SOPX=P.SOPX and
convert(char(7),NGAYXUAT,111)=@NGAYXUAT
group by convert(char(7),NGAYXUAT,111),MAVTU
end
else
print N' Không tìm thy nhng phiu xut trong '+ @NGAYXUAT
7. Cho bit danh sách vt t có s lng xut nhiu nht.In ra câu thông báo,
kèm thông tin
ca vt t có s lng xut bán nhiu nht.
if (select count(*) from CTPXUAT) >0
begin