Nhập dữ liệu và thực hành truy vấn với CSDL dự án Quản lý sinh viên

Khóa Thực chiến SQL cùng Kteam - Dự án quản lý sinh viên

5.0 (9 đánh giá)
Tạo bởi K9 Cập nhật lần cuối 20:50 29-10-2021 59.760 lượt xem 54 bình luận
Tác giả/Dịch giả: K9
Học nhanh

Danh sách bài học

Nhập dữ liệu và thực hành truy vấn với CSDL dự án Quản lý sinh viên

Dẫn nhập

Ở bài trước, chúng ta đã cùng nhau CÀI ĐẶT CSDL LÊN SQL SERVER. Qua đó mình cũng đã hướng dẫn bạn vẽ lược đồ ER nhanh, cài đặt CSDL bằng giao diện, bằng code và xử lý một số vấn đề khác.

Trong bài này chúng ta sẽ cùng nhau thực chiến với dự án Quản lý sinh viên với phần Nhập dữ liệu và thực hành truy vấn với CSDL dự án Quản lý sinh viên. 

Đừng quên hoàn thành cài đặt database của dự án Quản lý sinh viên lên SQL Server nhé! Chúng ta sẽ thực hành tiếp trên CSDL đó

Chúng ta hãy cùng nhau teamwork, thảo luận và hỗ trợ nhau trong dự án này để giải quyết  bài toán thực tế một cách hoàn chỉnh dưới sự hướng dẫn của anh Kim Long - founder Howkteam nhé! 


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:

Trong bài này, Kteam sẽ cùng các bạn tìm hiểu các nội dung:

  • 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
  • Phần 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
  • Phần định hướng bài tập
  • Các phần 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 thì có thể xem qua bài 

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 

Nhập bộ dữ liệu như sau:

Khoa:

  MaKhoa  

tenKhoa

  namThanhLap 

   CNTT

    Công nghệ thông tin 

1995

   VL

    Vật Lý

1970

-- nhập liệu cho bảng Khóa Học
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

Khóa học:

  MaKhoaHoc  

  namBatDau  

  namKetThuc  

K2002

2002

2006

K2003

2003

2007

K2004

2004

2008

-- nhập liệu cho bảng Khóa 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

SinhVien

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 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', 'TH2003/01')
go
Insert into Sinh_Vien values('0311002', N'Huỳnh Thanh Sang', 1984, N'Kinh', 'TH2003/01')
go

ChuongTrinh

  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

MonHoc

  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

KetQua

  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

GiangKhoa

 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

Lop

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ể down về bộ nhập liệu đầy đủ trong source code tại phần TẢI XUỐNG bên dưới.


Truy vấn đơn giản

Hướng dẫn trong buổi học

Viết các câu truy vấn sau :

  1. Danh sách các sinh viên khoa “Công nghệ Thông tin” khoá 2002-2006
-- 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
  1. 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 quy định thi 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 thi sinh viên đủ 18 tuổi khi bắt đầu khóa học)"
-- Day(GETDATE()) -> lấy ngày trong tháng
-- Month(GETDATE()) -> lấy Tháng trong Năm
-- Year(GETDATE()) -> lấy năm
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
  1. 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'

-- Theo cách truy vấn lồng
select 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 Sinh_Vien.MaSV not in
(select Sinh_Vien.MaSV  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 = N'Cấu trúc dữ liệu 1')

Bài tập về nhà

  1. Cho biết sinh viên thi không đậu (Diem <5) môn cấu trúc dữ liệu 1 nhưng chưa thi lại. 
  2. 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 đó 
  3. 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 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 Howkteam.com

Ở 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ó” 


Tải xuống

Tài liệu

Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Nhập dữ liệu và thực hành truy vấn với CSDL dự án Quản lý sinh viên dưới dạng file PDF trong link bên dưới.

Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com

Đừng quên likeshare để ủng hộ Kteam và tác giả nhé!

Project

Nếu việc thực hành theo hướng dẫn không diễn ra suôn sẻ như mong muốn. Bạn cũng có thể tải xuống PROJECT THAM KHẢO ở link bên dưới!


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ên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

Nội dung bài viết

Tác giả/Dịch giả

K9

Nhà sáng lập Howkteam.com, KQuiz.vn & tác giả các khóa học C#, Auto, Unity3D, Python....

Với mong muốn mang đến kiến thức chất lượng, miễn phí cho mọi người, với tâm huyết phá bỏ rào cản kiến thức từ việc giáo dục thu phí. Tôi đã cùng đội ngũ Kteam đã lập nên trang website này để thế giới phẳng hơn.
Hãy cùng chúng tôi lan tỏa kiến thức đến cộng đồng! 

Khóa học

Khóa Thực chiến SQL cùng Kteam - Dự án quản lý sinh viên

sql, kteam, howkteam,cơ sở dữ liệu, bài tập cơ sở dữ liệu

Trong các khóa học SỬ DỤNG SQL SERVER PHÂN TÍCH THIẾT KẾ PHẦN MỀM, Kteam đã đề cập đến các kiến thức cần thiết để bạn có thể bắt đầu xây dựng một cơ sở dữ liệu với SQL server và truy vấn qua CSDL đó.

Ở combo Thực chiến SQL, chúng ta sẽ cùng nhau phân tích các CSDL đó từ đặc tả và ứng dụng các kiến thức đã học ở hai khóa trên vào việc giải quyết các yêu cầu thực tế của một CSDL. Trong bộ khóa học này các bạn sẽ đi qua các kiến thức từ cơ bản đến nâng cao qua các dự án khác nhau.

