You are on page 1of 45

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC THỦY LỢI


KHOA CÔNG NGHỆ THÔNG TIN

BÀI TẬP LỚN


MÔN HỆ ĐIỀU HÀNH CƠ SỞ DỮ LIỆU

Đề tài

XÂY DỰNG PHẦN MỀM QUẢN LÝ SINH VIÊN

Giáo viên hướng dẫn: Sinh viên thực hiện: LÊ HỒNG ÁNH
Nguyễn Ngọc Quỳnh Châu VŨ THỊ MƠ
HOÀNG NGỌC LAN

Lớp 61pm2

NHẬN XÉT CỦA GIẢNG VIÊN


------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
MỤC LỤC
LỜI NÓI ĐẦU 1
LỜI CẢM ƠN 2
I:MÔ TẢ BÀI TOÁN 3
II.XÁC ĐỊNH QUY TẮC /RÀNG BUỘC, XÂY DỰNG MÔ HÌNH HỰC
THỂ LIÊN KẾT ER 3
III.CHUYỂN TỪ MÔ HÌNH THỰC THỂ LIÊN KẾT SANG MÔ HÌNH
QUAN HỆ 4
1. Mỗi khoa có một mã khoa để quản lý ,một tên khoa và ghi nhận năm
thành lập khoa 4
2.Mỗi niên khóa có một mã đề quản lý ,năm bắt đầu và năm kết thuc niên
khóa 4
3. Mỗi lớp có nhiều sinh viên có một mã để quản lý,Họ Tên,Ngày Sinh,Giới
Tính,Quê Quán,Dân Tộc,Email,Số Điện Thoại 5
4. Mỗi môn học được giảng dạy trong một khoa nào đó trong học kì của một
năm nào đó .Mối môn cần một mã để quản lý,tên môn ,số tín chỉ.Mỗi kết
quả thi nhận điểm của 1 sinh viên làm bài cho 1 môn học nào đó 5
5.Một lớp có một mã lớp để quản lý,Thuộc về một khoa nào và mở ra cho
một khóa học nhất định.Với mỗi lớp chúng ta lưu thông tin : mã Lớp, tên
lớp 6
VI:TẠO DATABASE,TẠO BẢNG,THIẾT LẬP CÁC THUỘC TÍNH
CHO BẢNG THÊM DỮ LIỆU,TRUY VẤN DỮ LIỆU VÀ PHÂN
QUYỀN 11
A:TẠO DATABASE ,TẠO BẢNG VÀ THIẾT LẬP CÁC THUỘC TÍNH
CHO BẢNG 11
B:THÊM DỮ LIỆU CHO BẢNG 14
C:THỰC HIỆN CÁC CÂU LỆNH TRUY VẤN VÀ PHÂN QUYỀN 20
LỜI NÓI ĐẦU

Ngày nay, tin học đã có những bước tiến nhanh chóng về ứng dụng của nó
trong mọi lĩnh vực của cuộc sống trên phạm vi toàn thế giới nói chung và Việt
Nam nói riêng.Tin học được người ta quan tâm và nhắc đến nhiều hơn bao giờ
hết vì nó là một phần không thể thiếu trong cuộc sống văn minh,góp phần đẩy
mạnh công cuộc công nghiệp hoá hiện đại hoá đất nước, tiến đến nền kinh tế tri
thức. Máy vi tính cùng với những phần mềm là công cụ đắc lực giúp ta quản lý,
tổ chức, sắp xếp và xử lý công việc một cách nhanh chóng và chính xác.

Ở Việt Nam hiện nay, máy tính điện tử đặc biệt là máy vi tính trong nhiều
năm qua đã được sử dụng rất rộng rãi. Sự phát triển của tin học, các công nghệ
phần mềm, phần cứng, các tải liệu tham khảo đã đưa chúng ta từng bước tiếp
cận với công nghệ thông tin trong mọi lĩnh vực nhằm đáp ứng nhu cầu của con
người.

Quản lý sinh viên là một đề tài không còn mới mẻ với các bài toán quản lý.
Việc đưa tin học vào ứng dụng để quản lý là rất hữu ích, vì chúng ta phải bỏ ra
rất ít thời gian mà lại thu được hiệu quả cao, rất chính xác và tiện lợi nhanh
chóng.

Việc đưa tin học vào ứng dụng để quản lý là rất hữu ích, vì chúng ta phải bỏ
ra rất ít thời gian mà lại thu được hiệu quả cao, rất chính xác và tiện lợi nhanh
chóng.Trong phạm vi bài kiểm tra nhóm chúng em đã được đề cập đến vấn đề
“Quản lýsinh viên” .

Với khoảng thời gian không nhiều, vừa phân tích thiết kế, nghiên cứu tìm
hiểu khai thác ngôn ngữ mới, vừa thực hiện chương trình quả là khó khăn đối
với chúng em. Bởi “Quản lý sinh viên” là một đề tài có nội dung rộng, mặt khác
khả năng am hiểu về hệ thống của nhóm em vẫn còn nhiều hạn chế và thiếu
sót .Vậy nên e kình mong được cô góp ý , bổ sung để nhóm em hoàn thiện cho
bài tập tốt hơn .

1
LỜI CẢM ƠN

