Tải bản đầy đủ (.docx) (36 trang)

đáp án bài tập hệ quản trị cơ sở dữ liệu SQL

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (139.2 KB, 36 trang )

Bài tập Hệ quản trị cơ sở dữ liệu:
Sinh viên: Đặng Thị Hiền
Lớp N03.th2
Bài 1 Quản lý bán hàng
create database Bai1
create table dmkhach
(mak char(20) primary key,
tenk char(20),
diachi char(20),
dienthoai char(15))
create table dmhang
(mah char(20) primary key,
tenhang char(20) ,
dvt char(30),
soluong int )
create table hoadonban
(sohd char(20) primary key,
mak char(20),
ngayhd datetime,
diengiai char(30),
constraint mak foreign key (mak)references dmkhach(mak))
create table cthoadon
(sohd char(20),
mah char(20),
soluong int,
dongia int
constraint kc_sohd primary key(sohd,mah),
constraint kn_sohd foreign key(sohd)references hoadonban(sohd),
constraint kn_mah foreign key(mah)references dmhang(mah))
---------------------------select *
from dmhang


where mah in (select mah
from cthoadon
where sohd in (select sohd


from hoadonban
where month(ngayhd)='9'
and year(ngayhd)='2009' ))
---------------------------select dmkhach.*
from dmkhach,hoadonban
where diachi='Thai Nguyen'
and dmkhach.mak=hoadonban.mak
and month(ngayhd)='9'
and year(ngayhd)='2009'
---------------------------select mah,sum(soluong)
from cthoadon,hoadonban
where cthoadon.sohd=hoadonban.sohd
and month(ngayhd)='9'
and year(ngayhd)='2009'
group by mah
--dua ra tong so luong hang da ban cho muc dich mua hang de tiep khach-select sum(soluong)as sl
from cthoadon
where sohd in(select sohd
from hoadonban
where diengiai='tiep khach')
--hien thi thong tin khach hang da tung mua hang tai cua hang-Select * from khach
where mak in(select mak
from hoadonban)
--1.2:tao view de tong hop du lieu ve tung mat hang da duoc ban-create view thongtinhang
as

select *
from dmhang
where mah in (select mah
from hoadonban )
select *


from thongtinhang
--1.3:tao view de tong hop du lieu ve cac mat hang da duoc ban voi so luong lon
nhat—
create view tongso
as
select mah,sum(soluong) as TSL
from cthoadon
group by mah
create view thongtinmax
as
select dmhang.* ,TSL
from dmhang,tongso
where dmhang.mah=tongso.mah
and TSL in (select max(TSL)
from tongso)
select *
from thongtinmax
--1.4:tao view de tong hop ve cac khach hang da mua hang vao ngay 20/10/2005-create view VD4
as
select *
from dmkhach
where mak in (select mak
from hoadonban

where day(ngayhd)='20'
and month (ngayhd)='10'
and year(ngayhd)='2009' )
select *
from VD4
--1.5:tao thu tuc co tham so vao la @sohd de dua ra danh muc cac mat hang co
trong hoa don tren-create proc sp1
@sohd char(20)
as
select *


from dmhang
where mah in(select mah
from cthoadon
where sohd=@sohd)
--kq
exec sp1 'h01'
--1.6:tao thu tuc co tham so la @ngay de dua ra cac mat hang da duoc ban vao
ngay tren
Cach 1
create proc sp2
@ngay smalldatetime
as
select hang.mah,tenh,dvt,soluong
from hang ,cthoadon,hoadonban
where hang.mah=cthoadon.mah
and cthoadon.sohd=hoadonban.sohd
and hoadonban.ngayhd=@ngay
--thuc thi

exec sp '4/10/2009'
Cach 2
create proc VD6
@ngayhd datetime
as
select dmhang.mah,tenhang,dvt,dmhang.soluong
from cthoadon,dmhang
where dmhang.mah=cthoadon.mah
and sohd in (select sohd
from hoadonban
where ngayhd=@ngayhd )
exec VD6 '10/8/2009'
--dung cursor de luu tru thong tin ve cac mat hang dc ban vao ngay 20/11/2006
declare p cursor dynamic
for
select *
from hang


