You are on page 1of 13

--Bài tập 1:

--1. Tạo View danh sách sinh viên, gồm các thông tin sau: Mã sinh viên, Họ sinh viên,

Tên sinh viên, Học bổng.

CREATE VIEW [danh sách sinh viên] as

SELECT MaSV, HoSV, TenSV,HocBong FROM DSSinhVien

select * from [danh sách sinh viên]

--2. Tạo view Liệt kê các sinh viên có học bổng từ 150,000 trở lên và sinh ở Hà Nội, gồm

các thông tin: Họ tên sinh viên, Mã khoa, Nơi sinh, Học bổng.

CREATE VIEW [sinh viên có học bổng > 150k và ở hà nội] as

SELECT MaSV, HoSV, TenSV,HocBong, NoiSinh FROM DSSinhVien

where NoiSinh=N'Hà Nội' and HocBong>150000

select * from [sinh viên có học bổng > 150k và ở hà nội]


--3 . Tạo view liệt kê những sinh viên nam của khoa Anh văn và khoa tin học, gồm các
thông

tin: Mã sinh viên, Họ tên sinh viên, tên khoa, Phái.

CREATE VIEW [sinh viên nam của khoa Anh văn và khoa tin học] as

select MaSV, HoSV, TenSV,TenKhoa ,Phai from DSSinhVien , DMKhoa

where DSSinhVien.MaKhoa=DMKhoa.MaKhoa

and (TenKhoa=N'Anh văn' or TenKhoa= N'Tin Học')

and Phai=N'Nam'

select * from [sinh viên nam của khoa Anh văn và khoa tin học]

--4. Tạo view gồm những sinh viên có tuổi từ 20 đến 25, thông tin gồm: Họ tên sinh viên,

Tuổi, Tên khoa

CREATE VIEW [sinh viên có tuổi từ 20 đến 25] asSELECT HoSV,


TenSV,TenKhoa,(YEAR(GETDATE()) - YEAR(NgaySinh)) as Tuoi FROM DSSinhVien, DMKhoa
where YEAR(GETDATE()) - YEAR(NgaySinh) >20 and YEAR(GETDATE()) - YEAR(NgaySinh) <25

and DSSinhVien.MaKhoa=DMKhoa.MaKhoa

select * from [sinh viên có tuổi từ 20 đến 25]

--5.Tạo view cho biết thông tin về mức học bổng của các sinh viên, gồm: Mã sinh viên,

Phái, Mã khoa, Mức học bổng. Trong đó, mức học bổng sẽ hiển thị là “Học bổng cao”

nếu giá trị của field học bổng lớn hơn 500,000 và ngược lại hiển thị là “Mức trung bình”

--6. Tạo view đưa ra thông tin những sinh viên có học bổng lớn hơn bất kỳ học bổng của

sinh viên học khóa anh văn

CREATE VIEW [học bổng hơn anh văn] as

select HoSV, TenSV,TenKhoa,phai,NgaySinh,HocBong from DSSinhVien, DMKhoa

where DSSinhVien.MaKhoa=DMKhoa.MaKhoa

and HocBong>(select max(HocBong) from DSSinhVien, DMKhoa

where DSSinhVien.MaKhoa=DMKhoa.MaKhoa

and TenKhoa =N'Anh văn')

select * from [học bổng hơn anh văn]


--7. Tạo view đưa ra thông tin những sinh viên đạt điểm cao nhất trong từng môn.

CREATE VIEW [sinh viên đạt điểm cao nhất từng môn] as

select TenSV,diemsv.MaMH,Phai,NoiSinh,Diem from

(select DMMonHoc.MaMH, max(Diem) as maxDiemMonHoc from DSSinhVien, KetQua,DMMonHoc

where DSSinhVien.MaSV=KetQua.MaSV and DMMonHoc.MaMH=KetQua.MaMH

group by DMMonHoc.MaMH) as max,

(select DSSinhVien.MaSV,TenSV,Phai,NgaySinh,NoiSinh, Diem,DMMonHoc.MaMH from


DSSinhVien, KetQua,DMMonHoc

where DSSinhVien.MaSV=KetQua.MaSV and DMMonHoc.MaMH=KetQua.MaMH) as diemsv

where diemsv.MaMH=max.MaMH and Diem=maxDiemMonHoc

select * from [sinh viên đạt điểm cao nhất từng môn]

order by MaMH

--8. Tạo view đưa ra những sinh viên chưa thi môn cơ sở dữ liệu
CREATE VIEW [sinh viên chưa thi csdl] as