Thời giạn một học kỳ trôi qua chỉ trong nháy mắt, em học hỏi được nhiều
kiến thức chuyên ngành mới, được tiếp xúc với nhiều loại kiến thức trong thực
tế, cũng hiểu được các nguyên tắc trong quá trình làm việc học tập và nghiên
cứu. Em xin cảm ơn cô Nguyễn Ngọc Quỳnh Châu đã đào tạo và giảng dạy cẩn
trọng em trong thời gian vừa qua, thái độ làm việc nghiêm túc, tinh thần học tập
và sự chuyên nghiệp, đạo đức nhà giáo cao cả không mệt mỏi của cô đã có tác
động tích cực đến em và mang lại lợi ích cho em trong cuộc sống này. Trong
quá trình học tập tại trường, cô không chỉ hướng dẫn tận tình trong quá trình
nghiên cứu mà còn giúp em cải thiện đáng kể khả năng nghiên cứu và các kỹ
năng khác, đồng thời cũng là người quan tâm và chăm sóc bổ sung các kiến
thức còn thiếu cho em, điều này làm cho em ngày càng hoàn thiện hơn. Trong
mỗi giai đoạn khó khăn cô đều hướng dẫn rất tận tình và nhiệt tình giúp đỡ em
để em mở rộng tầm nhìn và nâng cao khả năng chuyên ngành hơn. Tình cảm
cao quý trong học tập của cô là hình mẫu mà em tôn trọng trong suốt cuộc đời,
thời gian vừa qua cô cũng là người đã dạy cho em rất nhiều kiến thức và kỹ
thuật mới, điều này không chỉ cho em đặt ra những mục tiêu cao hơn mà còn
giúp em hiểu được những nguyên tắc sống, đồng thời vẫn giữ tinh thần sống,
em tin rằng nó sẽ giúp em rất nhiều cho công việc sau này của em. Từ khâu
chọn đề tài đến khi hoàn thành từng bước dưới sự hướng dẫn tận tâm tận tình và
rất nhiều công sức của cô, phong thái cao quý của cô, nghiêm khắc, kỷ luật và
khoan dung với người khác đã truyền nhiễm sâu sắc cho em, khiến em hiểu
được rất nhiều điều trên đời. Em xin bày tỏ lòng kính trọng và biết ơn cao nhất
đến cô!

2
I:MÔ TẢ BÀI TOÁN
=> Xây dựng chương trình “Quản lý sinh viên” nhằn hỗ trợ cho việc quản lý
khoa,lớp,niên khóa,thông tin ,điểm từng môn học của sinh viên:
-Quản lý được khoa . Mỗi khoa có một mã khoa để quản lý ,một tên khoa và ghi
nhận năm thành lập khoa
-Quản lý lớp. Một lớp có một mã lớp để quản lý,Thuộc về một khoa nào và mở
ra cho một niên khóa nhất định.
-Quản lý niên khóa. Mỗi niên khóa có một mã đề quản lý ,năm bắt đầu và năm
kết thuc niên khóa
-Quản lý Môn Học .Mỗi môn học được giảng dạy trong một khoa nào đó trong
học kì của một năm nào đó
-Quản lý thông tin của sinh viên. Mỗi sinh viên có một mã để quản lý,Họ
Tên,Ngày Sinh,Giới Tính,Quê Quán,Dân Tộc,Email,Số Điện Thoại
-Quản lý Điểm thi của sinh viên từng môn học .Mỗi kết quả thi nhận điểm của 1
sinh viên làm bài cho 1 môn học nào đó theo điểm hệ 10

II.XÁC ĐỊNH QUY TẮC /RÀNG BUỘC, XÂY DỰNG MÔ HÌNH


HỰC THỂ LIÊN KẾT ER
- Bao gồm các mô tả và ràng buộc sau:
1. Mỗi khoa có một mã khoa để quản lý ,một tên khoa và ghi nhận năm thành
lập khoa
2. Mỗi niên khóa có một mã đề quản lý ,năm bắt đầu và năm kết thuc niên khóa
3. Mỗi lớp có nhiều sinh viên có một mã để quản lý,Họ Tên,Ngày Sinh,Giới
Tính,Quê Quán,Dân Tộc,Email,Số Điện Thoại
4.Mỗi môn học được giảng dạy trong một khoa nào đó trong học kì của một
năm nào đó .Mối môn cần một mã để quản lý,tên môn ,số tín chỉ.Mỗi kết quả
thi nhận điểm của 1 sinh viên làm bài cho 1 môn học nào đó theo điểm hệ 10.

3
5.Một lớp có một mã lớp để quản lý,Thuộc về một khoa nào và mở ra cho một
khóa học nhất định.Với mỗi lớp chúng ta lưu thông tin : mã Lớp, tên lớp
TruongHoc(MaKhoa, TenKhoa, NamThanhLap, MaNK,NamBD,NamKT,
MaSV,HoTen,NgaySinh,GioiTinh,QueQuan,DanToc,Email,SDT,
MaMH,TenMH,SoTinChi, MaLop,TenLop)
Các loại thực thể và thuộc tính của chúng:
- Khoa (MaKhoa, TenKhoa, NamThanhLap)
- NienKhoa (MaNK,NamBD,NamKT)
- SinhVien
(MaSV,HoTen,NgaySinh,GioiTinh,QueQuan,DanToc,Email,SDT)
- MonHoc (MaMH,TenMH,SoTinChi)
- Lop(MaLop,TenLop)

III.CHUYỂN TỪ MÔ HÌNH THỰC THỂ LIÊN KẾT SANG MÔ


HÌNH QUAN HỆ
1. Mỗi khoa có một mã khoa để quản lý ,một tên khoa và ghi nhận năm thành
lập khoa

⇨ Thực thể :Khoa (MaKhoa, TenKhoa, NamThanhLap)

TenKhoa

MaKhoa
NamTha
nhLap

Khoa

2.Mỗi niên khóa có một mã đề quản lý ,năm bắt đầu và năm kết thuc niên khóa
⇨ Thực thể :NienKhoa (MaNK,NamBD,NamKT)
4
NamBD
MaNK MaNK NamKT
MaNK MaNK

NienKhoa

3. Mỗi lớp có nhiều sinh viên có một mã để quản lý,Họ Tên,Ngày Sinh,Giới
Tính,Quê Quán,Dân Tộc,Email,Số Điện Thoại

⇨ Thực thể : SinhVien


(MaSV,HoTen,NgaySinh,GioiTinh,QueQuan,DanToc,Email,SDT)

GioiTinh QueQuan
DanToc
NgaySinh
Email
HoTen
SDT
MaSV

SinhVien