where mah in (select mah
from cthoadon
where sohd in(select sohd
from hoadonban
where ngayhd ='20/11/2006'))
open p
fetch first from p
while @@fetch_status=0
fetch next from p
close p
deallocate p

select * from hang
--them truong tongtien vao hoadonban
alter table hoadonban
add tongtien bigint
--dung cursor de nhap du lieu vao truong tongtien
declare p2 cursor dynamic
for
select sohd,tongtien
from hoadonban
declare @sohd char(10),@tongtien bigint
open p2
fetch first from p2
into @sohd,@tongtien
while @@fetch_status=0
begin
set @tongtien = (select sum(soluong*dongia)
from cthoadon
where sohd=@sohd)
update hoadonban
set tongtien=@tongtien
where sohd=@sohd
fetch next from p2 into @sohd,@tongtien
end
close p2


deallocate p2
select * from hoadonban
Bài 2 Quản lý sinh viên
create database QLSV

create table lop
( malop char(20) primary key,
tenlop char(20) )
create table tinh
( matinh char(20) primary key,
tentinh char(20) )
create table sv
( masv char(20) primary key,
hoten char(30),
ns datetime,
gt char(5),
malop char(20),
matinh char(20),
dtb int,
constraint malop_fk foreign key (malop) references lop(malop),
constraint matinh_fk foreign key (matinh) references tinh(matinh) )
--1 dua ra thong tin ve nhung sv co diem trung binh duoi 5
select * from sv
where dtb<=5
--2 dua ra thong tin ve sv co dia chi o Thai Nguyen
select distinct sv.*, tinh.tentinh
from sv,tinh
where sv.matinh=tinh.matinh
and tentinh='thai nguyen'


-- 3 dua ra thong tin ve cac lop khong co sv o Ha Noi
select lop.*
from sv,lop,tinh
where sv.malop=lop.malop

and sv.matinh=tinh.matinh
and tentinh not like 'ha noi'
--2 tao view tong hop thong tin cac sv co diem trung binh cao nhat
create view THdiemcao
with encryption as
select * from sv
where dtb=(select max(dtb)
from sv)
-- xem kq
select * from THdiemcao
--3 tao view tong hop thong tin ve sv co diem trung binh cao nhat theo tung lop
create view th0
as
select *
from sv
where dtb in ( select max(dtb)
from sv
group by sv.MaLop)
-- xem kq
select * from th0
--4 tao thu tuc de dua ra si so sv cho tung lop hoc (malop, tenlop,siso)
create proc ss
as
select LOP.malop,tenlop,count(masv)as SiSo
From lop,sv
where LOP.MaLop = sv.MaLop
group by LOP.MaLop,TenLop
--xem ket qua
exec ss



-- 5 tao thu tuc co tham so @TenLop de xoa nhung thong tin ve nhung sv hoc lop
tren
create Proc xoasv
@TenLopXoa char(20)
as
delete from sv
where sv.Malop in ( select MaLop
from lop
where TenLop=@TenLopXoa)
--xem ket qua
exec xoasv 'toan'
--6 tao trigger de kt du lieu nhap vao bang sinh vien: dtb<0 thi dua ra thong bao
create trigger batloi
on sv
for insert
as
if exists (select *
from inserted
where dtb<0)
begin
print 'du lieu khong hop le'
rollback tran
end
else
print 'du lieu nhap thanh cong'
-- xem kq
insert into sv
values('12311','mai anh bao','1/1/1991','nam','A1','13',-8)
--7 su dung cursor dua ra man hinh danh sach sv hoc lop co ten la 'cao dang 2a'

declare @masv char(20),@hoten char(20),@ns datetime,@gt char(5),@malop
char(20),@matinh char(20),@dtb int
declare th cursor dynamic
for
select sv.* from sv,lop
where sv.malop = lop.malop
and tenlop = 'anh'
open th
fetch first from th


