bai 1 create database bai1_QLBH use QLBH go create table dmkhach (mak char char( (10) 10)primary key key, , tenk nvarchar nvarchar( (100) 100) not null, diachi nvarchar nvarchar( (30), 30), dienthoai varchar varchar( (15)) 15)) go create table dmhang (mah char char( (10) 10)primary key key, , tenh nvarchar nvarchar( (100) 100) not null, dvt varchar varchar( (30)) 30)) go create table hoadonban (sohd char char( (10) 10) primary key key, , mak char char( (10), 10), ngayhd smalldatetime smalldatetime, , diengiai nvarchar nvarchar( (30), 30), constraint mak foreign key (mak) mak) references dmkhach( dmkhach (mak)) mak)) go create table chitiethoadon (sohd char char( (10), 10), mah char char( (10), 10), soluong int int, , dongia int int, , constraint mah_sohd primary key key( (sohd, sohd,mah), mah), constraint sohd foreign key key( (sohd) sohd)references hoadonban( hoadonban (sohd), sohd), constraint mah foreign key key( (mah) mah)references dmhang( dmhang (mah)) mah)) select insert insert insert insert
* from dmkhach into dmkhach values into dmkhach values into dmkhach values into dmkhach values
select insert insert insert
* from dmhang into dmhang values ('h01' 'h01', ,'dien thoai', thoai' ,'chiec' 'chiec') ) into dmhang values ('h02', 'h02','may tinh', tinh' ,'chiec' 'chiec') ) into dmhang values ('h04' 'h04', ,'may tinh', tinh' ,'chiec' 'chiec') )
('1' '1', ,'chinh' 'chinh', ,'bac can', can' ,'01674692693' '01674692693') ) ('2' '2', ,'minh' 'minh', ,'bac giang', giang' ,'01674692667' '01674692667') ) ('3' '3', ,'thoa' 'thoa', ,'thai nguyen', nguyen' ,'01674692668' '01674692668') ) ('4' '4', ,'huynh' 'huynh', ,'thai nguyen', nguyen' ,'01674692891' '01674692891') )
select * from hoadonban select* insert into hoadonban values values( ('hd01' 'hd01', ,'1' '1', ,'2/6/2010' '2/6/2010', ,'nhap hang') hang' ) insert into hoadonban values values( ('hd02' 'hd02', ,'2' '2', ,'4/9/2009' '4/9/2009', ,'xuat hang') hang' ) insert into hoadonban values values( ('hd03' 'hd03', ,'3' '3', ,'20/11/2006' '20/11/2006', ,'xuat hang') hang' ) insert into hoadonban values values( ('hd04' 'hd04', ,'4' '4', ,'4/9/2009' '4/9/2009', ,'nhap hang') hang' ) insert into hoadonban values values( ('hd05' 'hd05', ,'5' '5', ,'9/4/2009' '9/4/2009', ,'nhap hang') hang' ) insert into hoadonban values values( ('hd06' 'hd06', ,'6' '6', ,'9/4/2010' '9/4/2010', ,'nhap hang') hang' ) insert into hoadonban values values( ('hd07' 'hd07', ,'7' '7', ,'10/20/2005' '10/20/2005', ,'nhap hang') hang' ) select insert insert insert
* from cthoadon into cthoadon values values( ('hd01' 'hd01', ,'h02' 'h02', ,'10' '10', ,'20' '20') ) into cthoadon values values( ('hd02' 'hd02', ,'h01' 'h01', ,'5' '5', ,'30' '30') ) into cthoadon values values( ('hd02' 'hd02', ,'h02' 'h02', ,'8' '8', ,'30' '30') ) 1
Ý 1.1 Đưa ra danh sách mặt hàng chưa được bán trong tháng 9 năm 2009 select dmhang. dmhang .mah, mah,tenh, tenh,dvt from dmhang where mah not in( in(select select mah from chitiethoadon where sohd not in( in(select select sohd from hoadonban where month month( (ngayhd)= ngayhd )=9 9 and year year( (ngayhd)= ngayhd )=2009 2009)) ))
Ý 1.2 Đưa ra danh sách khách hàng có địa chỉ ở Thái Nguyên và từng mua hàng trong tháng 9 năm 2009 select dmkhach.* dmkhach .* from dmkhach where diachi= diachi ='thainguyen' and mak in( in(select select mak from hoadonban where month month( (ngayhd)= ngayhd )='9' '9' and year year( (ngayhd)= ngayhd )='2009' '2009') )
Ý 1.3 Đưa ra số lượng đã bán tương ứng của từng mặt hàng trong tháng 9 năm 2009 select cthoadon. cthoadon .soluong, soluong ,dmhang. dmhang .mah, mah,tenh from cthoadon, cthoadon ,dmhang, dmhang ,hoadonban where dmhang. dmhang .mah= mah=cthoadon. cthoadon .mah and cthoadon. cthoadon .sohd= sohd=hoadonban. hoadonban .sohd and month month( (ngayhd)= ngayhd )='9' '9' and year year( (ngayhd)= ngayhd )='2009' '2009' group by cthoadon. cthoadon .soluong, soluong ,dmhang. dmhang .mah, mah,tenh
Ý 1.4 Đưa ra tổng số lượng hàng đã bán cho mục đích mua hàng ‘Tiếp khách’ select sum sum( (soluong) soluong ) as tongsoluong from chitiethoadon where sohd in( in(select select sohd from hoadonban where diengiai= diengiai ='xuat hang') hang' )
Ý 1.5 Hiển thị thông tin khách hàng đã từng mua hàng tại cửa hàng select dmkhach.* dmkhach .* from dmkhach where mak in( in(select select mak from hoadonban where diengiai= diengiai ='mua hang') hang' )
Ý 2 Tạo View để tổng hợp dữ liệu về từng mặt hàng đã được bán create view vwdulieuhang as select dmhang.*, dmhang .*,sum sum( (soluong) soluong )as soluongban from dmhang, dmhang ,chitiethoadon where dmhang. dmhang .mah= mah=cthoadon. cthoadon .mah group by dmhang. dmhang .mah, mah,tenh, tenh,dvt go select * from vwhang 2
Ý 3 Tạo View để tổng hợp dữ liệu về các mặt hàng đã được bán với số lượng lớn nhất create view vwhangban as select dmhang. dmhang .mah, mah,tenh, tenh,sum sum( (soluong) soluong )as soluong from dmhang, dmhang ,cthoadon where dmhang. dmhang .mah= mah=cthoadon. cthoadon .mah group by dmhang. dmhang .mah, mah,tenh go select * from vwhangban create view vwhangbanmax as select dmhang.*, dmhang .*,vwhangbanmax vwhangbanmax. .soluong from dmhang, dmhang ,vwhangbanmax where dmhang. dmhang .mah= mah=vwhangbanmax. vwhangbanmax .mah and soluong=( soluong =(select select max max( (soluong) soluong ) from vwhangbanmax) vwhangbanmax ) go select * from vwhangbanmax
Ý 4 Tạo View để tổng hợp dữ liệu về các khách hàng đã mua hàng trong ngày 20/10/2005 create view vwkhachhangmua as select dmkhach.* dmkhach .* from dmkhach where mak in( in(select select mak from hoadonban where day day( (ngayhd)= ngayhd )=20 20 and month month( (ngayhd)= ngayhd )=10 10 and year year( (ngayhd)= ngayhd )=2005 2005) ) go select * from vwkhachhangmua
Ý 5 Tạo thủ tục có tham số vào là @SoHD để đưa ra danh mục các mặt hàng có trong hoá đơn trên. create proc spdonhang @sohd char char( (10) 10) as select dmhang.* dmhang .* from dmhang where mah in( in(select select mah from chitiethoadon where sohd= sohd=@sohd) @sohd) go exec spdonhang 'hd01'
Ý 6 Tạo thủ tục có tham số vào là @Ngay để đưa ra danh mục các mặt hàng đã được bán vào ngày trên create proc sphangban @ngay smalldatetime as select dmhang. dmhang .mah, mah,tenh, tenh,dvt, dvt,soluong from dmhang ,chitiethoadon ,hoadonban where dmhang. dmhang .mah= mah=chitiethoadon .mah and chitiethoadon .sohd= sohd=hoadonban. hoadonban .sohd 3
and hoadonban. hoadonban .ngayhd= ngayhd =@ngay go exec sphangban '4/9/2009'
Ý 8 Tạo kiểu dữ liệu CURSOR để lưu trữ thông tin về các mặt hàng đã được bán trong ngày 20/11/2006. 20/11/2006. Sau đó đưa ra màn hình danh sách dữ liệu trên. declare tro_luutruhang cursor scroll dynamic for select dmhang.* dmhang .* from dmhang where mah in( in(select select mah from cthoadon where sohd in( in(select select sohd from hoadonban where day day( (ngayhd)= ngayhd )='20' '20' and month month( (ngayhd)= ngayhd )='11' '11' and year year( (ngayhd)= ngayhd )='2006' '2006')) )) open tro_luutruhang fetch first from tro_luutruhang while @@fetch_status =0 fetch next from tro_luutruhang close tro_luutruhang deallocate tro_luutruhang select * from dmhang Ý 9 Thêm mới một trường TongTien vào bảng HoaDonBan HoaDonBan alter table hoadonban add tongtien bigint
Ý 10 Dùng kiểu dữ liệu CURSOR để cập nhập dữ liệu cho trường TongTien declare tro_capnhat cursor scroll dynamic for select sohd, sohd,tongtien from hoadonban declare @sohd char char( (10), 10),@tongtien @tongtien bigint open q fetch first from tro_capnhat into @sohd, @sohd,@tongtien while @@fetch_status =0 begin set @tongtien=( @tongtien =(select select sum sum( (soluong* soluong *dongia) dongia ) from chitiethoadon where sohd= sohd=@sohd) @sohd) update hoadonban set tongtien= tongtien =@tongtien where sohd= sohd=@sohd fetch next from tro_capnhat into @sohd, @sohd,@tongtien end close tro_capnhat deallocate tro_capnhat select * from hoadonban bai 2 Ý 1
4
create database bai2_QLnha use QLnha go create table khach (mak char(10)primary key, tenk nvarchar(100)not null, diachi nvarchar(100), sodt varchar(15)) go create table nha (manha char(10)primary key, tenchunha nvarchar(100)not null, giathue real, diachinha nvarchar(30)) go create table hopdong (sohd char(10), manha char(10), mak char(10), ngaybd smalldatetime, ngaykt smalldatetime, constraint sohd foreign key (sohd) references hopdong(sohd) constraint manha foreign key (manha)references nha(manha), constraint mak foreign key(mak)references khach(mak)) select * from khach insert into khach values('k01','chinh','bac ninh','01674692693') insert into khach values('k02','linh','bac giang','01674692667') select insert insert insert
* from nha into nha values('nha09','hoang','200','thai nguyen') into nha values('nha01','ha','300','thai nguyen') into nha values('nha02','hang','300','to 10 phuong phan dinh phung' )
select insert insert insert insert
* from hopdong into hopdong values('hd01','nha09','k01','1/20/2009','5/20/2009') into hopdong values('hd02','nha01','k02','2/8/2009','5/10/2009') into hopdong values('hd03','nha01','k02','2/8/2009','12/20/2009') into hopdong values('hd04','nha02','k02','2/8/2009','12/20/2009')
Ý 1.1 Đưa ra danh sách các ngôi nhà đang được thuê select nha.* from nha where manha in(select manha from hopdong where ngaykt is null)
Ý 1.2 Đưa ra thông tin về khách hàng đã thuê ngôi nhà có mã là ‘NHA09’ select khach.* from khach where mak in(select mak from hopdong where manha='nha09')
Ý 1.3 Đưa ra thông tin về những ngôi nhà hiện chưa có người nào thuê 5
select nha.* from nha where manha in(Select manha from hopdong where ngaykt
Ý 2 Tạo View để tổng hợp thông tin về những ngôi nhà có giá thuê cao nhất. create view vwgiathuemax as select nha.* from nha where giathue=(select max(giathue) from nha) go select * from vwgiathuemax
Ý 3 Tạo View để tổng hợp thông tin về các khách hàng ngày hôm nay đã hết hạn hợp đồng. create view vwhethanhd as select khach.* from khach where mak in(select mak from hopdong where ngaykt=getdate()) go select * from vwhethanhd
Ý 4 Tạo View để tổng hợp thông tin về các ngôi nhà chưa từng được ai thuê. create view vwchuathue as select nha.* from nha where manha not in (select manha from hopdong) go select * from vwchuathue
Ý 5 Tạo thủ tục có một tham số vào là @ngay để đưa ra danh sách các khách hàng đã hết hạn hợp đồng vào ngày trên create proc spdskh @ngay smalldatetime as select khach.* from khach where mak in (select mak from hopdong where ngaykt=@ngay) go exec spdskh '12/20/2009'
Ý 6 Tạo thủ tục để đưa ra màn hình danh sách các ngôi nhà hiện tại chưa có khách hàng thuê. create proc spchuathue as select nha.* from nha 6
where manha in(Select manha from hopdong where ngaykt
Ý 7 Tạo thủ tục có tham số là @Ngay để đưa ra danh sách các khách hàng bắt đầu thuê nhà vào ngày trên. create proc spthuenha @ngay smalldatetime as select khach.* from khach where mak in(select mak from hopdong where ngaybd=@ngay) go exec spthuenha '1/20/2009'
Ý 9 Sử dụng kiểu dữ liệu CURSOR để đưa ra màn hình thông tin về các khách hàng đang thuê các ngôi nhà có địa chỉ ở “Tổ 10, phường Phan Đình Phùng”. declare tro_thongtin cursor scroll dynamic for select khach.* from khach where mak in(select mak from hopdong where getdate()
Y 10 Sử dụng kiểu dữ liệu CURSOR để đưa ra danh sách các ngôi nhà hiện tại chưa có khách hàng thuê. declare tro_chuathue cursor scroll dynamic for select nha.* from nha where manha in(select manha from hopdong where ngaykt
7
bai 3
Ý 1 create database QLSV use QLSV go create table lop (malop char(10)primary key, tenlop nvarchar(100)not null) go create table tinh (matinh char(10)primary key, tentinh nvarchar(100)not null) go create table sinhvien (masv char(10), hoten nvarchar(100)not null, ngaysinh smalldatetime, gioitinh nvarchar(15), malop char(10), matinh char(10), dtb real not null, constraint malop_matinh primary key(malop,matinh) constraint masv foreign key (masv)references masv(sinhvien) constraint malop foreign key (malop)references lop(malop), constraint matinh foreign key(matinh)references tinh(matinh)) select * from lop insert into lop values('01','cao dang 2A') insert into lop values('02','cao dang 2B') select * from tinh insert into tinh values('t02','thai nguyen') insert into tinh values('t03','ha noi') select insert insert insert insert
* from sinhvien into sinhvien values('sv01','chinh','9/8/1989','nam','01','t02','7') into sinhvien values('sv02','linh','6/6/1990','nu','01','t03','8') into sinhvien values('sv03','lien','12/6/191','nu','02','t02','4') into sinhvien values ('m04','thuy','07/19/1988','nu','02','t01','-5.5')
Ý 1.1 Đưa ra thông tin về những sinh viên có điểm trung bình dưới 5 select sinhvien.* from sinhvien where dtb<'5.0'
Ý 1.2 Đưa ra thông tin về sinh viên có địa chỉ ở Thái Nguyên select sinhvien.* from sinhvien where matinh in(select matinh from tinh where tentinh='thai nguyen')
Ý 1.3 Đưa ra thông tin về các lớp học không có sinh viên nào ở Hà Nội 8
select sinhvien.* from sinhvien where matinh not in(select matinh from tinh where tentinh='ha noi')
Ý 2 Tạo View để tổng hợp thông tin về các sinh viên có điểm trung bình cao nhất. create view vw_dtbmax as select sinhvien.* from sinhvien where dtb =(select max(dtb) from sinhvien) go select * from vw_dtbmax
Ý 3 Tạo View để tổng hợp thông tin về các sinh viên có điểm trung bình cao nhất theo từng lớp học create view vw_maxdtb as select sinhvien.*,max(dtb)as dtbmax from sinhvien where dtb=(select max(dtb) from sinhvien) group by masv,hoten,ngaysinh,gioitinh,malop,matinh,dtb go select * from vw_maxdtb
Ý 4 Tạo thủ tục để đưa ra sĩ số sinh viên cho từng lớp học create proc spsinhvien as select lop.malop,tenlop,count(masv)as siso from lop,sinhvien where lop.malop=sinhvien.malop group by lop.malop,tenlop go exec spsinhvien
Ý 5 Tạo thủ tục có tham số là @Tenlop để xoá thông tin về những sinh viên học ở lớp trên. create proc spxoathtin @tenlop varchar(40) as delete from sinhvien where malop in (select malop from lop where sinhvien.malop=lop.malop and @tenlop=tenlop) exec spxoathtin 'mang' select * from sinhvien
Ý 6 Tạo TRIGGER để kiểm tra dữ liệu khi nhập vào bảng sinh viên: nếu điểm trung bình nhập vào <0 thì đưa ra màn hình thông báo lỗi và bản nghi này không được phép nhập vào bảng dữ liệu, ngược lại đưa ra thông báo bản ghi đã nhập thành công. 9
create trigger baoloi on sinhvien for insert as if exists (select dtb from sinhvien where dtb<0) begin print 'nhap sai' rollback tran end else print 'du lieu nhap dung'
Ý 7 Sử dụng kiểu dữ liệu CURSOR để đưa ra màn hình danh sách sinh viên học ở lớp có tên là ‘Cao đẳng 2A’ declare tro_hoclop cursor scroll dynamic for select sinhvien.* from sinhvien where malop in(select malop from lop where tenlop='cao dang 2A') open tro_hoclop fetch first from tro_hoclop while @@fetch_status =0 fetch next from tro_hoclop close tro_hoclop deallocate tro_hoclop bai 4 Ý 1 create database bai4_thuctap use bai4_thuctap go create table sinhvien (masv char(10)primary key, hotensv nvarchar(100)not null, ns smalldatetime, diachi nvarchar(100)) go create table detai (madt char(10)primary key, tendt nvarchar(100)not null, gvhd nvarchar(100)not null) go create table sv_detai (madt char(10), masv char(10), ntt nvarchar(100), kq real, constraint pk primary key(madt,masv), constraint madt foreign key (madt)references detai(madt), constraint masv foreign key(masv)references sinhvien(masv)) 10
select insert insert insert insert
* from sinhvien into sinhvien values('sv01','chinh','9/8/1989','bac ninh') into sinhvien values('sv02','binh','6/6/1989','bac giang') into sinhvien values('sv03','lan','6/6/1989','bac giang') into sinhvien values('sv04','tinh','6/6/1989','ha noi')
select insert insert insert
* from detai into detai values('dt01','xu ly tin hieu so','thay vinh') into detai values('dt02','phan tich mach','thay thai') into detai values('dt03','phan tich nhung','thay thanh')
select insert insert insert insert
* from sv_detai into sv_detai values('dt01','sv02','bac giang','7.8') into sv_detai values('dt02','sv01','ha noi','8') into sv_detai values('dt02','sv03','ha noi','8') into sv_detai values('dt01','sv04','ha noi','8')
Ý 2 Tạo View để tổng hợp thông tin về các sinh viên tham gia thực tập tại quê create view vw_trungque as select sinhvien.* from sinhvien where masv in(select masv from sv_detai where ntt=diachi) go select * from
vw_trungque Ý 3 Tạo View để tổng hợp thông tin về các sinh viên có kết quả thực tập cao nhất create view vw_maxkq as select sinhvien.* from sinhvien where masv in(select masv from sv_detai where kq=(select max(kq) from sv_detai)) go select * from vw_maxkq
Ý 4 Tạo View để tổng hợp thông tin về mỗi giáo viên đã và đang hướng dẫn bao nhiêu sinh viên thực tập create view vw_gv as select gvhd,count(distinct(sv_detai.masv))as sodt from detai,sv_detai where detai.madt=sv_detai.madt group by gvhd go select * from vw_gv
Ý 5 Tạo thủ tục có tham số vào là @gvhd để đưa ra danh sách các sinh viên do giáo viên trên hướng dẫn 11
create proc sp_gvhd @gvhd nvarchar(100) as select sinhvien.* from sinhvien where masv in(select masv from sv_detai where madt in(select madt from detai where gvhd=@gvhd)) go exec sp_gvhd 'thay vinh'
Ý 6 Tạo thủ tục có tham số vào là @NTT để đưa ra danh sách các sinh viên thực tập tại địa điểm trên create proc sp_sv @ntt nvarchar(100) as select sinhvien.* from sinhvien where masv in(select masv from sv_detai where ntt=@ntt) go exec sp_sv 'ha noi'
Ý 7 Tạo thủ tục để đưa ra danh sách các đề tài chưa từng có sinh viên nào tham gia đăng ký thực tập. create proc spchuadk as select detai.* from detai where madt not in (select madt from sv_detai) go exec spchuadk
Ý 8 Tạo TRIGGER để kiểm tra khi nhập dữ liệu vào bảng SV_DETAI nếu kết quả thực tập nhỏ hơn 0 thì đưa ra màn hình thông báo lỗi và bản nghi này không được phép nhập vào bảng dữ liệu, ngược lại đưa ra thông báo bản ghi đã nhập thành công. create trigger kiemtra on sv_detai for insert as if exists (select kq from sv_detai where (kq<0)) begin print 'nhapsa!i' rollback tran end else 12
print 'nhap dung!' go Ý 9 Dùng kiểu dữ liệu CURSOR để đưa ra màn hình danh sách các sinh viên phải thực tập lại declare tro_ttlai cursor scroll dynamic for select sinhvien.* from sinhvien where masv in(select masv from sv_detai where kq<5) open tro_ttlai fetch first from tro_ttlai while @@fetch_status =0 fetch next from tro_ttlai close tro_ttlai deallocate tro_ttlai
Ý 10 Dùng kiểu dữ liệu CURSOR để đưa ra màn hình danh sách các đề tài có kết quả thực tập cao nhất
declare tro_kqmax cursor scroll dynamic for select detai.* from detai where madt in(Select madt from sv_detai where kq = (select max(kq) from sv_detai)) open tro_kqmax fetch first from tro_kqmax while @@fetch_status =0 fetch next from tro_kqmax close tro_kqmax deallocate tro_kqmax bai 5 Ý 1 create database QLTV use QLTV go create table sach (mas char(10)primary key, tens nvarchar(100)not null, nxb nvarchar(100)not null, namxb smalldatetime, tentg nvarchar(100)not null) go create table docgia (madg char(10)primary key, tendg nvarchar(100)not null, diachidg nvarchar(100)) go create table muon_tra 13
(madg char(10), mas char(10), ngaymuon smalldatetime primary key, soluong int, ngayhentra smalldatetime, ngaytra smalldatetime, constraint madg foreign key(madg)references docgia(madg), constraint mas foreign key(mas)references sach(mas)) select insert insert insert
* from sach into sach values('01','van','nxbgiaoduc','2000','le tu') into sach values('02','vat ly','nxbgiaoduc','2000','thanh sang') into sach values('03','tin hoc','nxbkhaohoc','2000','pham trung')
select * from docgia insert into docgia values ('dg01','thao','daihoc k7d') insert into docgia values ('dg02','thu','daihoc k8c') select * from muon_tra insert into muon_tra values('dg01','02','11/20/2010','1','11/28/2010','12/1/20011') insert into muon_tra values('dg02','01','11/2/2010','1','11/8/2010','11/9/2010') insert into muon_tra values('dg02','02','12/9/2010','1','12/15/2010','12/20/2010') insert into muon_tra(madg,mas,ngaymuon,soluong,ngayhentra) values('dg1','01','12/9/2010','1','12/20/2010')
Ý 2 Tạo View để tổng hợp thông tin về các độc giả đã hết hạn trả sách nhưng chưa trả create view vwdocgiahh as select docgia.* from docgia where madg in(select madg from muon_tra where ngayhentra
Ý 3 Tạo View để tổng hợp thông tin về danh mục sách chưa từng được độc giả nào mượn create view vwchuamuon as select sach.* from sach where mas not in (select mas from muon_tra) go select * from vwchuamuon
Ý 4 Tạo View để tổng hợp thông tin về từng loại sách hiện tại có độc giả đang mượn create view vwdangmuon as select sach.mas,tens,tentg,muon_tra.soluong from sach,muon_tra where sach.mas=muon_tra.mas 14
and getdate()
Ý 5 Tạo thủ tục có tham số là @MaDG để đưa ra danh mục sách mà độc giả trên đang mượn create proc spdgmuon @madg nvarchar(100) as select sach.* from sach where mas in(select mas from muon_tra where getdate()
Ý 6 Tạo thủ tục có tham số là @NgayMuon để đưa ra danh sách các độc giả đã mượn sách vào ngày trên create proc spmuonngay @ngaymuon smalldatetime as select docgia.* from docgia where madg in(Select madg from muon_tra where ngaymuon=@ngaymuon) go exec spmuonngay '12/9/2010'
Ý 7 Tạo thủ tục để đưa ra danh sách các độc giả ngày hôm nay là hạn cuối cùng phải trả sách cho thư viện create proc sphantrasach as select docgia.* from docgia where madg in(select madg from muon_tra where ngayhentra=getdate()) go exec sphantrasach Ý 8 Tạo TRIGGER để kiểm tra dữ liệu khi nhập vào bảng MUON_TRA
nếu số lượng mượn nhỏ hơn 0 thì thì đưa ra màn hình thông báo lỗi và bản nghi này không được phép nhập vào bảng dữ liệu, ngược lại đưa ra thông báo bản ghi đã nhập thành công. create trigger kt on muontra for insert as if exists (select sl from inserted where sl<0) begin print'ban ghi k hop le' 15
rollback tran end else print'nhap thanh công' insert into muon_tra values('d03','s03','11/2/2009','3','12/2/2009','2/2/2009')
Ý 9 Dùng kiểu dữ liệu CURSOR để đưa ra màn hình danh sách các độc giả đã hiện tại vẫn đang mượn sách của thư viện. declare tro_dgmuon cursor scroll dynamic for select docgia.* from docgia where madg in(select madg from muon_tra where getdate()
select * from thamgia insert into thamgia values('da05','nv01','11/20/2005','10/10/2010')
Ý 2 Tạo View để tổng hợp thông tin về các nhân viên chưa tham gia bất kỳ dự án nào create view vwchuathamgia as select nhanvien .* from nhanvien where manv not in(select manv from thamgia) go select* from vwchuathamgia
Ý 3 Tạo View để tổng hợp thông tin về các dự án có ngân sách lớn nhất create view vw_maxngansach as select duan.* from duan where ngansach=(select max(ngansach) from duan) go select * from vw_maxngansach
Tạo View để tổng hợp thông tin về mỗi nhân viên đã tham gia bao nhiêu dự án. create view vw_nhanvientg as select nhanvien.*,count(thamgia.manv)as soduan from nhanvien,thamgia where nhanvien.manv=thamgia.manv group by nhanvien.manv,hoten,ngaysinh,gt go select * from vw_nhanvientg
Ý 4 Tạo thủ tục có tham số là @TenDA để đưa ra danh sách các nhân viên tham gia dự án trên. create proc sp_nvthamgia @tenda nvarchar(100) as select nhanvien.* from nhanvien where manv in(select manv from thamgia where mada in(select mada from duan where tenda=@tenda)) go exec sp_nvthamgia 'xdtruong'
Ý 5 Tạo thủ tục có tham số là @TGKT và @MaDA để đưa ra danh sách các nhân viên phải hoàn thành dự án đó vào ngày trên. create proc sp_nhanvienht @tgkt smalldatetime, @mada char(10) as select nhanvien.* 17
from nhanvien where manv in(select manv from thamgia where tgkt=@tgkt and mada=@mada) go exec sp_nhanvien '10/10/2010','da05'
Ý 6 Tạo TRIGGER để kiểm tra dữ liệu khi nhập vào bảng DUAN nếu ngân sách nhỏ hơn 0 thì đưa ra màn hình thông báo lỗi và bản nghi này không được phép nhập vào bảng dữ liệu, ngược lại đưa ra thông báo bản ghi đã nhập thành công. create trigger ktdl on duan for insert as if exists (select ngansach from duan where ngansach<0) begin rollback tran print 'du lieu nhap ko thanh cong' end else print 'du lieu nhap thanh cong' go insert into duan values('da04','xdnha','5000')
Ý 7 Dùng kiểu dữ liệu CURSOR để đưa ra danh sách nhân viên bắt đầu thực hiện dự án “Phòng chống bệnh mắt hột” từ ngày 20/11/2005. declare tro_da cursor scroll dynamic for select nhanvien.* from nhanvien where manv in(select manv from thamgia where day(tgbd)=20 and month(tgbd)=11 and year(tgbd)=2005 and mada in(select mada from duan where tenda='phong chong benh mat hot' )) open tro_da fetch first from tro_da while @@fetch_status =0 fetch next from tro_da close tro_da p1 deallocate tro_da
Ý 8 Dùng kiểu dữ liệu CURSOR để đưa ra danh sách các dự án chưa từng có nhân viên nào tham gia đăng ký declare tro_chuatg cursor scroll dynamic for select duan.* from duan where mada not in (select mada 18
from thamgia where duan.mada=thamgia.mada) open tro_chuatg fetch first from tro_chuatg while @@fetch_status =0 fetch next from tro_chuatg close tro_chuatg deallocate tro_chuatg bai 7 Ý 1 create database QLTS use QLTS go create table dmphong (map char(10)primary key, tenp nvarchar(100)not null) go create table dmtaisan (mats char(5)primary key, tents nvarchar(30) not null, donvi varchar(20), gia real) go create table phanphoi (mats char(5), map char(10), soluong int, ngaypp smalldatetime, ghichu nvarchar(100), constraint pk primary key(mats,map,ngaypp), constraint mats foreign key (mats)references dmtaisan(mats), constraint map foreign key(map)references dmphong(map)) select * from dmphong insert into dmphong values('02','truong ban') select * from dmtaisan insert into dmtaisan values('02','tu lanh','chiec','30000') select * from phanphoi insert into phanphoi values('02','01','1','12/14/2009','') insert into phanphoi values('01','02','1','12/15/2009','')
Ý 2 Tạo View để tổng hợp thông tin về các tài sản có đơn giá lớn nhất. create view vw_maxdg as select dmtaisan.* from dmtaisan where gia=(select max(gia) from dmtaisan) go select * from vw_maxdg
Ý 3 Tạo View để tổng hợp thông tin về những tài sản chưa từng được phân phối cho các phòng để sử dụng. 19
create view vw_chuasd as select dmtaisan.* from dmtaisan where mats not in(select mats from phanphoi) go select *from vw_chuasd
Ý 4 Tạo thủ tục có tham số là @TenP để đưa ra danh sách các tài sản được phân phối vào phòng trên create proc sp_phanphoi @tenp nvarchar(50) as select dmtaisan.* from dmtaisan where mats in(select mats from phanphoi where map in(select map from dmphong where tenp=@tenp)) go exec sp_phanphoi 'pho ban'
Ý 5 Tạo thủ tục có tham số là @TenTS để đưa ra danh sách các phòng được phân phối tài sản trên create proc sp_ppts @tents nvarchar(30) as select dmphong.* from dmphong where map in(select map from phanphoi where mats in(select mats from dmtaisan where tents=@tents)) go exec sp_ppts 'ti vi' Ý 6 Tạo TRIGGER để kiểm tra dữ liệu khi nhập vào bảng DMTaiSan
nếu đơn giá nhập vào nhỏ hơn 0 thì đưa ra màn hình thông báo lỗi và bản nghi này không được phép nhập vào bảng dữ liệu, ngược lại đưa ra thông báo bản ghi đã nhập thành công . create trigger trg_kt on dmtaisan for insert as if exists(select mats,tents from dmtaisan where gia<0) begin rollback tran print 'du lieu nhap ko thanh cong!' end 20
else print 'du lieu nhap thanh cong!' go insert into dmtaisan values('03','may dieu hoa','chiec','20000') bai 8 Ý 1 create database QLD use QLD go create table sinhvien (masv char(5)primary key, tensv nvarchar(50)not null, ngaysinh smalldatetime, gt varchar(5), quequan nvarchar(50)) go create table monhoc (maM char(5)primary key, tenM nvarchar(30)not null, dvht int) go create table diem (maM char(5), masv char(5), diemthi real, constraint pk primary key(maM,masv), constraint maM foreign key (maM) references monhoc(maM), constraint masv foreign key (masv)references sinhvien(masv))
select * from sinhvien insert into sinhvien values('sv01','tinh','8/14/1990','nu','bac ninh') select insert insert select insert
* from monhoc into monhoc values('m03','tin hoc','3') into monhoc values(‘mo2’,’co so du lieu’,’2’) * from diem into diem values('m03','sv01','4')
Ý 2 Tạo View để tổng hợp thông tin về các sinh viên có điểm thi cao nhất của môn học có tên là “Cơ sở dữ liệu”. create view vw_maxdiemthi as select sinhvien.* from sinhvien where masv in(Select masv from diem where diemthi=(select max(diemthi) from diem) and maM in(select maM from monhoc where tenM ='co so du lieu')) go select * from vw_maxdiemthi
Ý 3 Tạo thủ tục có tham số là @TenM để đưa ra danh sách sinh viên phải thi lại môn học trên. 21
create proc sp_thilai @tenM nvarchar(50) as select sinhvien.* from sinhvien where masv in(Select masv from diem where diemthi<5 and maM in (select maM from monhoc where tenM=@tenM)) go exec sp_thilai 'tin hoc'
Ý 4 Dùng kiểu dữ liệu CURSOR để đưa ra trung bình điểm thi của từng môn học declare tro_tbmon cursor scroll dynamic for select monhoc.maM,tenM,avg(diemthi)as tbdt from monhoc,diem where monhoc.maM=diem.maM group by monhoc.maM,tenM open tro_tbmon fetch first from tro_tbmon while @@fetch_status =0 fetch next from tro_tbmon close tro_tbmon deallocate tro_tbmon bai 9 Ý 1 create database QLGV use QLGV go create table giaovien (magv char(5)primary key, tengv nvarchar(50)not null, diachi nvarchar(30), dienthoai varchar(15)) go create table hocvi (mahv char(5)primary key, tenhv nvarchar(30)) go create table chuyennganh (maCN char(5)primary key, tenCN nvarchar(50)) go create table gv_hv_cn (magv char(5), mahv char(5), maCN char(5), nam int (nam dat hoc vi) constraint pk primary key(magv,mahv,maCN), constraint magv foreign key (magv)references giaOvien(magv), 22
constraint mahv foreign key (mahv)references hocvi(mahv), constraint maCN foreign key (maCN)references chuyennganh(maCN)) select * from giaovien insert into giaovien values('gv01','thanh ha','thai nguyen','0987977285') insert into giaovien values('gv02','thanh hang','bac ninh','01676789897') select * from hocvi insert into hocvi values('hv01','thac sy') insert into hocvi values('hv02','tien sy') select * from chuyennganh insert into chuyennganh values('cn01','cntt') insert into chuyennganh values('cn02','kinh te') select insert insert insert
* from gv_hv_cn into gv_hv_cn values('gv01','hv01','cn01','2009') into gv_hv_cn values('gv02','hv02','cn01','2009') into gv_hv_cn values('gv02','hv01','cn02','2008')
Ý 2 Tạo View để cho biết thông tin về các giáo viên có học vị là “Tiến sỹ” create view vw_hvts as select giaovien.* from giaovien where magv in(Select magv from gv_hv_cn where mahv in(select mahv from hocvi where tenhv='tien sy')) go select * from vw_hvts
Ý 3 Tạo View để cho biết thông tin về các giáo viên có chuyên ngành “Kinh tế” create view vw_cnkt as select giaovien.* from giaovien where magv in(select magv from gv_hv_cn where maCN in(select maCN from chuyennganh where tenCN='kinh te')) go select * from vw_cnkt
Ý 4 Tạo View để cho biết thông tin về các giáo viên có địa chỉ ở “Thái Nguyên” create view vw_dctn as select giaovien.* from giaovien where diachi='thai nguyen' go select * from vw_dctn
23
Ý 5 Tạo thủ tục có tham số vào là @Nam để đưa ra tên của các giáo viên nhận học vị “Tiến sỹ vào năm trên. create proc sp_namhv @nam int as select giaovien.* from giaovien where magv in(Select magv from gv_hv_cn where (nam=@nam) and (mahv in(Select mahv from hocvi where tenhv='tien sy'))) go exec sp_namhv '2009'
Ý 6 Tạo thủ tục nhập dữ liệu cho bảng GIAOVIEN create proc sp_nhapdl @magv char(5), @tengv nvarchar(50), @diachi nvarchar(30), @dienthoai varchar(15) as insert into giaovien(magv,tengv,diachi,dienthoai) values(@magv,@tengv,@diachi,@dienthoai) go
Ý 7 Tạo thủ tục có tham số vào là @TenHV để đưa ra thông tin về các giáo viên có tên học vị trên create proc sp_hvgv @tenhv nvarchar(30) as select giaovien.* from giaovien where magv in(select magv from gv_hv_cn where mahv in(select mahv from hocvi where tenhv =@tenhv)) go exec sp_hvgv 'tien sy'
Ý 8 Tạo TRIGGER để kiểm tra khi nhập dữ liệu vào bảng GV_HV_CN nếu năm nhập vào nhỏ hơn 0 thì in ra màn hình thông báo lỗi “Dữ liệu nhập vào không hợp lệ” và bản ghi này không được phép nhập vào bảng; Ngược lại in ra màn hình thông báo “Dữ liệu đã được nhập thành công”. create trigger trg_ktra on gv_hv_cn for insert as if exists(select magv,mahv,maCN from gv_hv_cn where nam<0) begin rollback tran print 'du lieu nhap vao ko hop le!' 24
end else print 'du lieu nhap thanh cong!' go insert into gv_hv_cn values('gv01','hv02','cn01','2009')
Ý 9 Dùng kiểu dữ liệu CURSOR để đưa ra thông tin về từng giáo viên của từng chuyên ngành. declare tro_gvcn cursor scroll dynamic for select giaovien.magv,tengv,chuyennganh.maCN from giaovien,chuyennganh,gv_hv_cn where giaovien.magv=gv_hv_cn.magv and gv_hv_cn.maCN=chuyennganh.maCN group by giaovien.magv,tengv,chuyennganh.maCN open tro_gvcn fetch first from tro_gvcn while @@fetch_status =0 fetch next from tro_gvcn close tro_gvcn deallocate tro_gvcn bai 10 Ý 1 create database qlcongdoan use qlcongdoan go create table tocongdoan (matcd char(5)primary key, tentcd nvarchar(100) not null) go create table congdoan (macdv char(5)primary key, tencdv nvarchar(50)not null, ngaysinh smalldatetime, ngayv smalldatetime, matcd char(5), constraint matcd foreign key (matcd)references tocongdoan(matcd)) go create table khenthuong (macdv char(5), mskt char(5)primary key, lydo nvarchar(50), nam int, constraint macdv foreign key (macdv)references congdoan(macdv)) select * from tocongdoan insert into tocongdoan values('t01','he thong thong tin' ) insert into tocongdoan values('t02','cong nghe thong tin' ) select insert insert insert
* from congdoan into congdoan values('d01','hang','9/15/1984','7/24/2008','t01') into congdoan values('d02','ha','8/15/1984','7/25/2009','t01') into congdoan values('d03','thao','8/15/1983','7/25/2009','t02')
select * from khenthuong insert into khenthuong values('d01','ms01','hoan thanh de tai cap bo' ,'2009') 25
insert into khenthuong values('d03','ms04','hoan thanh de tai cap truong','2007')
Ý 2 Hãy tạo view để tổng hợp thông tin về các công đoàn viên đã được khen thưởng của tổ công đoàn “Hệ thống thông tin”. create view vw_ktcd as select congdoan.* from congdoan where macdv in(select macdv from khenthuong where matcd in(select matcd from tocongdoan where tentcd='he thong thong tin' )) go select * from vw_ktcd
Ý 3 Hãy tạo view cho biết thông tin về các công đoàn viên chưa từng được khen thưởng. create view vw_chuakt as select congdoan.* from congdoan where macdv not in (select macdv from khenthuong) go select * from vw_chuakt
Ý 4 Hãy tạo view để thông tin về các công đoàn viên được khen thưởng về việc hoàn thành đề tài câp bộ. create view vw_dtcapbo as select congdoan.* from congdoan where macdv in(select macdv from khenthuong where lydo='hoan thanh de tai cap bo' ) go select * from vw_dtcapbo
Ý 5 Tạo thủ tục có tham số vào @TenTCD để đưa ra thông tin về những đoàn viên của chi đoàn trên. create proc sp_cdchidoan @tentcd nvarchar(100) as select congdoan.* from congdoan where macdv in(Select macdv from khenthuong where matcd in(Select matcd from tocongdoan where tentcd=@tentcd)) go exec sp_cdchidoan 'cong nghe thong tin'
26
Ý 6 Tạo thủ tục có tham số vào @TenTCD, @Nam để đưa ra thông tin về những công đoàn viên của tổ công đoàn đã được khen thưởng vào năm trên. create proc sp_namkt @tentcd nvarchar(100), @nam int as select congdoan.* from congdoan,tocongdoan where congdoan.matcd=tocongdoan.matcd and tocongdoan.tentcd=@tentcd and macdv in(select macdv from khenthuong where nam=@nam) go exec sp_namkt 'he thong thong tin' ,'2009'
Ý 7 Tạo thủ tục có tham số vào @Tencd để xoá thông tin về những công đoàn viên thuộc chi đoàn trên. create proc sp_thuoccd @tentcd nvarchar(100) as delete from congdoan where matcd in(select matcd from tocongdoan where tentcd=@tentcd) go exec sp_thuoccd 'cong nghe thong tin'
Ý 8 Tạo Trigger để kiểm tra việc nhập dữ liệu cho bảng KHENTHUONG. Nếu năm khen thưởng nhỏ hơn 0 thì in ra thông báo dữ liệu không hợp lệ và bản ghi không được phép nhập vào bảng. Ngược lại thì in ra thông báo dữ liệu nhập thành công. create trigger trg_ktra on khenthuong for insert as if exists(select macdv,mskt from khenthuong where nam<0) begin rollback tran print 'du lieu nhap vao ko hop le1' end else print 'nhap du lieu thanh cong!' go insert into khenthuong values ('d03','ms04','','-2009')
Ý 9 Sử dụng kiểu dữ liệu Cursor để tổng hợp thông tin về những công đoàn viên chưa được khen thưởng trong năm 2007. declare tro_thopchuakt cursor scroll dynamic for select congdoan.* from congdoan 27
where macdv not in(Select macdv from khenthuong where nam='2007') open tro_thopchuakt fetch first from tro_thopchuakt while @@fetch_status =0 fetch next from tro_thopchuakt close tro_thopchuakt deallocate tro_thopchuakt Bai 11 Ý 1 create database QLDIEM use QLDIEM go create table sinhvien (masv char(5)primary key, hotensv nvarchar(50)not null, ns smalldatetime, diachi nvarchar(50), dvht int) go create table mon (mamon char(5)primary key, tenmon nvarchar(50)not null) go create table diem (mamon char(5), masv char(5), phach char(5), diem real, constraint pk primary key(mamon,masv,phach), constraint mamon foreign key(mamon)references mon(mamon), constraint masv foreign key(masv)references sinhvien(masv)) select * from sinhvien insert into sinhvien values('sv04','hanh','9/7/1979','thai nguyen','4') insert into sinhvien values('sv03','han','8/7/1991','bac ninh','3') select * from mon insert into mon values('m01','csdl') insert into mon values('m02','hqtcsdl') select * from diem insert into diem values('m01','sv03','p03','9') insert into diem values('m02','sv04','p04','8')
Ý 2 Tạo View để tổng hợp thông tin về sinh viên có điểm thi cao nhất của môn “CSDL”. create view vwmaxcsdl as select mon.mamon,tenmon,max(diem) as diemmax from diem,mon,sinhvien where mon.mamon=diem.mamon group by mon.mamon,tenmon go select*from vwmaxcsdl 28
Ý 3 Tạo View để tổng hợp thông tin về sinh viên có địa chỉ ở “Thái Nguyên” create view vw_dctn as select sinhvien.* from sinhvien where diachi='thai nguyen' go select * from vw_dctn
Ý 4 Tạo View cho biết thông tin về các sinh viên sinh trước năm 1980 create view vw_truocnam as select sinhvien.* from sinhvien where year(ns)<'1980' go select * from vw_truocnam
Ý 5 Tạo thủ tục có tham số đầo vào @TenM để đưa ra danh sách các sinh viên có điểm thi chưa đạt của môn học trên. create view vw_thilai as select mon.mamon,tenmon,sinhvien.masv from mon,diem,sinhvien where mon.mamon=diem.mamon and sinhvien.masv=diem.masv and diem<5 group by mon.mamon,tenmon ,sinhvien.masv select * from vw_thilai create proc sp_danhsach @tenmon nvarchar(30) as select sinhvien.* from sinhvien,vw_nth1,diem where sinhvien.masv= vw_thilai.masv and vw_thilai.masv=diem.masv and diem.mamon= vw_thilai.mamon and tenmon=@tenmon go exec sp_danhsach 'sing vien'
Ý 6 Tạo thủ tục có tham số đầo vào @Diem để đưa ra danh sách các sinh viên có điểm thi thấp hơn điểm trên của môn học “CSDL”. create proc sp_thaphon @diem real as select sinhvien.* from sinhvien where masv in(select masv from diem where diem<@diem and mamon in(Select mamon from mon where tenmon='csdl')) 29
go exec sp_thaphon '8'
Ý 7 Tạo Trigger để kiểm tra việc nhập dữ liệu cho bảng DIEM. Nếu điêm nhỏ hơn 0 hoặc điểm lớn hơn 10 thì in ra thông báo dữ liệu không hợp lệ và bản ghi không được phép nhập vào bảng. Ngược lại thì in ra thông báo dữ liệu nhập thành công. create trigger trg_ktra on diem for insert as if exists(select mamon,masv,phach from diem where diem<0) begin rollback tran print 'du lieu nhap vao ko thanh cong!' end else print 'du lieu nhap thanh cong!' go insert into diem values('m02','sv04','p01','-9')
Ý 8 Dùng kiểu dữ liệu CURSOR để đưa ra màn hình danh sách các sinh viên có điểm thi cao nhất của các môn học? declare tro_maxdt cursor scroll dynamic for select sinhvien.* from sinhvien,diem,vwmaxcsdl where sinhvien.masv=diem.masv and diem.mamon=vwmaxcsdl.mamon and diem=diemmax open tro_maxdt fetch first from tro_maxdt while @@fetch_status =0 fetch next from tro_maxdt close tro_maxdt deallocate tro_maxdt bai 12 Ý 1 create database QLKS use QLKS go create table khachhang (mak char(5)primary key, tenk nvarchar(50)not null, diachi nvarchar(50), sdt varchar(15)) go create table phong (map char(5)primary key, tenp nvarchar(50)not null, loaip nvarchar(30), gia float) go 30
create table datphong (mak char(5), map char(5), ngaynhan smalldatetime, ngaytra smalldatetime, constraint pk primary key(mak,map,ngaynhan), constraint mak foreign key(mak)references khachhang(mak), constraint map foreign key (map)references phong(map)) select insert insert insert
* from khachhang into khachhang values('k01','hang','thai nguyen','0989676767') into khachhang values('k02','ha','bac ninh','0989678868') into khachhang values('k03','hanh','bac giang','0989678989')
select insert insert insert
* from phong into phong values('p01','phong a','hang nhat','3000') into phong values('p02','phong b','hang nhat','3000') into phong values('p03','phong c','hang nhi','2000')
select insert insert insert
* from datphong into datphong values ('k01','p01','12/4/2009') into datphong values ('k02','p02','8/12/2009','12/16/2010') into datphong values ('k03','p03','8/4/2009','12/16/2010')
Ý 2 Tạo thủ tục để tăng giá của tất cả các phòng trong khách sạn lên 5%. create proc sp_tanggia as update phong set gia=gia+(gia*5/100) go exec sp_tanggia select * from phong
Ý 3 Tạo View để tổng hợp thông tin về các khách hàng hiện tại đang thuê phòng tại khách sạn create view vw_dangthue as select khachhang.* from khachhang where mak in(select mak from datphong where ngaytra is null) go select * from vw_dangthue
Ý 4 Tạo View để tổng hợp thông tin hoá đơn thanh toán của khách hàng create view vw_thophd as selectkhachhang.mak,tenk,phong.map,gia,datphong.ngaynhan, ngaytra,convert(int,ngaytra-ngaynhan)*gia as thanhtien from khachhang,phong,datphong where khachhang.mak=datphong.mak and datphong.map=phong.map go select * from vw_thophd
Ý 5 Tạo View để tổng hợp thông tin về các khách hàng có số ngày đặt phòng lớn nhất 31
create view vwdp as select datphong.mak,map,(convert(int,ngaytra-ngaynhan))as songayo from datphong go select * from vwdp create view vw_dp1 as select khachhang.mak,tenk,sum(songayo)as songay from khachhang,vw_dp1 where khachhang.mak=vw_dp1.mak group by khachhang.mak,tenk go select * from vw_dp1 create view vwmaxdp as select khachhang.*,songay from khachhang,vw_dp1 where khachhang.mak=vw_dp1.mak and songay=(select max(songay) from vw_dp1) go select * from vwmaxdp
Ý 6 Tạo thủ tục để đưa ra danh các phòng hiện tại chưa có khách hàng đặt phòng create proc sp_khchuadat as select phong.* from phong where map not in(select map from datphong) go exec sp_khchuadat
Ý 7 Tạo thủ tục để đưa ra danh sách khách hàng ngày hôm nay phải trả phòng create proc sp_traphong as select khachhang.* from khachhang where mak in(select mak from datphong where ngaynhan
Ý 8 Tạo trigger để kiểm tra dữ liệu khi cập nhật vào bảng Phòng phải đảm bảo dữ liệu đơn giá >0. create trigger trg_ktra on phong for insert 32
as if exists(select map,tenp from phong where gia<0) begin rollback tran print 'du lieu nhap vao ko thanh cong!' end else print 'du lieu nhap vao thanh cong!' go insert into phong values ('p04','phong d','hang nhat','-3000')
Ý 9 Tạo trigger để kiểm tra dữ liệu khi nhập vào bảng DatPhong phải đảm ngày trả phòng luôn lớn hơn hoặc bằng ngày nhận phòng . create trigger trg_ktradatphong on datphong for insert as if exists(select mak,map from datphong where ngaytra<=ngaynhan) begin rollback tran print 'du lieu nhap vao ko thanh cong!' end else print 'du lieu nhap thanh cong!' go insert into datphong values('k02','p02','12/16/2009','12/8/2009')
Ý 10 Dùng kiểu dữ liệu CURSOR để đưa ra danh sách khách hàng ngày hôm nay phải trả phòng declare tro_traphong cursor scroll dynamic for select khachhang.* from khachhang where mak in(select mak from datphong where ngaytra=getdate()) open tro_traphong fetch first from tro_traphong while @@fetch_status =0 fetch next from tro_traphong close tro_traphong deallocate tro_traphong bai 13 Ý 1 create database QLTRUNGTAM use QLTRUNGTAM go create table phong (map char(5)primary key, tenp nvarchar(30) not null, diachiphong nvarchar(30), dienthoai varchar(15))
33
create table nhanvien (manv char(5)primary key, tennv nvarchar(50)not null, diachi nvarchar(30), map char(5), luong real, constraint map foreign key (map)references phong(map)) create table ngoaingu (maNN char(5)primary key, tenNN nvarchar(30)) create table trinhdoNN (manv char(5), maNN char(5), trinhdo nvarchar(30), constraint pk primary key(manv,maNN), constraint manv foreign key (manv)references nhanvien(manv), constraint maNN foreign key (maNN)references ngoaingu(maNN)) select * from phong insert into phong values('p01','truong ban','tang 3','083798787') insert into phong values('p02','pho ban','tang 2','083798787') select insert insert insert
* from nhanvien into nhanvien values ('nv01','hang','thai nguyen','p01','25000') into nhanvien values ('nv02','hien','bac ninh','p01','15000') into nhanvien values ('nv03','hoang','thai nguyen','p02','25000')
select * from ngoaingu insert into ngoaingu values ('nn01','tieng anh') insert into ngoaingu values ('nn02','tieng phap') select * from trinhdoNN insert into trinhdiNN values ('nv01','nn01','trinh do c') insert into trinhdiNN values ('nv02','nn02','trinh do b')
Ý 2 Tạo View để tổng hợp thông tin về mỗi phòng hiện tại có bao nhiêu nhân viên create view vwnvmoiphong as select phong.map,tenp,count(nhanvien.manv)as soluongnv from phong,nhanvien where phong.map=nhanvien.map group by phong.map,tenp go select * from vwnvmoiphong
Ý 3 Tạo View để tổng hợp thông tin về các nhân viên chưa tích luỹ được trình độ ngoại ngữ nào create view vwchuatluy as select nhanvien.* from nhanvien where manv not in(Select manv from trinhdoNN) go select * from vwchuatluy 34
Ý 4 Tạo View để tổng hợp thông tin về các nhân viên có lương cao nhất trong phòng họ làm việc create view vwluongcao as select nhanvien.* from nhanvien where luong =(select max(luong) from nhanvien) group by nhanvien.manv,tennv,map,diachi,luong go select * from vwluongcao
Ý 5 Tạo thủ tục có tham số vào @TenNN và @TrinhDo để đưa ra danh các nhân viên biết ngoại ngữ và trình độ trên. create proc sptrinhdo @tenNN nvarchar(30), @trinhdo nvarchar(30) as select nhanvien.* from nhanvien where manv in(select manv from trinhdoNN where trinhdo=@trinhdo and maNN in(Select maNN from ngoaingu where tenNN=@tenNN)) go exec sptrinhdo 'tieng anh','trinh do c'
Ý 6 Tạo thủ tục có tham số vào @TenP để đưa ra tổng số nhân viên hiện có trong phòng này create proc sptongnv @tenp nvarchar(30) as select phong.map,tenp,count(nhanvien.manv)as tongsonv from phong,nhanvien where nhanvien.map=phong.map and tenp=@tenp group by phong.map,tenp go exec sptongnv 'truong ban'
Ý 7 Tạo thủ tục có tham số vào là @TenNN, @TenP và @TrinhDo để đưa ra danh các nhân viên ở phòng này biết ngoại ngữ và trình độ ứng với các tham biến đã cho create proc spthongtin @tenNN nvarchar(30), @tenp nvarchar(30), @trinhdo nvarchar(30) as select nhanvien.* from nhanvien,phong,trinhdoNN,ngoaingu where nhanvien.map=phong.map and phong.tenp=@tenp and nhanvien.manv=trinhdoNN.manv and trinhdoNN.trinhdo=@trinhdo and trinhdoNN.maNN=ngoaingu.maNN 35
and ngoaingu.tenNN=@tenNN go exec spthongtin 'tieng anh','truong ban','trinh do c'
Ý 8 Tạo thủ tục có tham số vào @TenP để đưa ra danh các nhân viên có lương cao nhất của phòng này create proc spluongmax @tenp nvarchar(30) as select nhanvien.* from nhanvien where luong=(select max(luong) from nhanvien) and map in(Select map from phong where tenp=@tenp) go exec spluongmax 'pho ban'
Ý 9 Tạo Trigger để kiểm tra khi nhập dữ liệu vào bảng NhanVien phải đảm bảo lương của nhân viên phải >0 create trigger trg_ktra on nhanvien for insert as if exists(select manv,tennv,diachi,map from nhanvien where luong>0) begin rollback tran print 'du lieu nhap vao ko thanh cong!' end else print 'du lieu nhap thanh cong!' go insert into nhanvien values ('nv04','nga','thanh hoa','p02','-50000')
Ý 10 Dùng kiểu dữ liệu CURSOR để tăng lương cho mỗi nhân viên lên 10%. declare tro_tangluong cursor scroll dynamic for select manv,luong from nhanvien declare @manv char(5),@luong real open p1 fetch first from p1 into @manv,@luong while @@fetch_status =0 begin set @luong=(select (luong+(luong*10/100)) from nhanvien where manv=@manv) update nhanvien set luong=@luong where manv=@manv fetch next from p1 into @manv,@luong end close tro_tangluong 36
deallocate tro_tangluong
Ý 11 Dùng kiểu dữ liệu CURSOR để đưa ra danh sách các nhân viên có ngoại ngữ tiếng anh trình độ C declare tro_trinhdoc cursor scroll dynamic for select nhanvien.* from nhanvien where manv in(select manv from trinhdoNN where trinhdo='trinh do c' and maNN in(Select maNN from ngoaingu where tenNN='tieng anh')) open tro_trinhdoc fetch first from tro_trinhdoc while @@fetch_status =0 fetch next from tro_trinhdoc close tro_trinhdoc deallocate tro_trinhdoc
bai 14
Ý1 create database CSDL use CSDL go create table phong (map char(5)primary key, tenp nvarchar(30)not null, diachip nvarchar(30), sdt varchar(15)) go create table nhanvien (manv char(5)primary key, tennv nvarchar(30) not null, diachi nvarchar(30), map char(5), luong real, constraint map foreign key (map)references phong(map)) go create table hocvi (mahv char(5)primary key, tenhv nvarchar(30)not null) go create table nv_tdhv (manv char(5), mahv char(5), tgian smalldatetime, constraint manv_mahv_pk primary key(manv,mahv), constraint manv foreign key(manv)references nhanvien(manv), constraint mahv foreign key (mahv)references hocvi(mahv)) select * from phong 37
insert into phong values('p01','truong ban','tang 3','043787878') insert into phong values('p02','pho ban','tang 2','043788989') select * from nhanvien insert into nhanvien values('nv01','hang','bac giang','p01','4000') insert into nhanvien values('nv02','ha','bac ninh','p02','3000') insert into nhanvien values('nv03','hien','bac ninh','p02','2000') select * from hocvi insert into hocvi values ('hv01','tien sy') insert into hocvi values ('hv02','thac sy') select insert insert insert
* from nv_tdhv into nv_tdhv values('nv01','hv01','12/7/1988') into nv_tdhv values('nv02','hv01','12/7/1991') into nv_tdhv values('nv03','hv02','12/7/1991')
Ý 2 Tạo View để tổng hợp thông tin về các nhân viên có học vị là tiến sĩ trước năm 1990. create view vwhvnv as select nhanvien.* from nhanvien where manv in(select manv from nv_tdhv where year(tgian)<1990 and mahv in(select mahv from hocvi where tenhv='tien sy')) go select * from vwhvnv
Ý 3 Tạo View để tổng hợp thông tin về các nhân viên chưa có học vị Tiến sĩ create view vwchuahv as select nhanvien.* from nhanvien where manv in(select manv from nv_tdhv where mahv not in(select mahv from hocvi where tenhv='tien sy')) go select * from vwchuahv
Ý 4 Tạo thủ tục có tham số vào là @TenHV và @ThoiGian để đưa ra danh các nhân viên có học vị và thời gian đạt được ứng với các tham biến đã cho. create proc spthoigianhv @tenhv nvarchar(30), @tgian smalldatetime as select nhanvien.* from nhanvien where manv in(select manv from nv_tdhv where tgian=@tgian 38
and mahv in(select mahv from hocvi where tenhv =@tenhv)) go exec spthoigianhv 'tien sy','12/7/1988'
Ý 5 giống ý 4 Ý 6 Tạo trigger để kiểm tra dữ liệu khi nhập vào bảng NV_TDHV sao cho thời gian đạt học vị đó phải <= thời gian hiện tại. create trigger trg_ktra on nv_tdhv for insert as if exists(select manv,mahv from nv_tdhv where tgian<=getdate()) begin rollback tran print 'du lieu nhap vao ko hop le!' end else print 'du lieu nhap thanh cong!' go insert into nv_tdhv values('nv01','hv02','12/26/2009')
Ý 7 Dùng kiểu dữ liệu CURSOR để đưa ra danh sách các nhân viên có học vị Tiến sĩ. declare tro_hvtiensy cursor scroll dynamic for select nhanvien.* from nhanvien where manv in(Select manv from nv_tdhv where mahv in(select mahv from hocvi where tenhv='tien sy')) open tro_hvtiensy fetch first from tro_hvtiensy while @@fetch_status =0 fetch next from tro_hvtiensy close tro_hvtiensy deallocate tro_hvtiensy bai 15 Ý 1 create database QLDIEM use QLDIEM go create table lop (malop char(5)primary key, tenlop nvarchar(30)not null)
create table sinhvien (masv char(5)primary key, tensv nvarchar(30)not null, 39
ns smalldatetime, malop char(5), constraint malop foreign key(malop)references lop(malop)) create table diemrl (masv char(5), hocki int, nam char(10), diem real, constraint pk primary key(masv,hocki), constraint masv foreign key(masv)references sinhvien(masv)) select * from lop insert into lop values('lop01','cao dang k4a') insert into lop values('lop02','dai hoc k6d') select * from sinhvien insert into sinhvien values('sv01','hang','9/15/1988','lop01') insert into sinhvien values('sv02','ha','10/2/1989','lop02') select * from diemrl insert into diemrl values('sv01','1','2006-2007','8') insert into diemrl values('sv02','1','2007-2008','7')
Ý 2 Hãy tạo view để tổng hợp thông tin về điểm rèn luyện của những sinh viên học lớp “Cao đẳng K4A” create view vwdiemrenluyen as select diemrl.* from diemrl where masv in(select masv from sinhvien where malop in(select malop from lop where tenlop='cao dang k4a')) go select * from vwdiemrenluyen
Ý 3 Hãy tạo view để in ra thông tin về sinh viên có điểm rèn luyện cao nhất create view vwmaxrenluyen as select sinhvien.* from sinhvien where masv in(Select masv from diemrl where diem=(Select max(diem) from diemrl)) go select * from vwmaxrenluyen
Ý 4 Tạo view để tổng hợp thông tin về những sinh viên có điểm rèn luyện<50 trong năm học 20062007 create view vwthongtin as select sinhvien.* 40
from sinhvien where masv in(Select masv from diemrl where diem<50 and nam='2006-2007') go select * from vwthongtin
Ý 5 Tạo thủ tục có tham số vào @Masv để đưa ra thông tin về điểm rèn luyện của sinh viên trên create proc spthongtinsv @masv char(5) as select diemrl.* from diemrl where masv=@masv go exec spthongtinsv 'sv01'
Ý 6 Tạo thủ tục có tham số vào @Malop, @Nam để đưa ra thông tin về điểm rèn luyện của lớp trên vào năm học trên. create proc spthongtinlop @malop char(5), @nam varchar(10) as select diemrl.* from diemrl,sinhvien,lop where diemrl.masv=sinhvien.masv and sinhvien.malop=lop.malop and diemrl.nam=@nam and lop.malop=@malop go exec spthongtinlop 'lop01','2006-2007'
Ý 7 Tạo thủ tục có tham số vào @tenlop để đưa ra thông tin về điểm rèn luyện của lớp trên create proc spdiem @tenlop nvarchar(30) as select diemrl.* from diemrl where masv in(Select masv from sinhvien where malop in(Select malop from lop where tenlop=@tenlop)) go exec spdiem 'dai hoc k6d'
Ý 8 Tạo Trigger kiểm tra việc nhập dữ liệu cho bảng DIEMRL nếu điểm nhập vào <0 hoặc >100 thì đưa ra yêu cầu nhập lại và bản ghi này không được phép nhập vào bảng, ngược lại thì in ra thông báo nhập thành công. create trigger trg_ktra on diemrl for insert as 41