4. Mỗi môn học được giảng dạy trong một khoa nào đó trong học kì của một
năm nào đó .Mối môn cần một mã để quản lý,tên môn ,số tín chỉ.Mỗi kết quả
thi nhận điểm của 1 sinh viên làm bài cho 1 môn học nào đó
Thực Thể :MonHoc (MaMH,TenMH,SoTinChi)

TenMH
MaMH SoTinChi

MonHoc
DiemThi

MonHoc m KetQua SinhVien


n

NamHoc
HocKi

m n
Khoa GiangKhoa MonHoc

5.Một lớp có một mã lớp để quản lý,Thuộc về một khoa nào và mở ra cho một
khóa học nhất định.Với mỗi lớp chúng ta lưu thông tin : mã Lớp, tên lớp
⇨ Thực Thể :Lop(MaLop,TenLop)

MaLop TenLop

6
Lop

Lop
Khoa BaoGom
1 n

Co
n SinhVien
Lop
1

Lop n Thuoc 1 NienKhoa

7
Bước 1: Các thực thể (trừ thực thể yếu) -> các bảng/quan hệ
Quan hệ Khoa:(MaKhoa,TenKhoa,NamThanhLap)

MaKhoa TenKhoa NamThanhLap


Quan hệ NienKhoa: MaNK,NamBD, NamKT)
MaNK NamBD NamKT

8
Quan hệ SinhVien:
(MaSV,HoTen,NgaySinh,GioiTinh,QueQuan,DanToc,Email,SDT)

MaSV HoTe NgaySinh GioiTinh QueQuan DanTo Email SDT


n c

Quan hệ MonHoc:(MaMH,TenMH,SoTinChi)
MaMH TenMH SoTinChi

Quan hệ Lop : (MaLop,TenLop)


MaLop maKhoaHoc

Bước 2: Thực thể yếu à bảng (Khóa của chủ sẽ thành khóa ngoại)
Không có thực thể yếu
Bước 3: Liên kết 1-1: khoá của 1 bên sang làm khoá ngoại ở bên kia.
Không Có liên kết 1-1
Bước 4: Liên kết 1-N -> Khóa của bảng bên 1 trở thành khóa ngoại của bên
nhiều

Quan hệ
SinhVien(MaSV,MaLop,HoTen,NgaySinh,GioiTinh,QueQuan,DanToc,Email,
SDT)

MaSV MaLop HoTen NgaySinh GioiTinh QueQuan DanTo Emai SDT


c l

Quan hệ Lop (MaLop,MaKhoa,MaNK,TenLop)


MaLop MaKhoa MaNK TenLop

Bước 5: Liên kết M-N ->Thêm 1 bảng/quan hệ mới R, chuyển khóa chính
của 2 quan hệ phía M và N thành khóa ngoại của quan hệ R. Khóa chính
của R là sự kết hợp của 2 khóa ngoại
9
Quan Hệ KetQua(MaSV, MaMH, DiemThi)
Quan hệ GiangKhoa(MaKhoa, MaMH, NamHoc,HocKi)
Bước 6: Thuộc tính đa trị -> Thành 1 bảng/ quan hệ mới
-Không có thuộc tính đa trị
Bước 7: Liên kết bậc >2 -> Thêm 1 bảng/ quan hệ mới
-Không có liên kết bậc >2
Bước 8: Xử lý quan hệ cha con, chuyên biệt và tổng quát hóa
Không có

Khoa
MaKhoa TenKhoa NamThanhLap

NienKhoa
MaNK NamBD NamKT

SinhVien
MaSV MaLop HoTe NgaySinh danToc GioiTin QueQua DanToc Emai SDT
n h n l

MonHoc
MaMH TenMH SoTinChi

Lop
MaLop MaKhoa MaNK maKhoaHoc

KetQua
MaSV MaMH DiemThi

10
GiangKhoa
MaKhoa MaMH NamHoc HocKy

VI:TẠO DATABASE,TẠO BẢNG,THIẾT LẬP CÁC THUỘC TÍNH


CHO BẢNG THÊM DỮ LIỆU,TRUY VẤN DỮ LIỆU VÀ PHÂN
QUYỀN

A:TẠO DATABASE ,TẠO BẢNG VÀ THIẾT LẬP CÁC THUỘC TÍNH


CHO BẢNG

create database QLSVBTL1


on primary
(
Name = QuanlySinhVien1_Data,
Filename='D:\HQTCSDL\Anh\QuanlySinhVien1_Data.mdf',
size = 10MB,
MaxSize = 50MB,
filegrowth = 2MB
)
Log on

11
(Name = QLSV1_Log,
filename='D:\HQTCSDL\Anh\QLSV1_log.ldf',
size = 5MB,
Maxsize = 20MB,
filegrowth = 1MB
);
-- tạo bảng khoa

Create Table Khoa


( MaKhoa varchar(30) PRIMARY KEY ,
TenKhoa nvarchar(50),
NamThanhLap int)
-- tạo bảng NienKhoa
Create Table NienKhoa
(MaNK varchar(50)PRIMARY KEY ,
NamBD int,
NamKT int )

-- tạo bảng Lop


Create Table Lop
(MaLop varchar(30) PRIMARY KEY,
MaKhoa varchar(30),
MaNK varchar(50),
TenLop nvarchar(50))

-- tạo bảng sinhvien


Create Table SinhVien
(MaSV varchar (25)PRIMARY KEY ,

12
MaLop varchar(30),
HoTen nvarchar(100),
NgaySinh date,
GioiTinh nvarchar(10),
QueQuan nvarchar(50),
DanToc nvarchar(30),
Email nvarchar(20),
SDT float )

-- tạo bảng MonHoc


Create Table MonHoc
(MaMH varchar(20) PRIMARY KEY ,
TenMH nvarchar (50),
SoTinChi int
)

--tạo bảng KetQua

Create Table KetQua


(MaSV varchar(25) ,
MaMH varchar(20) ,
DiemThi float,
PRIMARY KEY(MaSV,MaMH)
)

--tạo bảng GiangKhoa