into @masv,@hoten,@ns,@gt,@malop,@matinh,@dtb
print cast('malop' as char(20)) + cast('hoten' as char(20)) + 'ns' + cast('gt' as
char(5))+ cast('malop' as char(40)) + cast('matinh' as char(20))
while @@fetch_status = 0
begin
print @masv + @hoten + cast (@ns as char(30)) + cast (@gt as char(50)) +
@malop + @matinh + cast (@dtb as char(3))
fetch next from th
into @masv,@hoten,@ns,@gt,@malop,@matinh,@dtb
end
close th
deallocate th
Bài 4 Quản lý thực tập
create database THUCTAP
create table SV
( masv char(20) primary key,
tensv char(20),
ns datetime,
diachi char(20))

create table DETAI
( madt char(20) primary key,
tendt char(30),
GVHD char(20) )
create table SV_DT
( madt char(20),
masv char(20),
ntt char(20),
kq int,
constraint pk primary key (masv,madt),
constraint masv_fk foreign key (masv) references SV(masv),
constraint madt_fk foreign key (madt) references DETAI(madt))
--- tao view de tong hop thong tin ve cac sinh vien thuc tap tai que nha
create view TT_QUE
with encryption as


select SV.*,SV_DT.ntt
from SV,SV_DT
where SV_DT.masv=SV.masv
and diachi=ntt
--xem ket qua
select * from TT_QUE
-- tao view de tong hop cac sinh vien co ket qua tt cao nhat
create view KQ_CAO4
with encryption as
select SV.*,SV_DT.kq
from sv ,SV_DT
where sv.masv=sv_dt.masv
and kq IN (select max(kq) from SV_DT)

--xem kq
select * from KQ_CAO4
--tao view de tong hop thong tin ve moi giao vien da va dang huong dan bao nhiu
sv thuc tap
create view tt_gvdh
as
select dt.gvhd, count(sv_dt.masv) as tongsv
from detai dt, sv_dt
where dt.madt=sv_dt.madt
group by dt.gvhd
-- xem kq
select * from tt_gvdh
--tao thu tuc co dau vao la @gvhd dua ra ds cac sv do gv do hd
create proc dssv
@gvhd char(20)
as
select sv.*
from sv, sv_dt,detai dt
where sv.masv=sv_dt.masv
and sv_dt.madt=dt.madt
and (dt.gvhd=@gvhd)


--xem kq
exec dssv @gvhd='vuong phi'
--tao thu tuc dau vao la @ntt dua ra ds sv co ntt tren
create proc sv_ntt
@ntt char(20)
as
select sv.*

from sv, sv_dt
where sv.masv=sv_dt.masv
and ntt=@ntt
--xem kq
exec sv_ntt 'bac giang'
--tao thu tuc dua ra ds cac de tai chua co sv dk thuc tap
create proc dt
as
select *
from detai
where madt not in (select madt from sv_dt)
-- xem kq
exec dt
--tao trigger de kt khi nhap du lieu vao bang sv_dt neu kq thuc tap< 0 thi dua ra
thong bao...
create trigger loi_kq
on sv_dt
for insert
as
if exists (select kq from sv_dt where kq < 0)
begin
print 'xin loi ! gia tri nhap khong dung.vui long nhap lai'
rollback tran
end
else
print 'nhap thanh cong'


-- dung kieu cursor de dua ra danh sach sv phai thi lai (kq<5)
declare ttlai cursor dynamic

for
select *
from sv
where masv in(select masv
from sv_dt
where kq<5)
open ttlai
fetch first from ttlai
while @@fetch_status=0
fetch next from ttlai
close ttlai
deallocate ttlai
--dung lieu cursor de dua ra cac de tai co kq cao nhat
declare kq cursor dynamic
for
select *
from detai
where madt in (Select madt
from sv_dt
where kq = (select max(kq)
from sv_dt))
open kq
fetch first from kq
while @@fetch_status=0
fetch next from kq
close kq
deallocate kq
Bai 5 Quan ly thu vien
create database QLTV
create table sach

