Bài Tập
Tuan 3 -Viết View
Tuan 4 -Viết Cursor
Tuan 5 -Viết SP
Tuan 6 -Viết Trigger
Tuan 7-Viết Function
------------------------------------VIEW-------------------
--Tuần 3
câu 1
--Cho biết danh số xuất từng mặt hàng trong 6 tháng đầu năm
create view cau_1
as
select TENMH,sum(DONGIAXUAT*SOLUONGXUAT) as [DOANH THU]
from HOA_DON_XUAT HD,CHI_TIET_XUAT CT,MAT_HANG MH
where HD.SOHDX=CT.SOHDX
and CT.MAMH=MH.MAMH
and year(getdate())=year(NGAYXUAT)
and month(NGAYXUAT)between 1 and 6
group by TENMH
-----------------------------------------------------------
câu 2
--Cho biết mặt hàng có doanh số lớn nhất
create view cau_2
as
select TENMH,sum(DONGIAXUAT*SOLUONGXUAT) as [MAX DOANH
THU]
from MAT_HANG MH,CHI_TIET_XUAT CT
where MH.MAMH=CT.MAMH
group by TENMH
having sum(DONGIAXUAT*SOLUONGXUAT)>=all(select
sum(DONGIAXUAT*SOLUONGXUAT)
from MAT_HANG MH,CHI_TIET_XUAT CT
where MH.MAMH=CT.MAMH
group by TENMH)
----------------------------------------------------------
câu 3
--Cho biết những mặt hàng có doanh thu lớn hơn 1b
create view cau_3
as
select TENMH,sum(DONGIAXUAT*SOLUONGXUAT) as [DOANH THU]
from MAT_HANG MH,CHI_TIET_XUAT CT
where MH.MAMH=CT.MAMH
group by TENMH
having sum(DONGIAXUAT*SOLUONGXUAT)>1000000000
-----------------------------------------------------------
câu 4
--Cho biết đơn giá nhập trung bình của từng mặt hàng
create view cau_4
as
select TENMH,avg(DONGIANHAP) as [ĐƠN GIÁ NHẬP TB]
from MAT_HANG MH,HOA_DON_NHAP HD,CHI_TIET_NHAP CT
where HD.SOHDN=CT.SOHDN
and MH.MAMH=CT.MAMH
group by TENMH
-----------------------------------------------------------
câu 5
--Cho biết thành tiền của từng mặt hàng theo từng hoá đơn và
tổng tiền của từng hoá đơn
-----------------------------------------------------------
câu 6
--Cho biết thông tin nhân viên chưa nhập hàng bao giờ
create view cau_6
as
select *
from NHAN_VIEN
where MANV not in (select MANV
from HOA_DON_NHAP)
-----------------------------------------------------------
câu 7
--Cho biết những mặt hàng nhập chưa bao giờ bán
create view cau_7
as
select *
from MAT_HANG
where MAMH not in (select MAMH
from HOA_DON_NHAP)
---------------------------------------------------------câu
8
--Cho biết những nhà cung cấp cung ứng những mặt hàng giống
nhà cung cấp 1
create view cau_8
as
select TENNCC
from NHA_CUNG_CAP NCC,CHI_TIET_NHAP CT,MAT_HANG MH
where NCC.MANCC=MH.MANCC
and MH.MAMH=CT.MAMH
and MH.MAMH in (select MAMH
from NHA_CUNG_CAP NCC,MAT_HANG
MH
where NCC.MANCC=MH.MANCC
and NCC.MANCC=1)
---------------------------------------------------------
câu 9(hỏi lại)
--Tạo và mã hoá view : cho biết những mặt hàng chưa được
xuất trong năm hiện tại
create view cau_9
with encryption as
select TENMH
from MAT_HANG
where MAMH in (select MH.MAMH
from MAT_HANG MH,HOA_DON_XUAT
HD,CHI_TIET_XUAT CT
where MH.MAMH=CT.MAMH
and HD.SOHDX=CT.SOHDX
and NGAYXUAT=year(getdate()))
câu 10
--Cho biết danh sách mặt hàng thuộc loại 1 có sử dụng WITH
CHECK OPTION. Sau đó chèn thử 1 bảng ghi vào view này
create view cau_10
as
select *
from MAT_HANG
where MAMH=1
with check option
insert into cau_10 values(0,1,N'MẶT HÀNG 1',N'TẤN',N'GOOD')
select * from cau_10
-----------------------------------CURSOR------------------
--Tuần 4
câu 1
--Viết một đoạn lệnh sử dụng con trỏ để hiển thị danh sách
khách hàng. Nếu khách hàng đã mua 10 lần thì thông báo được
-- khuyến mại 100 USD, mua 20 lần khuyến mại 200 USD.
Distinct: bo nhug ket qua trug nhau
--khai báo biến cục bộ
declare @MAKH char(6),@solan tinyint
--khai báo biến cursor
declare cur_khuyenmai cursor
dynamic
for
select distinct MAKH from HOA_DON_XUAT
--mở cursor
open cur_khuyenmai
--đọc dữ liệu
fetch first from cur_khuyenmai into @MAKH
while @@fetch_status=0
begin
select @solan=count(*)
from HOA_DON_XUAT
where @MAKH=MAKH
--print
select * from KHACH_HANG where @MAKH=MAKH
if @solan>=3
print 'Khách hàng: '+@MAKH+'được khuyến mãi
20% vì đã mua: '+cast(@solan as char(3))+'lần'
else
print 'Khách hàng: '+@MAKH+'được khuyến mãi
10% vì đã mua: '+cast(@solan as char(3))+'lần'
fetch next from cur_khuyenmai into @MAKH
end
--đóng cursor
close cur_khuyenmai
deallocate cur_khuyenmai
----------------------------------------------------------
câu 2
--Thêm một thuộc tính trong So_MH_CC kiểu dữ liệu số nguyên
trong bảng NhaCungCap để lưu số lượng mặt hàng mà công ty
-- đó cung cấp. Viết cursor cập nhật cho thuộc tính này
alter table NHA_CUNG_CAP add SO_MH_CC int
declare @MANCC char(6),@SO_MH_CC int
declare cur_SLMH cursor
forward_only
for
select MANCC
from NHA_CUNG_CAP
open cur_SLMH
fetch next from cur_SLMH into @MANCC
while @@fetch_status=0
begin
select SO_MH_CC=sum(SOLUONGNHAP)
from NHA_CUNG_CAP NCC,MAT_HANG MH,CHI_TIET_NHAP CTN
where NCC.MANCC=MH.MANCC
and CTN.MAMH=MH.MAMH
and @MANCC=NCC.MANCC
print 'Đang cập nhật nhà cung cấp:'+@MANCC
update NHA_CUNG_CAP
set SO_MH_CC=@SO_MH_CC
where MANCC=@MANCC
print 'Đang đọc'
fetch next from cur_SLMH into @MANCC
end
close cur_SLMH
deallocate cur_SLMH
-----------------------------------------------------------
câu 3
--Thêm thuộc tính TongMH trong bang HoaDonNhap lưu thông tin
tổng số mặt hàng đã bán trong đơn hàng. Viết cursor cập
--nhật thông tin cho thuộc tính này.
alter table HOA_DON_NHAP add TONGMH int
declare @SOHDN char(6),@TONGMH int
declare cur_TMH cursor
forward_only
for
select distinct MAMH from MAT_HANG
open cur_TMH
fetch next from cur_TMH into @SOHDN
while @@fetch_status=0
begin
select TONGMH=sum(SOLUONGNHAP)
from MAT_HANG MH,CHI_TIET_NHAP CTN,HOA_DON_NHAP HDN
where MH.MAMH=CTN.MAMH
and HDN.SOHDN=CTN.SOHDN
and @SOHDN=HDN.SOHDN
print 'Dang cap nhat MAMH:'+@SOHDN
update HOA_DON_NHAP
set TONGMH=@TONGMH
where SOHDN=@SOHDN
fetch next from cur_TMH into @SOHDN
end
close cur_TMH
deallocate cur_TMH