13
Create Table GiangKhoa
(MaKhoa varchar(30),
MaMH varchar(20) ,
NamHoc int,
HocKy int,
PRIMARY KEY(MaKhoa,MaMH)
)

--Tạo thuộc tính unique cho cột email trong bảng SinhVien
Alter Table SinhVien
ADD Unique (Email);
--Thiết lập ràng buộc CHECK cho trường GioiTinh sao cho GioiTinh chỉ có thể
nhận giá trị
--‘Nam’ hoặc ‘Nữ’:
ALTER TABLE SinhVien
ADD CONSTRAINT KTGioiTinh CHECK (GioiTinh=N'Nam' or
GioiTinh=N'Nữ');
--Thiết lập khóa phụ cho Makhoa tham chiếu đến Makhoa của bảng Khoa
ALTER TABLE Lop
ADD CONSTRAINT fk_Makhoa1
FOREIGN KEY (MaKhoa)
REFERENCES Khoa(MaKhoa);
--Thiết lập khóa phụ cho MaNK tham chiếu đến MaNKcủa bảng NienKhoa
ALTER TABLE Lop
ADD CONSTRAINT fk_MaNK
FOREIGN KEY (MaNK)
REFERENCES NienKhoa(MaNK);

14
--Thiết lập khóa phụ cho MaLop tham chiếu đến MaLopcủa bảng Lop
ALTER TABLE SinhVien
ADD CONSTRAINT fk_MaLop
FOREIGN KEY (MaLop)
REFERENCES Lop(MaLop);
--Thiết lập khóa phụ cho MaSV tham chiếu đến MaSV của bảng SinhVien
ALTER TABLE KetQua
ADD CONSTRAINT fk_MaSV
FOREIGN KEY (MaSV)
REFERENCES SinhVien(MaSV);
--Thiết lập khóa phụ cho MaMH tham chiếu đến MaMH của bảng MonHoc
ALTER TABLE KetQua
ADD CONSTRAINT fk_MaMH1
FOREIGN KEY (MaMH)
REFERENCES MonHoc(MaMH);
--Thiết lập khóa phụ cho MaKhoa tham chiếu đến MaKhoa của bảng Khoa
ALTER TABLE GiangKhoa
ADD CONSTRAINT fk_MaKhoa2
FOREIGN KEY (MaKhoa)
REFERENCES Khoa(MaKhoa);

--Thiết lập khóa phụ cho MaMH tham chiếu đến MaMH của bảng MonHoc
ALTER TABLE GiangKhoa
ADD CONSTRAINT fk_MaMH2
FOREIGN KEY (MaMH)
REFERENCES MonHoc(MaMH);

15
B:THÊM DỮ LIỆU CHO BẢNG

Insert into Khoa values


('MK01',N'Công nghệ thông tin',1970),
('MK02',N'Khoa Kinh tế và quản trị',1971),
('MK03',N'Khoa Công trình',1972),
('MK04',N'Khoa Kỹ thuật tài nguyên nước',1973),
('MK05',N'Khoa Cơ khí',1974),
('MK06',N'Khoa Điện - Điện tử',1975),
('MK07',N'Khoa Hóa và Môi trường',1975),
('MK08',N'Khoa Ngoại Ngữ',1972),
('MK09',N'Khoa Luật',1970),
('MK10',N'Thương mại điện tử',1976)

Select *from Khoa

Insert into NienKhoa values

('NK01',1980,1984),
('NK02',1984,1988),
('NK04',1988,1992),
('NK05',1996,2000)

Select *from NienKhoa

Insert into Lop values ('L001','MK01','NK01','80CNTT1'),

16
('L002','MK01','NK01','80CNTT2'),
('L003','MK02','NK02','84KTQT1'),
('L004','MK02','NK02','84KTQT2'),
('L005','MK02','NK02','84KTQT3'),
('L006','MK03','NK04','88CTQT1'),
('L007','MK03','NK04','88CTQT2'),
('L008','MK03','NK04','88CTQT3'),
('L009','MK04','NK05','96KTN1'),
('L0010','MK04','NK05','96KTN2'),
('L0011','MK04','NK05','96KTN3'),
('L0012','MK05','NK01','80CK1'),
('L0013','MK05','NK01','80CK2'),
('L0014','MK06','NK02','84KĐ1'),
('L0015','MK06','NK02','84KĐ2'),
('L0016','MK07','NK04','88HMT1'),
('L0017','MK07','NK04','88HMT2'),
('L0018','MK08','NK05','96NN1'),
('L0019','MK08','NK05','96NN2'),
('L0020','MK09','NK05','96KL1'),
('L0021','MK09','NK05','96KL2'),
('L0022','MK10','NK05','96TMĐT1'),
('L0023','MK10','NK05','96TMĐT2'),
('L0024','MK10','NK02','96TMĐT3')

select * from Lop

Insert into SinhVien values