(
mas char(20) primary key not null,
tens char(20),
nxb char(20),
namxb int,


tentg char(20),
)
create table docgia
(
madg char(20) primary key,
tendg char(20),
dc char(20)
)
create table muon_tra
(
madg char(20),
mas char(20),
constraint pk primary key (madg,mas),
ngaymuon smalldatetime,
sl smallint,
ngayhentra smalldatetime,
ngaytra smalldatetime,
constraint madg_fk foreign key (madg) references docgia(madg),
constraint mas_fk foreign key (mas) references sach(mas)
)
--2tao view tong hop thong tin ve cac doc gia het han nhung chua tra sach
create view th_tra8
as

select dg.*
from docgia dg,muon_tra mt
where dg.madg=mt.madg
--and ngayhentra < getdate()
and ngaytra is null
--xem kq
select * from th_tra8
--3tao view tong hop danh muc sach chua tung dc doc gia muon
create view th
as
select *
from sach


where mas not in (select mas from muon_tra)
-- xem kq
select * from th
--4tao view tong hop tung loai sach hien co doc gia dang muon (mas ,tens ,
tentg,sl)
create view th_sach (mas, tens,tentg,soluong)
as
select s.mas,tens,tentg, sum(mt.sl) as soluong
from sach s, muon_tra mt
where s.mas=mt.mas
group by s.mas,tens,tentg

--xem kq
select * from th_sach
--tao thu tuc co tham so la @madg de dua ra danh muc sach ma doc gia tren dang
muon

create proc thsach2
@madg char(20)
as
select sach.*
from sach, muon_tra mt
where sach.mas = mt.mas
and getdate() < ngayhentra and ngaytra is null
and @madg = madg
--xem kq
exec thsach2 'd01'
--tao thu tuc co tham so la @ngaymuon de dua ra danh sach ma doc gia tren dang
muon sach vao ngay tren
create proc thmuon
@ngaymuon datetime
as
select docgia.*


from docgia, muon_tra mt
where docgia.madg = mt.madg
and @ngaymuon = ngaymuon
--kq
exec thmuon '3/10/2011'
--tao trigger de thong bao loi khi nhap vao bang muon_tra co so luong <0 thi
thong bao loi
create trigger loi
on muon_tra
for insert
as
if exists (select * from inserted where sl < 0)

begin
print 'xin loi ! gia tri nhap khong dung.vui long nhap lai'
rollback tran
end
else
print 'nhap thanh cong'
--insert
insert into muon_tra
values ('d04','ma03','4/4/2011',-9,'4/10/2011',)
--9dung kieu dl custor de dua ra man hinh ds cac doc gia hien tai van muon sach
cua thu vien
declare dg cursor dynamic
for
select *
from docgia
where madg in (select madg
from muon_tra
where ngaytra is null)
open dg
fetch first from dg
while @@fetch_status=0
fetch next from dg
close dg
deallocate dg


Bài 6 Quản lý dự án
create database QLDA
create table nhanvien
(

manv char(20) not null primary key,
hoten char(20) not null,
ns datetime,
gt char(5)
)
create table duan
(
mada char(20) not null primary key,
tenda char(30) not null,
ngansach money
)
create table thamgia
(
mada char(20) not null,
manv char(20)not null,
constraint pk primary key (mada,manv),
constraint mada_fk foreign key (mada) references duan(mada),
constraint manv_fk foreign key (manv) references nhanvien(manv),
tgbd datetime,
tgkt datetime
)
--tao view tong hop cac nhan vien chua tham gia du an nao
create view c1
as
select *
from nhanvien
where manv not in(select manv
from thamgia)
-- ket qua



