CÁC BÀI TẬP, TÀI LIỆU THAM KHẢO THI MÔN CƠ SỞ DỮ LIỆU: SỬ DUNG CƠ SỞ DỮ LIỆU THIẾT KẾ BẢNG TRONG CSDL VÀ RÀNG BUỘC TOÀN VẸN, TRUY VẤN NÂNG CAO, STORED PROCEDURE, TRIGGER, QUẢN LÍ USER VÀ SECURITY, .....
Trang 1CHƯƠNG 1: THIẾT KẾ BẢNG TRONG CSDL VÀ RÀNG BUỘC TOÀN VẸN
MaMon nvarchar(10) not null,
MaSV nvarchar(10) not null,
DiemThi float
)
1.1 Tao ràng buộc khóa trên cột MaSV của bảng tblSinhVien
alter table tblSinhVien add constraint p_SV primary key(MaSV)
1.2 tạo ràng buộc khóa trên cột khoa của bảng tblKhoa
alter table tblKhoa add constraint p_Khoa primary key(MaKhoa)
1.3 Tạo ràng buộc khóa trên cột MaSV va MaMon của bảng tblDiemThi
alter table tblDiemThi add constraint p_DiemThi primary key(MaSV,MaMon)
1.4 Tạo ra chỉ mục trên cột HoTen của bảng tblSinhVien(co p_SV nen k the tao
duoc chi muc clustered)
create nonclustered index SV_HoTen on tblSinhVien(HoTen)
Trang 21.5 Thêm cột KhoaHoc(khóa học ) của bảng tblSinhVien
alter table tblSinhVien add KhoaHoc nvarchar(10)
1.6 Tạo ràng buộc not null trên cột tên khoa
alter table tblKhoa alter column TenKhoa varchar(20) not null
1.7 Tạo ràng buộc not null trên cột DiemThi
alter table tblDiemThi alter column DiemThi float not null
1.8 Tạo ràng buộc để cột điểm thi chỉ có thể nhận các giá trị từ 0-10
alter table tblDiemThi add constraint c_DiemThi check(DiemThi>0 and DiemThi<10)
1.9 Tạo ràng buộc trên cột NamSinh để chỉ có thể nhạn giá trị từ '1/1/1999'
đến'30/12/2005'
alter table tblSinhVien add constraint c_NamSinh check (NamSinh between '1/1/1999' and '12/30/2005')
1.10 Thêm cột ghichu vào bảng tblKhoa
alter table tblKhoa add GhiChu nvarchar(100)
1.11 Tạo quan hệ 1-n từ bảng tblKhoa sang bảng tblSinhVien
alter table tblSinhVien add constraint f_SV_Khoa foreign key(MaKhoa) references tblKhoa(MaKhoa)
1.12 Tạo quan hệ 1-n từ bảng tblSinhVien sang bảng tblDiemThi
alter table tblDiemThi add constraint f_SV_DiemThi foreign key(MaSV ) references tblSinhVien(MaSV )
1.13 Tạo quan hệ 1-nt ừ bảng tblMonHoc sang bảng tbDiemThi
alter table tblDiemThi add constraint f_MH_DiemThi foreign key(MaMon) references tblMonHoc(MaMon)
1.14 Chèn 1 số bản ghi vào các bảng
insert into tblKhoa values ('101','CNTT',' ')
insert into tblKhoa values ('102','Điện Tử',' ')
insert into tblKhoa values ('103','May',' ')
insert into tblKhoa values ('104','Môi Trường',' ')
insert into tblKhoa values ('105','Kế toán',' ')
insert into tblKhoa values ('3','Công nghệ thông tin',' ')
Trang 3insert into tblSinhVien values ('SV1','bcxfv','HY','2/2/1999','101','2009-2013')
insert into tblSinhVien values ('SV2','fb xd','HY','3/3/2000','101','2009-2013')
insert into tblSinhVien values ('SV3','bcgfbxfv','HY','5/2/1999','101','2009-2013')
insert into tblSinhVien values ('SV4','fbgxd','HY','3/7/2000','101','2009-2013')
insert into tblSinhVien values ('SV5','fbgvhgxd','HY','8/7/2000','104','2009-2013')
insert into tblSinhVien values ('SV6','Nguyễn Văn 2013')
Bình','HY','2/2/2003','101','2009-insert into tblMonHoc values ('M1','Toán cao cấp 1')
insert into tblMonHoc values ('M2','Toán cao cấp 2')
insert into tblMonHoc values ('M3','Toán cao cấp 3')
insert into tblMonHoc values ('M4','Hóa học đại cương')
insert into tblMonHoc values ('M5','Tin học đại cương')
insert into tblMonHoc values ('5','JaVa')
insert into tblDiemThi values ('M1','SV1','4')
insert into tblDiemThi values ('M2','SV4','5')
insert into tblDiemThi values ('M3','SV3','6')
insert into tblDiemThi values ('M2','SV2','7')
insert into tblDiemThi values ('M4','SV3','9')
insert into tblDiemThi values ('5','SV6','9')
insert into tblDiemThi values ('5','SV3','4')
1.15 Cho biết các sinh viên thi lai môn java biết môn 'java' có mã môn la 5
select * from tblSinhVien where MaSV in(select MaSV from tblDiemThi where
MaMon='5' and DiemThi<5)
1.16
a Cho biết điểm môn 'java' của sinh viên tên la 'nguyễn văn bình'
select DiemThi from tblDiemThi where MaSV in(select MaSV from tblSinhVien where HoTen='Nguyễn Văn Bình')
b Số lượng các sinh viên bị trượt môn java
select count(MaSV ) from tblDiemThi where MaMon= '5' and DiemThi<5
1.17 Cho biết số lượng SV của khoa CNTT biet makhoa la 3
select count(MaSV ) from tblSinhVien where MaKhoa='3'
1.18 Hủy bỏ điểm thi của sinh viên có mã la 1
delete from tblDiemThi where MaSV ='SV1'
Trang 41.19 sửa lại điểm thi của SV co mã là 2 thành 8
update tblDiemThi
set DiemThi=8 where MaSV ='SV2'
1.20 Xóa ràng buộc chỉ mục trên cột hoten
drop index SV_HoTen on tblSinhVien
1.21 Xóa ràng buộc từ bảng tblKhoa sang bảng tblSinhVien
alter table tblSinhVien drop constraint f_SV_Khoa
CHƯƠNG 2: TRUY VẤN NÂNG CAO
)
Trang 52.1 Cho biết các ds sinh viên có địa chỉ là một trong các tỉnh sau: HY, BG,
NB,TH,NA,HG
select * from tblSinhVien
where DiaChi in('HY','BG','NB','TH','NA','HG')
2.2 Cho biết ds SV trong top 10 SV có điểm tin cao nhất
select top 10 tblSinhVien.MaSV , HoTen,DiaChi, Diem from tblSinhVien,tblDiemThiwhere tblSinhVien.MaSV =tblDiemThi.MaSV and tblSinhVien.MaSV in(select MaSV from tblDiemThi where MaMon in
(select MaMon from tblMonHoc where TenMon ='Tin'))
order by (Diem)
2.4 Cho biết ds các sinh viên bị trượt môn tin học
select * from tblSinhVien where MaSV in
(select MaSV from tblDiemThi where Diem<4 and MaMon in(select MaMon from tblMonhoc where TenMon='Tin'))
2.5 Cho biết ds các SV bị trượt ít nhất 1 môn
select * from tblSinhVien where MaSV in(
select MaSV from tblDiemThi where Diem<=4
group by (MaSV)
having count(Diem)>=1
)
2.6 cho biết ds các SV bị trượt tất cả các môn
select * from tblSinhVien where MaSV in(
select MaSV from tblDiemThi where Diem<=4
group by (MaSV )
having count(Diem)=count(MaSV )
)
2.7 cho biết ds các SV dã thi tất cả các môn
select * from tblSinhVien where MaSV not in(select MaSV from tblDiemThi)
Trang 62.8 cho biết ds cac sv chua thi tất cả các môn
select * from tblSinhVien where MaSV in(
select MaSV from tblDiemThi group by (MaSV) having count (MaMon)< (select
count(maMon) from tblMonHoc))
II: Cơ sở dữ liệu BanHang
2.9 Liệt kê NH_NCC có địa chỉ ở Hà Nội
select *from DM_NhaCungCap
where DiaChi='Hà Nội'
2.10 Liệt kê hóa đơn bán hàng trong thang 4/2008
select *from DM_HoaDon
where month(NgayLapHoaDon)='4' and year(NgayLapHoaDon)='2009'
2.11 Liệt kê hóa đơn nhập hàng do nhân viên 'Nguyễn Thị A' phụ trách lập trong
T4/2008
select * from DM_HoaDon
where year(NgayLapHoaDon)='2009' and month(NgayLapHoaDon)='4'
and MaNV in(select MaNV from DM_NhanVien where TenNhanVien='Nguyễn Thị A')
2.12 Lập báo cáo tổng hợp mặt hàng xuất từ đầu năm đến nay: MaHang| SoLuong
select MaHang,SoLuong from DM_ChiTietHoaDon
where MaHD in(select maHD from DM_HoaDon where NgayLapHoaDon between '1/1/2011' and getdate())
2.13 Liệt kê 10 mặt hàng bán chạy nhất trong T4/2008(số lượng khách hàng giao dịch
nhiều nhất)
select top 10 MaHang,sum(SoLuong) as SoLuong from DM_ChiTietHoaDon
where MaHD in(select MaHD from DM_HoaDon where year(NgayLapHoaDon)='4' andmonth(NgayLapHoaDon)='2008')
group by MaHang
order by sum(SoLuong) desc
Trang 72.14 Thống kê doanh thu ban hàng của nhân viên trong T4/2008
DoanhThu=SL*DG-SL*DG*ChietKhau
select MaNV,sum(SoLuong*DonGia-SoLuong*DonGia*ChietKhau) as DoanhThufrom DM_ChiTietHoaDon,DM_HoaDon
where DM_ChiTietHoaDon.MaHD=DM_HoaDon.MaHD and
month(NgayLapHoaDon)='4'and year(NgayLapHoaDon)='2008'
group by MaNV
2.15 Báo cáo tổng hợp nhập, xuất, tồn tinh từ 01/04/2008 đến 30/04/2008
MaHang| Tồn đầu kỳ| Tổng Nhập| Tổng xuất| Tồn cuối kì
2.16 Liệt kê các mặt hàng không có người mua trong T4/2008
select *from DM_HangHoa
where MaHang not in (select MaHang from DM_HoaDon where
year(NgayLapHoaDon)='2008' and month(NgayLapHoaDon)='4')
2.17 Báo cáo tổng hợp kết quả kinh doanh trong tháng 4/2008 TongHangNhap|
TongHangXuat
2.18 Liệt kê mặt hàng bán chạy nhất
select * from DM_HangHoa
where MaHang in(
select MaHang from DM_CHiTietHoaDon group by MaHang having sum(Soluong)> all(select sum(soluong) from DM_CHiTietHoaDon))
III CSDL Quản Lí Nhân Sự
2.19 Tìm những CB nhập ngũ từ năm 1960-1965 quê ở hà tây
select *from HSCB where( year(NgayNhapNgu) between 1960 and 1965) and
MaQue in(select MaDonVi from DMDonvi where TenDonVi='Hà Tây')
2.20 liệt kê ds CB đến tuổi chờ nghỉ hưu(Nam>=55, nữ >=50)
select * from HSCB where (year(NgaySinh )>=55 and GioiTinh='True')
or(year(NgaySinh )>=50 and GioiTinh='False')
Trang 82.21 Thống kê sỹ số của từng đơn vị tính đến thời điểm hiên tại
select MaCB from QTCongTac
where ToiNgay<=getdate()
compute count(MaCB)
2.22 liệt kê quá trình công tác của CB 'Nguyễn Văn A' sắp xếp theo thời gian tăng dần
select MaDonVi, MaChucVu,TuNgay,ToiNgay from QTCongTac
where MaCB in(select MaCB from HSCB where HoDem='Nguyễn Văn ' and Ten='A')group by MaDonVi, MaChucVu,TuNgay,ToiNgay
order by TuNgay-ToiNgay
2.23 Liệt kê CB dã hoăc đang đảm nhiêm chức vụ pho phòng
select * from HSCB where MaCB in(
select MaCB from QTCongTac where MaChucVu in(
select MaChucVu from DMChucVu where TenChucVu='Phó Phòng'
))
2.24 Liệt kê các CB đã đảm nhiệm chức vụ 'Trưởng Phòng'
select *from HSCB where MaCB in(
select MaCB from QTCOngTac where MaChucVu in(
select MaChucVu from DMChucVu where TenChucVu='Trưởng Phòng'
) )
2.25 Liệt kê CB có số lần luân chuyển nhiều nhất
select * from HSCB
where MaCB in (
select MaCB from QTCongTac group by MaCB
having count(MaChucVu)>all(
select count(MaChucVu) from QTCongTac group by MaCB))
2.26 Liệt kê trong khoảng thời gian từ năm 2005 đến nay, tại phòng dào tạo có bao
nhiêu CB dược chuyển đến và chuyển đi
select count(MaCB) from QTCongTac where (year(TuNgay)>=2005 or
year(ToiNgay)>=2005) and MaDonVi in(
select MaDonVi from DMDonVi where TenDonVi='Phòng Đào Tạo'
)
Trang 92.27 Hiển thị thông tin về đơn vị, CB tương ứng của đơn vị đó và thống kê số lượng
NV thuộc mỗi đơn vị
select from HSCB,QTCongTac
select TenDT, SinhVien.HoTen, GiaoVien.HoTen
from SinhVien, GiaoVien,DeTai
where
3.1 Ứng với mỗi mỗi giáo viên cho biết tên của các đề tài hướng dẫn
create view view1
as
select HoTen, TenDT
from GiaoVien,DeTai, GiaoVien_DeTai
where GiaoVien.MaGV=GiaoVien_DeTai.MaGV and
DeTai.MaDT=GiaoVien_DeTai.MaDT
3.2 Cho biết các sinh vên có kết quả bảo vệ đề tài loại khá
create view view2
as
select * from SinhVien
where MaSV in(select MaSV from KetQua where Diem>=7)
Trang 103.3 Cho biết tên GV hướng dẫn các đề tài có kết quả bảo vệ loại khá
create view view3
as
select *from GiaoVien where MaGV in(
select MaGV from GiaoVien_DeTai where MaDT in(
select MaDT from KetQua where Diem>=7 ))
3.4 Ứng với mỗi GV cho biết số lượng các đề tài hướng dẫn
create view view4
as
select HoTen,count(MaDT) as SoLuongDT
from GiaoVien, GiaoVien_DeTai
where GiaoVien.MaGV=GiaoVien_DeTai.MaGV
group by GiaoVien.MaGV, HoTen
3.5 Ứng với mỗi SV cho biết số lượng các đề tài ma SV do tham gia
create view view5
as
select HoTen,count(maDT) as SoLuongDT
from SinhVien, SinhVien_DeTai
where SinhVien.MaSV =SinhVien_DeTai.MaSV
group by HoTen
3.6 Ứng với mỗi SV cho biết tên các đề tài mà SV đó tham gia
create view view6
as
select HoTen,TenDT from SinhVien,DeTai, SinhVien_DeTai
where SinhVien.MaSV =SinhVien_DeTai.MaSV and
DeTai.maDT=SinhVien_DeTai.MaDT
3.7 Cho biết tên các GV không tham gia hướng dẫn đề tài nào
create view view7
as
select MaGV,HoTen from GiaoVien where MaGV not in
(select MaGV from GiaoVien_DeTai)
Trang 113.8 cho biết tên của các đề tài không có SV tham gia
create view view8
select *from DeTai
where MaDT in(select MaDT from SinhVien_DeTai group by MaDT
having count(MaSV )> all (select count(MaSV ) from SinhVien_DeTai))
3.10 cho biết ds giáo viên và số lượng SV mà GV đó hướng dẫn
create view view10
as
select GiaoVien.HoTen,count(MaSV ) as SoLuong
from GiaoVien,GiaoVien_DeTai, KetQua
where GiaoVien.MaGV=GiaoVien_DeTai.MaGV and
GiaoVien_DeTai.MaDT=KetQua.MaDT
group by GiaoVien.HoTen
CHƯƠNG 4: CHỈ MỤC
4.1 Tạo khóa chính trên cột maSV
alter table tblSinhVien_ChiMuc add constraint p_SV_CM primary key(MaSV )4.2 Tạo chỉ mục nonclustered trên cột HoTen
create nonclustered index i_HoTen on tblSinhVien_ChiMuc( HoTen)
4.3 tạo chỉ mục nonclustered tren cột Que
create nonclustered index i_Que on tblSinhVien_ChiMuc(Que)
Trang 124.4 Tạo chỉ mục nonclustered phức hợp trên cột HoTen và Quê
create nonclustered index i_HoTen_Que on tblSinhVien_ChiMuc(HoTen,Que)
4.5 tạo chỉ mục duy nhất (unique) trên cột SoCMT
create unique index i_SoCMT on tblSinhVien_ChiMuc(SoCMT)
4.6.xem lại tất cả các chỉ mục trên bang tblSinhVien_ChiMuc
exec sp_helpindex tblSinhVien_ChiMuc
4.7 Tìm tất cả các SV có tên 'Nguyễn Văn A' bằng cách sử dụng chỉ mục dược tạo tring câu 2
select * from tblSinhVien_ChiMuc with (index=i_HoTen)
where HoTen='Nguyễn Văn A'
4.8 Tìm tất cả các SV có que ở Hưng Yên bằng cách sử dụng chỉ mục được tạo trong câu3
select *from tblSinhVien_ChiMuc with (index=i_Que)
where Que='Hưng Yên'
4.9 tìm tất cả các SV có tên bắt đàu bằng 'Nguyễn Văn' và có quê ở 'Hưng Yên'
select * from tblSinhVien_ChiMuc with (index=i_HoTen_Que)
where HoTen like 'Nguyễn Văn%' and Que='Hưng Yên'
4.10 xóa các chỉ mục dược tạo trong câu 2-4
drop index i_HoTen on tblSinhVien_ChiMuc
drop index i_Que on tblSinhVien_ChiMuc
drop index i_HoTen_Que on tblSinhVien_ChiMuc
4.11 Xóa ràng buộc khóa chính tại bảng tblSinhVien_ChiMuc
alter table tblSinhVien_ChiMuc drop constraint p_SV_CM
4.12 Tạo lại khóa chính trên bảng tblSinhVien_ChiMuc, trong quá trình tạo khóa chính
sử dụng tùy chọn NunClustered để SQL server, không tạo chỉ mục clustered trên chỉ mục khóa chính (vì mặc định khi tạo khóa chính SQL tự đọng tạo chỉ mục Clustered trên cột khóa )//////////////////////
Trang 13create clustered index id_SV_CM on tblSinhVien_ChiMuc
with drop_existing
4.13 tạo chỉ mục clustered và unique trên cột SoCMT với hệ số điền đầy bằng 60
create unique clustered index id_SoCMT on tblSinhVien_ChiMuc(SoCMT)
with FillFactor=60
4.14 Tạo chỉ mục fulltext trên cột Que và ứng dụng tìm kiếm fulltext trên cột này (sử dụng từ khóa contains và freetext)???????
exec sp_help tblSinhVien
exec sp_fulltext_database 'enable'
create fulltext catalog catalog_Que
create fulltext index on tblSinhVien(Que)
key index MaSV on catalog_Que
seletc * from tblSinhVien where contains (Que,'Hưng','Hải')
create table tblTacGia
Trang 14constraint p_SachMuon primary key(SoThe,MaCaBiet ),
constraint f_MaCaBiet foreign key (MaCaBiet ) references ChiTietSach(MaCaBiet ),NgayMuon datetime
Ta thường xuyên tìm kiếm độc giả theo: số thẻ, họ tên
create nonclustered index id_TacGia on tblTacGia (TenTG)
create nonclustered index id_Sach on tblSach(TuaSach ,TuKhoa, NXB)
create nonclustered index id_DocGia on tblDocGia(SoThe, HoTen)
4.16 Tạo các ràng buộc khóa ngoại trên các bảng sau:
alter table tblSachTG add constraint f_Sach_TG1 foreign key(maTG) references
tblTacGia(MaTG)
alter table tblSachTG add constraint f_SachTG_Sach foreign key(MaSach ) references tblSach(MaSach )
Trang 15alter table ChiTietSach add constraint f_CTS_Sach foreign key(MaSach) references tblSach(MaSach )
alter table tblSachMuon add constraint f_SachMuon_DG foreign key (SoThe) references tblDocGia(SoThe)
4.17 tạo các ràng buộc sau
- trong bảng tblSach trường SoTrang>0
alter table tblSach add constraint check_SoTrang check(SoTrang>0)
- trong bảng tblSach trường NamXB phải nhỏ hơn năm hiện tại
alter table tblSach add constraint check_NamXB check(NamXB <year(getdate()))
- trong bảng tblSachMuon trường NgayPhaiTra>=NgayMuon
alter table tblSachMuon add constraint check_Ngay check(NgayPhaiTra>=NgayMuon)
- trong bảng tblSachMuon trường NgayTra>=NgayMuon
alter table tblSachMuon add constraint check_Muon_Tra check(NgayTra>=NgayMuon)
CHƯƠNG 5: STORED PROCEDURE
I Thủ tục lưu trữ với các tham số đầu vào
5.1 Viết thủ tục lưu trữ có tham số đầu vào là xâu kí tự, thủ tục này sẽ trả về đề tài có
mã tương ứng, tham số của thủ tục là: Tên đề tài, tên sinh viên tham gia, tên giáo viên hướng dẫn
1 Tạo hàm:
create proc Pro_5_1
@TenDeTai nvarchar(100) output,