select TenSV,LanThi from DSSinhVien, KetQua

where DSSinhVien.MaSV=KetQua.MaSV

and MaMH='01'

and LanThi=0

select * from [sinh viên chưa thi csdl]

--9. Tạo view đưa ra thông tin những sinh viên không trượt môn nào.

CREATE VIEW [thông tin sinh viên không trượt môn] as

select DSSinhVien.TenSV, NoiSinh, Phai, NgaySinh, HocBong from DSSinhVien,

(select TenSV, DSSinhVien.MaSV ,count(LanThi) as TongMonthi from DSSinhVien, KetQua

where DSSinhVien.MaSV=KetQua.MaSV

and LanThi=1

group by TenSV,DSSinhVien.MaSV) danhsach

where danhsach.TenSV=DSSinhVien.TenSV

select * from [thông tin sinh viên không trượt môn]


--10. Tạo view danh sách sinh viên không bi rớt môn nào

CREATE VIEW [danh sách sinh viên không trượt môn] as

(select TenSV, DSSinhVien.MaSV ,count(LanThi) as TongMonthi from DSSinhVien, KetQua

where DSSinhVien.MaSV=KetQua.MaSV

and LanThi=1

group by TenSV,DSSinhVien.MaSV)

select * from [danh sách sinh viên không trượt môn]


/* Bài 2*/

use BT1_TKCSDL

go

/*1. Tạo view DSHS10A1 gồm thông tin Mã học sinh, họ tên, giới tính (là “Nữ” nếu Nu=1,

ngược lại là “Nam”), các điểm Toán, Lý, Hóa, Văn của các học sinh lớp 10A1

*/

CREATE VIEW [DSHS10A1] as

select diem.MAHS, TEN, (case when NU=0 then N'Nữ' else N'Nam' end) as N'Giới
tính',TOAN,LY, HOA, VAN

from DSHS, DIEM,LOP

where DSHS.MAHS=diem.MAHS

and lop.MALOP=DSHS.MALOP

and lop.MALOP=N'10A1'

select * from [DSHS10A1]


/*2. Tạo login TranThanhPhong, tạo user TranThanhPhong cho TranThanhPhong trên CSDL

QLHocSinh

Phân quyền Select trên view DSHS10A1 cho TranThanhPhong

Đăng nhập TranThanhPhong để kiểm tra

Tạo login PhamVanNam, tạo PhamVanNam cho PhamVanNam trên CSDL QLHocSinh

Đăng nhập PhamVanNam để kiểm tra

Tạo view DSHS10A2 tương tự như câu 1

Phân quyền Select trên view DSHS10A2 cho PhamVanNam

Đăng nhập PhamVanNam để kiểm tra*/

exec sp_addlogin TranThanhPhong, 123

exec sp_adduser TranThanhPhong, TranThanhPhongUser

grant select on DSHS10A1 to TranThanhPhongUser /*cho phép quyền đọc */

exec sp_addlogin PhamVanNam, 123


exec sp_adduser PhamVanNam, PhamVanNamUser

CREATE VIEW [DSHS10A2] as

select diem.MAHS, TEN, (case when NU=0 then N'Nữ' else N'Nam' end) as N'Giới
tính',TOAN,LY, HOA, VAN

from DSHS, DIEM,LOP

where DSHS.MAHS=diem.MAHS

and lop.MALOP=DSHS.MALOP

and lop.MALOP=N'10A2'

select * from [DSHS10A2]


grant select on [DSHS10A2] to PhamVanNamUser

/* Bài tập 3: Cho CSDL về quản lý bán hàng trong file QLSinhVien.sql

1. Tạo login Login1, tạo User1 cho Login1

2. Phân quyền Select trên bảng DSSinhVien cho User1

3. Đăng nhập để kiểm tra

4. Tạo login Login2, tạo User2 cho Login2

5. Phân quyền Update trên bảng DSSinhVien cho User2, người này có thể cho phép người

khác sử dụng quyền này


6. Đăng nhập dưới Login2 và trao quyền Update trên bảng DSSinhVien cho User 1

7. Đăng nhập Login 1 để kiểm tra*/

use BT2

exec sp_addlogin Login1, 123

exec sp_adduser Login1, User1

grant select on DSSinhVien to User1


exec sp_addlogin Login2, 123

exec sp_adduser Login2, User2

grant update on DSSinhVien to User2 with grant option


grant update on DSSinhVien to User1

You might also like