select * from c1
--tao view tong hop cac du an co ngan sach lon nhat
create view c2
as
select *
from duan
where ngansach in (select max(ngansach) from duan)
-- ket qua
select * from c2
--tao view tong hop moi nhan vien lam bao nhiu du an
create view th
as
select nv.manv,hoten, count (tg.manv) as soluong
from nhanvien nv, thamgia tg
where nv.manv=tg.manv
group by nv.manv,hoten
--kq
select * from th
--tao thu tuc co tham so vao la @tenda dua ra danh sach cac nv tham ra du an tren
create proc c4
@tenda char(30)
as
select nv.*
from nhanvien nv, duan da, thamgia tg
where nv.manv = tg.manv
and tg.mada = da.mada
and tenda =@tenda
--kq
exec c4 'nau com'

--tao thu tuc co tham so vao la @tgkt va @mada de ra ds cac nv phai hoan thanh
du an do vao nhay tren
create proc c5


@tgkt datetime, @mada char(20)
as
select nv.*
from nhanvien nv, thamgia tg
where nv.manv = tg.manv
and tgkt = @tgkt and mada = @mada
--kq
exec c5 '5/12/2011', 'da02'
--tạo trigger để kt dl nhập vào bảng duan nếu ngân sách<0 thì đưa ra màn hình
thông báo lỗi
create trigger cau6
on duan
for insert
as
if exists (select ngansach
from duan
where ngansach<0)
begin
print 'du lieu nhap ko chinh xac'
rollback tran
end
else
print 'du lieu nhap thanh cong'
insert into duan
values ('da04','xay nha','2000000')

--dung kieu dl curcor de dua ra danh sach nv bat dau duan phòng chống bệnh mắt
hột từ ngày’ từ ngày 20/11/2005-declare th cursor dynamic
for
select nv.*,tenda
from nhanvien nv,duan,thamgia tg
where nv.manv=tg.manv
and duan.mada=tg.mada
and tenda='phong benh dau mat hot'
and tgbt = '11/20/2005'


open th
fetch first from th
while @@fetch_status=0
fetch next from th
close th
deallocate th
--dung kieu du lieu cúor de dua ra danh sach cac du an chua tung co nhan vien
tham gia dk
declare th2 cursor dynamic
for
select *
from duan
where mada not in (select mada
from thamgia )
open th2
fetch first from th2
while @@fetch_status=0
fetch next from th2
close th2

deallocate th2
bai tap 7 quản lý tài sản
create database QLTS1
create table phong
(map char(20) primary key,
tenp char(20) not null)
create table taisan
(mats char(20) primary key,
tents char(20) ,
donvi char(20),
gia int )
create table phanphoi
(
mats char(20),


map char(20),
soluong int not null,
ngaypp smalldatetime,
ghichu char(20),
constraint pk primary key (mats,map),
constraint map_fk foreign key (map)
references phong(map),
constraint mats_fk foreign key (mats)
references taisan(mats))

--tạo view de tổng hợp thông tin về các tài sản có đơn giá max-create view th
as
select *
from taisan

where gia= (select max(gia)
from taisan)
--xem kq
select * from th
--tạo view để tổng hợp tt về những tài sản chưa được pp cho các fòng để sd-create view th1
as
select *
from taisan
where mats not in (select mats
from phanphoi)
--xem kq
select * from th1
--4tạo ttục có tham số @tenp để đưa ra danh sách các ts dc pp vào fòng trên-create proc th2
@tenp char(20)
as
select *
from taisan


where mats in (select pp.mats
from phanphoi pp,phong p
where p.map=pp.map
and @tenp=tenp)
exec th2 'phong1'
--5tạo ttục có ts là @tents để đưa ra ds các fòng đc pp ts trên-create proc th3
@tents char(20)
as
select *
from phong
where map in (select pp.map

from phanphoi pp,taisan ts
where ts.mats=pp.mats
and @tents=tents)
--kq
exec th3 'maytinh'
--6 tạo trigger để kt dl khi nhập vào bảng dmtaisan nếu đơngia<0 thì đưa ra màn
hình thông báo lỗi và bản ghi này không dc phép nhập vào bảng dl ngược lại đưa
ra thông báo bản ghi đã nhập thanh công-create trigger batloi
on taisan
for insert
as
if exists (select gia
from taisan
where gia<0)
begin
print 'du lieu nhap khong dung'
rollback tran
end
else
print 'du lieu nhap thanh cong'
Bai 8 Quan ly diem
create database QLDT