17
('SV01','L001',N'Hoàng Ngọc Lan','11/07/2001',N'nữ',N'Đắk
Lắk',N'Kinh','lanhoaiquy@gmail.com',0399612138),
('SV02','L001',N'Nguyễn Văn An','10/05/2000',N'nam',N'Hà Nội',N'Ê
Đê','Anguyen@gmail.com',0999612138),
('SV03','L001',N'Nguyễn Văn Bích','11/02/2001',N'nam',N'Hải
Phòng',N'kinh','Bvan@gmail.com',0989612138),
('SV04','L002',N'Hoàng Văn Châu','09/01/2001',N'nam',N'Nam
Định',N'Kinh','Choang@gmail.com',0979612138),
('SV05','L002',N'Nguyễn Thị Bảo','11/02/2001',N'nữ',N'Hải
Phòng',N'kinh','Bthia@gmail.com',0588612138),
('SV06','L003',N'Lê Văn Diệu','09/01/2001',N'nam',N'Nam
Định',N'Kinh','hoangb@gmail.com',0979612138),
('SV07','L003',N'Nguyễn Thị Bích','04/02/2001',N'nữ',N'Hà
Nam',N'kinh','Bthimoc@gmail.com',0568612138),
('SV08','L003',N'Hoàng Văn Chí','09/01/2001',N'nam',N'Nam
Định',N'Kinh','Chongd@gmail.com',0979612138),
('SV09','L004',N'Nguyễn Thị
Anh','11/02/2001',N'nữ',N'TPCHM',N'kinh','Banhs@gmail.com',0582612138),
('SV10','L004',N'Nguyễn Thị Bảo','11/02/2001',N'nữ',N'Hải
Phòng',N'kinh','Bdaue@gmail.com',0588612138),
('SV11','L004',N'Lê Văn Diệu','09/01/2001',N'nam',N'Nam
Định',N'Kinh','Choangr@gmail.com',0979612138),
('SV12','L005',N'Nguyễn Văn An','10/05/2000',N'nam',N'Hà Nội',N'Ê
Đê','Anguyeng@gmail.com',0999612138),
('SV13','L005',N'Nguyễn Văn Bích','11/02/2001',N'nam',N'Hải
Phòng',N'kinh','Bvanh@gmail.com',0989612138),
('SV14','L006',N'Hoàng Văn Châu','09/01/2001',N'nam',N'Nam
Định',N'Kinh','Choangj@gmail.com',0979612138),
('SV15','L006',N'Nguyễn Thị Bảo','11/02/2001',N'nữ',N'Hải
Phòng',N'kinh','Bthio@gmail.com',0588612138),
('SV16','L007',N'Lê Văn Diệu','09/01/2001',N'nam',N'Nam
Định',N'Kinh','Choangv@gmail.com',0979612138),
('SV17','L007',N'Nguyễn Thị Bích','04/02/2001',N'nữ',N'Hà
Nam',N'kinh','Bthimox@gmail.com',0568612138),
18
('SV18','L008',N'Hoàng Văn Chí','09/01/2001',N'nam',N'Nam
Định',N'Kinh','Choangy@gmail.com',0979612138),
('SV19','L008',N'Nguyễn Thị
An','11/02/2001',N'nữ',N'TPCHM',N'kinh','Banhz@gmail.com',0582612138),
('SV20','L009',N'Nguyễn Thị Hảo','11/02/2001',N'nữ',N'Hải
Phòng',N'kinh','Bdauw@gmail.com',0588612138),
('SV21','L0010',N'Lê Văn Diệu','09/01/2001',N'nam',N'Nam
Định',N'Kinh','Choangt@gmail.com',0979612138),
('SV22','L0011',N'Nguyễn Văn An','10/05/2000',N'nam',N'Hà Nội',N'Ê
Đê','Anguyenp@gmail.com',0999612138),
('SV23','L0012',N'Nguyễn Văn Báu','11/02/2001',N'nam',N'Hải
Phòng',N'kinh','Bvani@gmail.com',0989612138),
('SV24','L0013',N'Hoàng Văn Chuyền','09/01/2001',N'nam',N'Nam
Định',N'Kinh','Choangk@gmail.com',0979612138),
('SV25','L0014',N'Nguyễn Thị Bảo','11/02/2001',N'nữ',N'Hải
Phòng',N'kinh','Bthil@gmail.com',0588612138),
('SV26','L0015',N'Lê Văn Diệu','09/01/2001',N'nam',N'Nam
Định',N'Kinh','Choangm@gmail.com',0979612138),
('SV27','L0016',N'Nguyễn Thị Bích','04/02/2001',N'nữ',N'Hà
Nam',N'kinh','Bthimok@gmail.com',0568612138),
('SV28','L0017',N'Hoàng Văn Chí','09/01/2001',N'nam',N'Nam
Định',N'Kinh','Choangi@gmail.com',0979612138),
('SV29','L0018',N'Nguyễn Thị
Anh','11/02/2001',N'nữ',N'TPCHM',N'kinh','Banhtt@gmail.com',0582612138),
('SV30','L0019',N'Nguyễn Thị Bảo','11/02/2001',N'nữ',N'Hải
Phòng',N'kinh','Bdauaa@gmail.com',0588612138),
('SV31','L0020',N'Nguyễn Thị Hảo','11/02/2001',N'nữ',N'Hải
Phòng',N'kinh','Bdauu@gmail.com',0588612138),
('SV32','L0021',N'Lê Văn Diệu','09/01/2001',N'nam',N'Nam
Định',N'Kinh','Choangyy@gmail.com',0979612138),
('SV33','L0022',N'Nguyễn Văn An','10/05/2000',N'nam',N'Hà Nội',N'Ê
Đê','Anguyenxx@gmail.com',0999612138),
('SV34','L0023',N'Nguyễn Văn Bích','11/02/2001',N'nam',N'Hải
Phòng',N'kinh','Bvanjj@gmail.com',0989612138),
19
('SV35','L0024',N'Hoàng Văn Châu','09/01/2001',N'nam',N'Nam
Định',N'Kinh','Choangio@gmail.com',0979612138)

select * from SinhVien

Insert into MonHoc values

('MH01',N'Hệ quản trị csdl',3),


('MH02',N'Toán rời rạc',4),
('MH03',N'Pháp luật đại cương',2),
('MH04',N'Tiếng Anh chuyên ngành',3),
('MH05',N'Trí tuệ nhân tạo',3),
('MH06',N'Giải tích hàm 1 biến',4),
('MH07',N'Khoa học xã hội',2),
('MH08',N'Kinh tế chính trị',3),
('MH09',N'Công nghệ web',3),
('MH10',N'Mạng máy tính',4)

select * from MonHoc

Insert into KetQua values


('SV01','MH01',9.5),
('SV01','MH02',6),

20
('SV01','MH03',7.8),
('SV02','MH01',9.5),
('SV02','MH04',7.5),
('SV03','MH01',9),
('SV03','MH06',8),
('SV04','MH02',5),
('SV04','MH04',6),
('SV05','MH02',6),
('SV05','MH04',9),
('SV06','MH01',7),
('SV06','MH02',5.5),
('SV07','MH03',5),
('SV07','MH04',9),
('SV08','MH03',8),
('SV08','MH01',9.5),
('SV09','MH04',8.5),
('SV09','MH01',9),
('SV10','MH04',6.5),
('SV10','MH03',9.5),
('SV11','MH05',7.5),
('SV11','MH07',6),
('SV12','MH05',6),
('SV12','MH02',8.5),
('SV13','MH05',7),
('SV13','MH01',9.5),
('SV14','MH01',9.5),
('SV14','MH06',7.5),
('SV15','MH06',9),
21
('SV15','MH02',9.5),
('SV16','MH06',5),
('SV16','MH01',9.5),
('SV17','MH07',6),
('SV17','MH04',9.5),
('SV18','MH07',5.5),
('SV18','MH01',4.5),
('SV19','MH08',5),
('SV19','MH01',3.5),
('SV20','MH08',8),
('SV20','MH05',9.5),
('SV21','MH08',8.5),
('SV21','MH07',9.5),
('SV22','MH09',6.5),
('SV22','MH07',2.5),
('SV23','MH01',5.5),
('SV23','MH09',6),
('SV24','MH03',3.5),
('SV24','MH09',6),
('SV25','MH06',6),
('SV25','MH01',7),
('SV25','MH05',7),
('SV26','MH02',7.5),
('SV26','MH01',7),
('SV27','MH03',9),
('SV27','MH01',7),
('SV28','MH04',5),
('SV28','MH01',7),
22
('SV29','MH02',6),
('SV29','MH07',7),
('SV30','MH02',5.5),
('SV30','MH01',7),
('SV31','MH03',5),
('SV31','MH04',7),
('SV32','MH01',7),
('SV32','MH03',8),
('SV33','MH01',3),
('SV33','MH04',8.5),
('SV34','MH01',7),
('SV34','MH04',6.5),
('SV34','MH05',7),
('SV35','MH01',7),
('SV35','MH04',7),
('SV35','MH05',6)
select *from Ketqua

Insert into GiangKhoa values

('MK01','MH01',1980,1),
('MK01','MH02',1980,2),
('MK01','MH05',1981,1),
('MK01','MH06',1981,2),
('MK02','MH02',1980,1),
('MK02','MH03',1980,2),
23
('MK02','MH06',1981,1),
('MK03','MH03',1984,1),
('MK03','MH01',1984,2),
('MK04','MH01',1988,1),
('MK04','MH04',1988,2),
('MK04','MH06',1988,2),
('MK05','MH04',1988,1),
('MK05','MH05',1988,1),
('MK05','MH08',1988,2),
('MK06','MH01',1996,1),
('MK06','MH06',1996,2),
('MK06','MH09',1996,2),
('MK07','MH01',1996,1),
('MK07','MH07',1996,2),
('MK07','MH10',1996,2),
('MK08','MH05',1988,1),
('MK08','MH08',1988,2),
('MK09','MH09',1988,1),
('MK09','MH10',1988,2),
('MK10','MH01',1996,1),
('MK10','MH07',1996,1),
('MK10','MH10',1996,2)

C:THỰC HIỆN CÁC CÂU LỆNH TRUY VẤN VÀ PHÂN QUYỀN

LÊ HỒNG ÁNH

24
select *from GiangKhoa
-- Viết thử tục lưu trữ sinh viên của 1 khoa
Create proc svkhoa
@tenkhoa nvarchar(200)
as
begin
declare @makhoa char(10)
select @makhoa=Khoa.MaKhoa from Khoa
where Khoa.TenKhoa=@tenkhoa
Select SinhVien.MaSV,SinhVien.HoTen from SinhVien,Lop Where
Lop.MaLop=SinhVien.MaLop
and Lop.MaKhoa=@makhoa
end

exec svkhoa N'Công nghệ thông tin'

-- viết hàm trả về tên môn được các khoa dạy trong 1 năm học
create function bangmon(@namhoc int)
returns table
as
return (select MonHoc.TenMH from MonHoc,GiangKhoa
where MonHoc.MaMH=GiangKhoa.MaMH and
GiangKhoa.NamHoc=@namhoc)
select * from bangmon(1980);

25
-- viết con trỏ đếm số sinh viên dân tộc kinh
declare con_tro_sinh_vien cursor
Dynamic Scroll
for
select count(*) from SinhVien where DanToc=N'Kinh'

Open con_tro_sinh_vien;

declare @SoSV int;


set @SoSV =0;
Fetch First from con_tro_sinh_vien
While (@@FETCH_STATUS=0)
Begin
set @SoSV=@SoSV + 1
Fetch Next from con_tro_sinh_vien
End
print N'Số sinh viên: ' + cast(@SoSV as char(4));

Close con_tro_sinh_vien;
DeAllocate con_tro_sinh_vien;

26
-- tạo khung nhìn MaSV,HoTen,TenLop,TenKhoa
create view viewSV(MaSV,HoTen,TenLop,TenKhoa)
as
select SinhVien.MaSV,SinhVien.HoTen,Lop.TenLop,Khoa.TenKhoa
from SinhVien,Lop,Khoa
where SinhVien.MaLop=Lop.MaLop and Khoa.MaKhoa=Lop.MaKhoa
select* from viewSV

-- trigg insert bảng KetQua

27
Create Trigger Trig_SV on KetQua for insert
as
if (( select DiemThi from inserted) is not null)
Begin
print 'bạn đã thêm thành công'
end
Insert into KetQua values
('SV01','MH10',10)

--tạo giao dịch chuyển số tín chỉ của môn 'Toán rời rạc' từ 4 thành 2
begin tran MH
update MonHoc set SoTinChi=2 where TenMH=N'Toán rời rạc'
if(not exists(select * from MonHoc where TenMH=N'Toán rời rạc'))
rollback tran MH
else commit tran MH
print N'chuyển thành công'
select* from MonHoc

--phân quyền tạo login và user nqchau và anh

sp_addlogin 'nqchau', '123456'


28
sp_addlogin 'anh', '123456'
--tạo role giangvien .Cấp quyền cho role giangvien được xem,thêm ,sửa ,xóa
bảng KetQua
sp_addrole giangvien
GRANT SELECT,DELETE,INSERT ,UPDATE ON KetQua to
giangvien
--tạo role sinhvien .Cấp quyền cho role sinhvien được xem bảng KetQua
sp_addrole sinhvien
grant select on KetQua TO sinhvien
--Thêm user 'nqchau' vào role 'giangvien',Thêm user 'anh' vào role
'sinhvien'
sp_addrolemember 'giangvien', 'nqchau'
sp_addrolemember 'sinhvien', 'anh'

VŨ THỊ MƠ
/* Câu 1: viết thủ tục sp_update_sv có tham số dùng để cập nhật dữ
liệu mới cho 1 sinh viên khi biết MaSV trong bảng SinhVien*/
create procedure cau1
@MaSV char(10),
@MaLop varchar(30),
@HoTen nvarchar(100),@NgaySinh date,@GioiTinh nvarchar(10),@QueQuan
nvarchar(50),
@DanToc nvarchar(30),@Email nvarchar(20),@SDT float
as begin
update SinhVien set MaSV=@MaSV ,
HoTen=@HoTen,NgaySinh=@NgaySinh,GioiTinh=@GioiTinh,QueQuan=@Q
ueQuan,DanToc=@DanToc,
Email=@Email ,SDT=@SDT
where MaSV=@MaSV
end

29
exec cau1 'SV01','L001',N'Hoàng Ngọc Lan','11/07/2001',N'nữ',N'Hà
Nội',N'Kinh','lanhoaiquy@gmail.com',0399612138;
select* from SinhVien;

-- Câu 2. Viết 1 function Với 1 mã sinh viên và 1 mã khoa ,kiểm tra xem sinh
viên có
--thuộc khoa này không(trả về đúng hoặc sai)
create function kt_check_SV_IN_Khoa
(
@masv varchar(10),
@makhoa varchar(10)
)
returns varchar(5)
as
begin
declare @ketqua varchar(5);

if(exists(select *from SinhVien

30
left join Lop ON Lop.MaLop=SinhVien.MaLop
left join Khoa on Lop.MaKhoa = Khoa.MaKhoa
where SinhVien.MaSV=@masv
and Khoa.MaKhoa = @makhoa
)
)
set @ketqua='true'
else
set @ketqua='false'
return @ketqua
end
select dbo.kt_check_SV_IN_Khoa('SV06',N'Công Nghệ Thông Tin')

--Câu 3:viết 1 trigger để ko cho phép cập nhật giá trị của cột MaSV
create trigger trig_cau3 on SinhVien for update
as begin
if(update(MaSV))
begin
print N'Bạn không đc phép cập nhật cột masv'
rollback tran;
end
else
print N'bạn đã cập nhật thành công';

31
end
select*from SinhVien
update SinhVien
set QueQuan =N'Hà Nội'
where GioiTinh=N'Nam';

--câu 4:tạo view kết quả thi lấy dữ liệu về MaSV ,HoTen,MaMon,Diem,
--từ 3 bảng SinhVien,MonHoc,KetQua
create view KQThi
as
select SinhVien.MaSV,HoTen,MonHoc.MaMH,TenMH,SoTinChi,DiemThi
from SinhVien
left join KetQua on SinhVien.MaSV = KetQua.MaSV
left join MonHoc on KetQua.MaMH = MonHoc.MaMH

select *from KQThi

32
--câu 5 sử dụng cursor để hiển thị danh sách MaSV,HoTen,GioiTinh
declare con_tro_SV cursor
DYNAMIC SCROLL
for
select MaSV,HoTen,GioiTinh from SinhVien
open con_tro_SV;

declare @HoTen nvarchar(50), @MaSV varchar(7), @GioiTinh nvarchar(3);


FETCH NEXT from con_tro_SV into @MaSV,@HoTen, @GioiTinh
while (@@FETCH_STATUS=0)
begin
print @MaSV + ' ' + @HoTen + ' ' + @GioiTinh
FETCH NEXT from con_tro_SV into @MaSV,@HoTen, @GioiTinh
end

33
close con_tro_SV ;
DeAllocate con_tro_SV;

--câu 6: viết 1 giao dịch thực hiện chuyển số tín chỉ của môn Hệ quản trị csdl
từ 3 thành 4 tín
Begin Tran monhoc
Update MonHoc set SoTinChi=4 where TenMH =N'Hệ quản trị csdl'
IF(not exists (select * from MonHoc where TenMH =N'Hệ quản trị csdl'))
Begin
print N' Hủy thực hiện chuyển'
ROLLBACK TRAN monhoc
End
ELSE
Begin
print N'thực hiện chuyển'
commit tran monhoc
End

34
select * from MonHoc

--câu 7:Phân quyền


--Tạo login giaovien,có pass là :1234
sp_addlogin 'giaovien', '1234'
--tạo user 'VuMo'
sp_grantdbaccess 'giaovien', 'VuMo'
--với tư cách là admin tạo 1 role 'gvien',cấp quyền select,insert,delete,update
trên bảng KetQua
--cho role đó
sp_addrole 'gvien'

GRANT select,insert,delete,update ON KetQua to gvien


--thêm user 'VuMo' vào role 'gvien'
35
sp_addrolemember 'gvien', 'VuMo'

HOÀNG NGỌC LAN

--I,HÀM
--a, Viết 1 hàm để trả về số sinh viên thi lại 1 môn học nào đó
(tham số vào là mã môn)

--gọi hàm để hiển thị số sv thi lại môn hệ quản trị csdl
Create function Func_cau1 (@MaMon char(5))
Returns int
as begin
declare @SV_thilai int
Select @SV_thilai = (Select COUNT(MaSV) from KetQua,MonHoc
where MonHoc.MaMh=@mamon AND KetQua.MaMH=MonHoc.MaMH and
DiemThi<4)
return @SV_thilai;
end

--Gọi hàm đó để hiển thị số SV thi lại môn hệ quản trị csdl
Select dbo.Func_cau1('MH01')

36
--b Viết câu lệnh SELECT gọi hàm trên để hiển thị danh sách các
môn học có số SV thi lại nhiều nhất
Select MaMH, TenMH
from MonHoc
Where dbo.Func_cau1(MaMH)=(Select Max(dbo.Func_cau1(MaMH)) from
MonHoc)

select*from KetQua
select * from sinhvien

--II,Thủ tục
--a,viết thủ tục sp_update_sv có tham số dùng để cập nhật dữ
liệu mới cho 1 sinh viên khi biết MaSV trong bảng SinhVien
create proc sp_update_sv
@masv varchar(25), @malop varchar(30), @hoten nvarchar(100),
@ngaysinh date, @gioitinh nvarchar(10), @quequan
nvarchar(50),@dantoc nvarchar(30), @email nvarchar(50),@SDT
float
as begin
update SinhVien set malop=@malop ,HoTen = @hoten, NgaySinh =
@ngaysinh, GioiTinh = @gioitinh,QueQuan=@quequan,
dantoc=@dantoc ,Email = @email ,SDT=@sdt where MaSV = @masv

37
end
exec sp_update_sv 'SV03','L002', N'Hoàng Chí Nguyên',
'11/11/2001', N'Nam', N'Ninh Binh','kinh',
N'nguyen@gmail.com',0344445555

--b,Viết 1 thủ tục cho biết danh sách sv thi lại 1 môn học nào
đó
Create proc cau2
@MaMonHoc char(10)
as
begin
declare @MaSV char(10), @Hoten nvarchar(50)
Select @MaSV=SinhVien.MaSV, @Hoten=Hoten from SinhVien, KetQua,
MonHoc Where SinhVien.MaSV = KetQua.MaSV and MonHoc.MaMH =
KetQua.MaMH and MonHoc.MaMh = @MaMonHoc and DiemThi<5
print N'Sinh viên '+@MaSV + N'tên '+ @Hoten
end
-- in ra kết quả
exec cau2 'MH03'

--III,TRIGGER

38
-- Tạo Trigger để đảm bảo rằng khi sửa một sinh viên trong
bảng SinhVien
--thì sinh viên sau khi sửa phải khác tên sinh viên trước khi
sửa và tên sinh viên
-- sau khi sửa không trùng với tên sinh viên đã có trong bảng.
Nếu vi phạm
--thì thông báo lỗi.*/
Create trigger Trig_cau1 on SinhVien for update
as
if(((select HoTen from inserted) != (select HoTen from
deleted))
and (select count(*) from SinhVien where Hoten = (select HoTen
from inserted))<=1)
print N'Sửa thành công';
else begin
print N'Sửa không thành công, nhập tên khác';
rollback tran;
end
update SinhVien set HoTen= N'Nguyễn Thị Nụ' where HoTen=N'Hoàng
Ngọc Lan'

--IV,VIEW
--a,sử dụng khung nhìn KetQuaThi để hiển thị thông tin điểm
--thi môn Hệ Quản trị CSDL bao gồm MaSV, HoTen, Diem
Create view KetQuaThi
as

39
select SinhVien.MaSV,HoTen,MonHoc.MaMH,TenMH,KetQua.DiemThi
from SinhVien
left join KetQua on SinhVien.MaSV=KetQua.MaSV
left join MonHoc on KetQua.MaMH=MonHoc.MaMH
-- hiển thị thông tin với truy vấn trong bảng
Select SinhVien.MaSV,HoTen,DiemThi
from SinhVien,KetQua,MonHoc
where SinhVien.MaSV=KetQua.MaSV
and KetQua.MaMH=MonHoc.MaMH
and MonHoc.TenMH=N'Hệ quản trị csdl'

--V,CON TRỎ
--a,sd con trỏ để in ra điểm trung bình của những sinh viên
Nguyễn THị A theo định dạng
--sinh viên Nguyễn THị A mã số SV...có DTB....
40
declare con_tro_sinh_vien cursor
Dynamic Scroll
for
Select SinhVien.MaSV, AVG(DiemThi) from SinhVien, KetQua where
SinhVien.MaSV = KetQua.MaSV and HoTen = N'Nguyễn Thị Hảo' group
by SinhVien.MaSV
--mở con trỏ
Open con_tro_sinh_vien

declare @MaSV char(4), @DiemTrB float


Fetch Next from con_tro_sinh_vien into @MaSV, @DiemTrB
While (@@FETCH_STATUS=0)--biến kiểm tra xem đọc dl thành công
hay thất bại
Begin
print N'Sinh viên :Nguyễn Thị Hảo mã số SV '+@MaSV+ N' có
DTB: ' +cast(@DiemTrB as char(40))
Fetch Next from con_tro_sinh_vien into @MaSV, @DiemTrB
End
--đóng con trỏ
Close con_tro_sinh_vien;
DeAllocate con_tro_sinh_vien;-- giải phóng con trỏ ra khỏi bộ
nhớ

--VI Phân quyền cho người dùng


--tạo login
sp_addlogin 'Minh', '12345';

41
--Tạo Role giảng viên cấp quyền cho giảng viên thêm,sửa,xóa
bảng điểm
sp_addrole GiangVien;
grant INSERT,DELETE,UPDATE on KetQua for GiangVien;
--Xếp user GiangVien vào role tương ứng
sp_addrolemember 'GiangVien','Minh';
--xóa role
sp_droprole GiangVien;

--VII, TRANSACTION
--viết 1 giao dịch tường minh để chuyển 'SV04' sang lớp 'L003'

Begin tran giaodichsv


declare @x char(20)
select @x=MaLop from SinhVien where MaSV='SV04';
update SinhVien set MaLop='L003' where MaSV='SV04';
rollback tran

42

You might also like