Nào! Chúng ta sẽ cùng nhau tìm hiểu dự án đầu tiên THỰC CHIẾN SQL CÙNG DỰ ÁN QUẢN LÝ SINH VIÊN

Đánh giá

truongvt44 đã đánh giá 22:50 19-05-2022

xem lại thấy vẫn hay

Vo Tan Duc đã đánh giá 10:19 04-04-2022

Những khóa thực chiến như thế này em cũng thích anh chia sẻ những kinh nghiệm thực tế. Hay quá anh ơi. Em quen giọng anh rồi. Mong anh ra nhiều series thực chiến về phần mềm, sql, tool,...

DongTV đã đánh giá 19:16 28-07-2021

thinhpham đã đánh giá 01:36 10-08-2019

ngocdungduong đã đánh giá 16:46 26-07-2019

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
xuanthomtp1920 đã bình luận 15:44 25-04-2023

-- 1. Danh sách các sinh viên khoa “Công nghệ Thông tin” khoá 2002-2006
select sv.*
from Sinh_Vien sv join Lop l
on sv.Ma_Lop=l.Ma_Lop
join Khoa_Hoc kh
on kh.Ma_Khoa_Hoc=l.Ma_Khoa_Hoc and kh.Ma_Khoa_Hoc='K2002'

câu 1 em làm như thế này đc ko ạ

aaronnguyen đã bình luận 22:34 21-09-2021

Q3: chưa học môn CTDL1 => không có dữ liệu trong dbo.Ket_Qua

select distinct Sinh_Vien.*, Khoa.Ten_Khoa, Khoa_Hoc.Nam_BatDau, Khoa_Hoc.Nam_KetThuc from Sinh_Vien
left join Lop on Lop.Ma_Lop = Sinh_Vien.Ma_Lop
left join Khoa on Khoa.Ma_Khoa = Lop.Ma_Khoa
left join Khoa_Hoc on Khoa_Hoc.Ma_Khoa_Hoc = Lop.Ma_Khoa_Hoc
left join Mon_Hoc on Mon_Hoc.Ma_Khoa = Lop.Ma_Khoa
left join Ket_Qua on Ket_Qua.Ma_SV = Sinh_Vien.Ma_SV
where Sinh_Vien.Ma_SV not in 
(select Sinh_Vien.Ma_SV from Sinh_Vien
left join Ket_Qua on Ket_Qua.Ma_SV = Sinh_Vien.Ma_SV
where Ket_Qua.Ma_MH = 'THCS01')
and Khoa.Ma_Khoa = 'CNTT'

DongTV đã bình luận 21:10 28-07-2021

/* Câu 5: 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 đó */
SELECT K.Ten_Khoa, L.Ma_Lop, KH.Ma_Khoa_Hoc, CT.Ten_CT, COUNT(SV.MaSV) AS SLSV FROM dbo.Sinh_Vien AS SV
INNER JOIN dbo.Lop AS L ON L.Ma_Lop = SV.Ma_Lop
INNER JOIN dbo.Khoa AS K ON L.Ma_Khoa = K.Ma_Khoa
INNER JOIN dbo.Khoa_Hoc AS KH ON L.Ma_Khoa_Hoc = KH.Ma_Khoa_Hoc
INNER JOIN dbo.Chuong_Trinh_Hoc AS CT ON CT.Ma_CT = L.Ma_CT
WHERE K.Ma_Khoa = 'CNTT'
GROUP BY K.Ten_Khoa, L.Ma_Lop, KH.Ma_Khoa_Hoc, CT.Ten_CT
GO

Phule172 đã bình luận 06:52 01-04-2021

Mình thấy cách giải quyết câu 3 của thấy bị sai:

Sinhvien left join lop - cho ta biết lớp của sinh viên: OK

left join khoa - cho ta biết khoa của sinh viên: OK

left join khoahoc - cho biết sinh viên đó thuộc khoá nào: OK

left join monhoc  - cái này không hợp lý. MÌnh nghĩ câu này cho ta biết khoa đó gồm có những môn học nào và sinh viên đó có thể sẽ phải học môn đó, chứ không có nghĩa là đã học môn đó hay chưa. Theo mình cách đúng là đựa và bảng kết quả học. Nếu đã học thì sẽ có kết quả học tập, không cần biết thi đỗ hay rớt

sangntt179 đã bình luận 16:03 25-02-2021

Cho em hỏi em làm như này có được không mấy anh chị. Lấy danh sách sinh viên thỏa các yêu cầu khác loại đi các sinh viên thỏa yêu cầu có điểm thi môn yêu cầu (chưa học tức chưa có điểm thi trong bảng kết quả)

SELECT Ho_Ten FROM dbo.Sinh_Vien

LEFT JOIN dbo.Lop ON dbo.Sinh_Vien.Ma_Lop = lop.Ma_Lop

LEFT JOIN khoa_hoc ON lop.Ma_Khoa_Hoc = dbo.Khoa_Hoc.Ma_Khoa_Hoc WHERE Nam_Bat_Dau = 2002

AND Ma_Khoa = 'CNTT'

EXCEPT

SELECT Ho_Ten FROM dbo.Sinh_Vien

LEFT JOIN dbo.Lop ON dbo.Sinh_Vien.Ma_Lop = lop.Ma_Lop

LEFT JOIN khoa_hoc ON lop.Ma_Khoa_Hoc = dbo.Khoa_Hoc.Ma_Khoa_Hoc

LEFT JOIN dbo.Ket_Qua ON dbo.Sinh_Vien.MaSV = dbo.Ket_Qua.MaSV

WHERE Nam_Bat_Dau = 2002

AND Ma_Khoa = 'CNTT'

AND MaMH = 'THCS01'

Không có video.