create table sinhvien
(masv char(20) primary key,
tensv char(20) not null,
ns smalldatetime not null,
quequan char(20) not null)
create table mon

(mam char(20) primary key,
tenm char(20) not null,
dvht int not null)
create table diem
(mam char(20) not null,
masv char(20) not null,
diemthi float not null,
constraint pk primary key(mam,masv),
constraint mam_fk foreign key(mam) references mon(mam),
constraint masv_fk foreign key (masv) references sinhvien(masv))

--2Tạo view để tổng họp tt về các sv có điểm thi max của môn học (cơ sở dl)-create view th1
as
select *
from sinhvien
where masv in (select masv
from diem
where diemthi = (select max(diemthi)
from diem,mon
where mon.mam=diem.mam and tenm='csdl'))
-- xem kq
select *
from th1


--3tạo thủ tục có tham số @tenm để đưa ra ds sv phải thi lại môn học trên
create proc th2
@tenm char(20)
as
select *

from sinhvien
where masv in (select masv
from diem,mon
where mon.mam=diem.mam and diemthi<5.0 and @tenm=tenm)
---------exec th2 'tin hoc'
--4dùng dl curcor để đưa ra tb điểm thi của từng môn học-declare th3 cursor dynamic
for
select mon.mam,tenm,avg(diemthi) as dtb
from mon,diem
where mon.mam=diem.mam
group by mon.mam,tenm
open th3
fetch first from th3
while @@fetch_status=0
fetch next from th3
close th3
deallocate th3
Bai 10 quan ly cong doan
create database QLY
create table tocongdoan
(matcd char(20)primary key,
tentcd char(20) not null)
create table congdoan
(macdv char(20)primary key,
tencdv char(20)not null,


ngaysinh smalldatetime,
ngayv smalldatetime,
matcd char(20),

constraint matcd foreign key (matcd)references tocongdoan(matcd))
create table khenthuong
(macdv char(20),
mskt char(20)primary key,
lydo char(50),
nam int,
constraint macdv foreign key (macdv)references congdoan(macdv))
--tao view de tong hop thong tin va cac cong doan da dc khen thuong cua to cong
doan "ha thong thong tin"
create view th1
as
select *
from congdoan
where macdv in (select macdv
from khenthuong
where matcd in (select matcd
from tocongdoan
where tentcd='he thong thong tin'))
-- xem kq
select * from th1
--tao view cho biet thong tin cac cong doan vien chua tung duoc khen thuong
create view th1
as
select *
from congdoan
where macdv not in (select macdv
from khenthuong)
-- xem kq
select * from th2
--4 tao view de thong tin ve cac cong doan vien chua tung duoc khen thuong ve

viec hoan thanh de tai cap bo


create view th3
as
select *
from congdoan
where macdv in (select macdv
from khenthuong
where lydo='hoan thanh de tai cap bo')
-- xem kq
select * from th3
---tao thu tuc co tham so vao la @tentcd de dua ra thong tin ve nhung doan vien
cua chi doan tren
create proc th4
@tentcd char(20)
as
select *
from congdoan
where macdv in (Select macdv
from khenthuong
where matcd in(Select matcd
from tocongdoan
where tentcd=@tentcd))
--kq
exec th4 'he thong thong tin'
---tao thu tuc co tham so vao la @tentcd , @nam dua ra nhung cong doan vien co
to cong doan vien dc khen thuong vao nam tren
create proc th5
@tentcd char(20),

@nam int
as
select congdoan.*
from congdoan cd,tocongdoan td
where cd.matcd=td.matcd
and tentcd=@tentcd
and macdv in (select macdv
from khenthuong


×