Trong dự án Quản lý sinh viên, việc nhập dữ liệu và thực hành truy vấn trên cơ sở dữ liệu (CSDL) là một phần quan trọng. Trước đó, chúng ta đã cài đặt CSDL lên SQL Server và thực hiện một số thao tác như vẽ lược đồ ER, cài đặt CSDL bằng giao diện và bằng code. Trong bài viết này, chúng ta sẽ áp dụng kiến thức đã học để thực chiến với dự án Quản lý sinh viên, tập trung vào việc nhập dữ liệu và thực hành truy vấn trên CSDL đó.
Đừng quên hoàn thành cài đặt CSDL của dự án Quản lý sinh viên lên SQL Server nhé! Chúng ta sẽ tiếp tục thực hành trên CSDL đó.
Nội dung
Để theo dõi bài này một cách tốt nhất, bạn nên có kiến thức về các phần sau:
- SỬ DỤNG SQL SERVER
- PHÂN TÍCH THIẾT KẾ PHẦN MỀM
- Đã xem qua bài PHÂN TÍCH ĐẶC TẢ DỰ ÁN QUẢN LÝ SINH VIÊN
- Đã xem qua bài CÀI ĐẶT CSDL VÀ XÁC ĐỊNH KHÓA CHÍNH, KHÓA NGOẠI LÊN SQL SERVER
Trong bài viết này, chúng ta sẽ tìm hiểu về các nội dung sau:
- Giải quyết câu hỏi của bài trước
- Hướng dẫn cách nhập liệu trong SQL Server
- Giải quyết các lỗi sinh ra trong quá trình nhập liệu
- Hướng dẫn truy vấn cơ bản
- Phân tích các vấn đề thực tế trong truy vấn
- Định hướng bài tập
- Chia sẻ kinh nghiệm thực tế
Phần mềm sử dụng
Trong khóa học này, chúng ta sẽ học và thực hành trực tiếp với SQL Server. Nếu bạn chưa cài đặt SQL, bạn có thể xem qua bài HƯỚNG DẪN CÀI ĐẶT SQL SERVER 2014. Bạn cũng có thể sử dụng các phiên bản khác từ 2008 trở lên (vì không có nhiều khác biệt).
Nhập dữ liệu cho CSDL
Trước khi thực hiện truy vấn, chúng ta cần nhập dữ liệu vào CSDL. Hãy nhập bộ dữ liệu sau:
Bảng Khoa:
| MaKhoa | tenKhoa | namThanhLap |
|——–|———————|————–|
| CNTT | Công nghệ thông tin | 1995 |
| VL | Vật Lý | 1970 |
-- Nhập liệu cho bảng Khoa
Insert into Khoa(Ma_Khoa, Ten_Khoa, Nam_Thanh_Lap) values('CNTT', N'Công nghệ thông tin',1995)
go
Insert into Khoa values('VL', N'Vật Lý' , 1970)
go
Bảng Khoa học:
| MaKhoaHoc | namBatDau | namKetThuc |
|———–|————|————-|
| K2002 | 2002 | 2006 |
| K2003 | 2003 | 2007 |
| K2004 | 2004 | 2008 |
-- Nhập liệu cho bảng Khoa Học
Insert into Khoa_Hoc(Nam_Bat_Dau, Ma_Khoa_Hoc, Nam_Ket_Thuc) values( 2002, 'K2002',2006)
go
Insert into Khoa_Hoc values('K2003', 2003, 2007)
go
Insert into Khoa_Hoc values('K2004', 2004, 2008)
go
Bảng Sinh viên:
| MaSV | hoTen | namSinh | danToc | maLop |
|———–|———————–|———-|——–|————-|
| 0212001 | Nguyễn Vĩnh An | 1984 | Kinh | TH2002/01 |
| 0212002 | Nguyên Thanh Bình | 1985 | Kinh | TH2002/01 |
| 0212003 | Nguyễn Thanh Cường | 1984 | Kinh | TH2002/02 |
| 0212004 | Nguyễn Quốc Duy | 1983 | Kinh | TH2002/02 |
| 0311001 | Phan Tuấn Anh | 1985 | Kinh | VL2003/01 |
| 0311002 | Huỳnh Thanh Sang | 1984 | Kinh | VL2003/01 |
-- Nhập liệu cho bảng Sinh viên
Insert into Sinh_Vien values('0212001', N'Nguyễn Vĩnh An', 1984, N'Kinh', 'TH2002/01')
go
Insert into Sinh_Vien values('0212002', N'Nguyên Thanh Bình', 1985, N'Kinh', 'TH2002/01')
go
Insert into Sinh_Vien values('0212003', N'Nguyễn Thanh Cường', 1984, N'Kinh', 'TH2002/02')
go
Insert into Sinh_Vien values('0212004', N'Nguyễn Quốc Duy', 1983, N'Kinh', 'TH2002/02')
go
Insert into Sinh_Vien values('0311001', N'Phan Tuấn Anh', 1985, N'Kinh', 'VL2003/01')
go
Insert into Sinh_Vien values('0311002', N'Huỳnh Thanh Sang', 1984, N'Kinh', 'VL2003/01')
go
Bảng Chương trình học:
| MaCT | tenChuongTrinh |
|———|——————|
| CQ | Chính Qui |
-- Nhập liệu cho bảng Chương trình học
Insert into Chuong_Trinh_Hoc values('CQ', N'Chính Quy')
go
Bảng Môn học:
| MaMH | tenMonHoc | maKhoa |
|———|——————–|———–|
| THT01 | Toán cao cấp A1 | CNTT |
| VLT01 | Toán cao cấp A1 | VL |
| THT02 | Toán rời rạc | CNTT |
| THCS01 | Cấu trúc dữ liệu 1 | CNTT |
| THCS02 | Hệ điều hành | CNTT |
-- Nhập liệu cho bảng Môn học
Insert into Mon_Hoc values('THT01', 'CNTT', N'Toán cao cấp A1')
go
Insert into Mon_Hoc values('VLT01', 'VL', N'Toán cao cấp A1')
go
Insert into Mon_Hoc values('THT02', 'CNTT', N'Toán rời rạc')
go
Insert into Mon_Hoc values('THCS01', 'CNTT', N'Cấu trúc dữ liệu 1')
go
Insert into Mon_Hoc values('THCS02', 'CNTT', N'Hệ điều hành')
go
Bảng Kết quả:
| maSV | maMH | lanThi | diem |
|———-|——-|———|——|
| 0212001 | THT01 | 1 | 4 |
| 0212001 | THT01 | 2 | 7 |
| 0212002 | THT01 | 1 | 8 |
| 0212003 | THT01 | 1 | 6 |
| 0212004 | THT01 | 1 | 9 |
| 0212001 | THT02 | 1 | 8 |
| 0212002 | THT02 | 1 | 5.5 |
| 0212003 | THT02 | 1 | 4 |
| 0212003 | THT02 | 2 | 6 |
| 0212001 | THCS01 | 1 | 6.5 |
| 0212002 | THCS01 | 1 | 4 |
| 0212003 | THCS01 | 1 | 7 |
-- Nhập liệu cho bảng Kết quả
Insert into Ket_Qua values('0212001', 'THT01', 1,4)
go
Insert into Ket_Qua values('0212001', 'THT01', 2,7)
go
Insert into Ket_Qua values('0212002', 'THT01', 1,8)
go
Insert into Ket_Qua values('0212003', 'THT01', 1,6)
go
Insert into Ket_Qua values('0212004', 'THT01', 1,9)
go
Insert into Ket_Qua values('0212001', 'THT02', 1,8)
go
Insert into Ket_Qua values('0212002', 'THT02', 1,5.5)
go
Insert into Ket_Qua values('0212003', 'THT02', 1,4)
go
Insert into Ket_Qua values('0212003', 'THT02', 2,6)
go
Insert into Ket_Qua values('0212001', 'THCS01', 1,6.5)
go
Insert into Ket_Qua values('0212002', 'THCS01', 1,4)
go
Insert into Ket_Qua values('0212003', 'THCS01', 1,7)
go
Bảng Giảng Khoa:
| maCT | maKhoa | maMH | namHoc | hocKy | soTietLyThuyet | soTietThucHanh | soTinChi |
|——-|———-|——-|———|——–|——————|——————-|———–|
| CQ | CNTT | THT01 | 2003 | 1 | 60 | 30 | 5 |
| CQ | CNTT | THT02 | 2003 | 2 | 45 | 30 | 4 |
| CQ | CNTT | THCS01 | 2004 | 1 | 45 | 30 | 4 |
-- Nhập liệu cho bảng Giảng Khoa
Insert into Giang_Khoa values('CQ', 'CNTT', 'THT01',2003, 1, 60, 30, 5)
go
Insert into Giang_Khoa values('CQ', 'CNTT', 'THT02',2003, 2, 45, 30, 4)
go
Insert into Giang_Khoa values('CQ', 'CNTT', 'THCS01',2004, 1, 45, 30, 4)
go
Bảng Lớp:
| MaLop | maKhoaHoc | maKhoa | maCT | soThuTu |
|————-|————|———|——-|———-|
| TH2002/01 | K2002 | CNTT | CQ | 1 |
| TH2002/02 | K2002 | CNTT | CQ | 2 |
| VL2003/01 | K2003 | VL | CQ | 1 |
-- Nhập liệu cho bảng Lớp
Insert into Lop values('TH2002/01', 'CNTT','K2002', 'CQ', 1)
go
Insert into Lop values('TH2002/02', 'CNTT','K2002', 'CQ', 2)
go
Insert into Lop values('TH2003/01', 'VL','K2003', 'CQ', 1)
go
Bạn có thể tải về bộ nhập liệu đầy đủ trong source code tại phần TẢI XUỐNG.
Truy vấn đơn giản
Hướng dẫn trong buổi học
Hãy viết các câu truy vấn sau:
- Danh sách các sinh viên khoa “Công nghệ Thông tin” khoá 2002-2006
-- Câu 1: Danh sách các sinh viên khoa "Công nghệ Thông tin" khoá 2002-2006
Select Sinh_Vien.* from Sinh_Vien
LEFT JOIN LOP ON Sinh_Vien.Ma_Lop = Lop.Ma_Lop
LEFT JOIN Khoa_Hoc ON Lop.Ma_Khoa_Hoc = Khoa_Hoc.Ma_Khoa_Hoc
LEFT JOIN Khoa ON Lop.Ma_Khoa = Khoa.Ma_Khoa
where Khoa.Ma_Khoa = 'CNTT' and Khoa_Hoc.Nam_bat_Dau = 2002 and Khoa_Hoc.Nam_Ket_Thuc = 2006
- Cho biết các thông tin (MSSV, họ tên, năm sinh) của các sinh viên học sớm hơn tuổi quy định (theo tuổi qui định, sinh viên đủ 18 tuổi khi bắt đầu khóa học)
-- Câu 2: Cho biết các thông tin (MSSV, họ tên, năm sinh) của các sinh viên học sớm hơn tuổi qui định (theo tuổi qui định, sinh viên đủ 18 tuổi khi bắt đầu khóa học)
select Sinh_Vien.MaSV, Sinh_Vien.Ho_Ten, Sinh_Vien.Nam_Sinh from Sinh_Vien
LEFT JOIN Lop ON Sinh_Vien.Ma_Lop = Lop.Ma_Lop
LEFT JOIN Khoa_Hoc ON Lop.Ma_Khoa_Hoc = Khoa_Hoc.Ma_Khoa_Hoc
where Khoa_Hoc.Nam_Bat_Dau - Sinh_Vien.Nam_Sinh < 18
- Cho biết sinh viên khoa CNTT, khoá 2002-2006 chưa học môn cấu trúc dữ liệu 1
-- Câu 3: Cho biết sinh viên khoa CNTT, khoá 2002-2006 chưa học môn cấu trúc dữ liệu 1
select distinct Sinh_Vien.* from Sinh_Vien
LEFT JOIN Lop ON Sinh_Vien.Ma_Lop = Lop.Ma_Lop
LEFT JOIN Khoa ON Lop.Ma_Khoa = Khoa.Ma_Khoa
LEFT JOIN Khoa_Hoc ON Lop.Ma_Khoa_Hoc = Khoa_Hoc.Ma_Khoa_Hoc
LEFT JOIN Mon_Hoc ON Mon_Hoc.Ma_Khoa = Khoa.Ma_Khoa
where Khoa.Ma_Khoa = 'CNTT' and Khoa_Hoc.Nam_Bat_Dau = 2002 and Khoa_Hoc.Nam_Ket_Thuc = 2006 and Mon_Hoc.TenMH NOT LIKE N'Cấu trúc dữ liệu 1'
Bài tập về nhà
- Cho biết sinh viên thi không đậu (Điểm < 5) môn cấu trúc dữ liệu 1 nhưng chưa thi lại.
- Với mỗi lớp thuộc khoa CNTT, cho biết mã lớp, mã khóa học, tên chương trình và số sinh viên thuộc lớp đó.
- Cho biết điểm trung bình của sinh viên có mã số 0212003 (điểm trung bình chỉ tính trên lần thi sau cùng của sinh viên).
Kết
Trong bài viết này, chúng ta đã cùng nhau nhập dữ liệu cho CSDL trên SQL và giải quyết một số truy vấn cơ bản của dự án quản lý sinh viên. Buổi học đã được diễn ra vào lúc 20h ngày 12/07/2019 tại phần trình chiếu của bài Nhập dữ liệu và thực hành truy vấn với CSDL dự án Quản lý sinh viên trên EzBeauty.vn.
Ở bài sau, chúng ta sẽ tìm hiểu về FUNCTIONS TRONG DỰ ÁN QUẢN LÝ SINH VIÊN.
Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của bạn để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.
Thảo luận
Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần BÌNH LUẬN bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện EzBeauty.vn để nhận được sự hỗ trợ từ cộng đồng.