Bài 3.3: Truy vấn Dữ liệu và Bài Lab Ngày đăng: 14:25 20/08/2022

Dựa theo bài học của Mr Chung Trịnh (Devmaster); Bài giảng khá chi tiết được tình tổng hợp lại theo nội dung video và bài học

Import Dữ liệu đầu vào

- Đầu tiên các bạn tải file data mẫu tại đây. Và run trong SQL để create bảng + table (Việc này nhẹ mà lương cao - tự làm nhé): File MẪU TẠI ĐÂY

- Sau khi run xong thì mình sẽ có thấy Data như thế này

- Ví ở đây: Mình tạo 1 database trước có tên là: DEVMaster_Buoi3 --> Sau đó tiến hành Run query theo file

Bài 33 Lab4 Truy vẫn Dữ liệu
Database Sinh viên sau khi Run xong

Kiểm tra tính ràng buộc của các bảng

Mục đích là để kiểm tra khi thực hiện công việc, thêm sửa xóa và mục đích thiết kế Database của người Lập trình như thế nào; xem tính logic cũng như mô hình Database thì mới code đc :D 

Các bạn làm theo hướng dẫn

Bài 33 Lab4 Truy vẫn Dữ liệu
Kiểm tra tính ràng buộc của các bảng​​​​
  1. Chọn Database Diagrams --> Bấm chuột phải
  2. Chọn New Database Diagrams
Bài 33 Lab4 Truy vẫn Dữ liệu
Sau khi chọn xong New Database Diagrams

Sẽ có 1 box hiện lên và các bạn Giữ CTRL và chọn hết các bảng

Bài 33 Lab4 Truy vẫn Dữ liệu
Bài 33 Lab4 Truy vẫn Dữ liệu

 Vậy là xong! Tại sao phải làm thế này thì mình sẽ giải thích sau. 

NỘI DUNG BÀI HỌC TRUY VẤN DỮ LIỆU

Nội dung bài học theo từng bước như sau:

--- TRUY VẤN DỮ LIỆU
--0. THỨ TỰ THỰC HIỆN CÂU LỆNH TRUY VẤN
/* TỔNG QUÁT

5.	SELECT [TOP / DISTINCT / PERCENT / WITH TIES ]  ...

7.	[INTO TABLE_NAME]

1.	FROM 

2.	WHERE

3.	GROUP BY

4.	HAVING 

6.	ORDER BY  

*/
--1. Truy vấn select - không có from
SELECT @@VERSION AS N'Phiên bản'
GO
SELECT N'Hà nội mua thu tỏa nắng vàng ươm'
GO
--2. Truy vấn trên một bảng
SELECT MaKH,TenKH
FROM Khoa
go
--3. Truy vấn select sử dụng dấu *
-- lấy toàn bộ các cột trong nguồn dữ liệu
SELECT *
FROM KHOA 
GO
--4. Tạo bí danh cho cột trong tập kết quả
-- 
SELECT MaKH as [Mã khoa],TenKH as [Tên khoa]
FROM Khoa as k
go

SELECT MaKH [Mã khoa],TenKH [Tên khoa]
FROM Khoa as k
go
SELECT [Mã khoa]=MaKH , [Tên khoa]=TenKH
FROM Khoa as k
go
SELECT 'Mã khoa'= MaKH , 'Tên khoa'=TenKH
FROM Khoa k
go

--5. Sử dụng biểu thức trong mệnh đề select
Select MaSV, HoSV + ' ' + TenSV as [Sinh viên]
From SinhVien as sv
GO
--6. Điều kiện trong mệnh đề select
-- Where: giới hạn tập kết quả
Select * from SinhVien
-- Hiển thị sinh viên có phai là 0
Select * 
from SinhVien
Where Phai = 0
Go
--Where: sử dụng các thành phần, biểu thức, ..trong where
--a) toán tử so sánh: =; >; >=; <; <=; <>
-- Hiển thị sinh viên có học bổng >=100000
Select * 
from SinhVien
Where HocBong >=100000
Go
--b) Toán tử logic (and, or, not) trong mệnh đề where
-- Hiển thị thông tinh sinh viên là nam và có học bổng
Select * 
from SinhVien
Where Phai=0 and HocBong >0
Go
-- or
Select * 
from SinhVien
Where Phai=0 or HocBong >0
Go

-- not
Select * 
from SinhVien
Where not (Phai=0 or HocBong >0)
Go

-- c) Phép so sanh tương đối (Like / not like)
/*
	+) _ => đại diện cho 1 ký tự bất kỳ
	+) % => Đại diện cho một chuỗi ký tự bất kỳ
	+) [], [a-z] => trong khoảng
	+) [^], [^a-c] => ngoài khoảng
*/
-- áp dụng co các loại dữ liệu kiểu chuỗi
-- Liệt kê sinh viên có tên bắt đầu bằng ký tự n
Select * 
from SinhVien
Where TenSV Like N'n%'
-- Liệt kê sinh viên có tên sinh viên chứa ký tự n
Select * 
from SinhVien
Where TenSV Like N'%n%'
-- Liệt kê sinh viên có tên có ký tự thứ 2 là 'ê'
Select * 
from SinhVien
Where TenSV Like N'_ế%'
-- Liệt kê sinh viên có phần tên có ký tự đầu tiên trong khoảng
-- a-m
Select * 
from SinhVien
Where TenSV Like N'[a-m]%'
--
Select * 
from SinhVien
Where TenSV Like N'[^a-m]%'
---------------
--d) sử dụng phép so sánh tập hợp trong where
-- IN / NOT IN
-- Hiển thị sinh viên thuộc khoa AV và TH
SELECT *
FROM SinhVien
WHERE MaKH = 'AV' OR MaKH = 'TH'
GO
--IN
SELECT *
FROM SinhVien
WHERE MaKH IN ('AV','TH')
GO
-- 
-- 7. TRUY VẤN CÓ SẮP XẾP DỮ LIỆU TRONG TẬP KẾT QUẢ
-- order by   /  /   ASC/ DESC
-- Liệt kê thông tin sinh viên, sắp theo tên tăng dần
SELECT *
FROM SinhVien
ORDER BY TENSV ASC
---GIẢM DẦN
SELECT *
FROM SinhVien
ORDER BY TENSV DESC
---
SELECT *
FROM SinhVien
ORDER BY 3 ASC
GO
--
SELECT MaSV, HoSV + ' '+ TenSV AS [Họ tên], Phai, NoiSinh
FROM SinhVien
ORDER BY TenSV ASC
GO
--
SELECT MaSV, HoSV + ' '+ TenSV AS [Họ tên], Phai, NoiSinh
FROM SinhVien
ORDER BY [Họ tên] ASC
GO
SELECT MaSV, HoSV + ' '+ TenSV AS [Họ tên], Phai, NoiSinh
FROM SinhVien
ORDER BY 2 ASC
GO
--
SELECT MaSV, HoSV + ' '+ TenSV AS [Họ tên], Phai, NoiSinh
FROM SinhVien
ORDER BY HocBong desc
GO
--
SELECT MaSV, HoSV + ' '+ TenSV AS [Họ tên], Phai, NoiSinh,HocBong
FROM SinhVien
ORDER BY HocBong desc
GO
---
--- ví dụ:
/*
14. Liệt kê danh sách sinh viên sinh vào ngày 20/12/1987, 
gồm các thông tin: Họ tên sinh viên, Mã khoa, Học bổng.
*/
SELECT HoSV + ' ' + TenSV AS [Họ tên sinh viên], MaKH [Mã khoa],
	HocBong [Học bổng],NgaySinh
FROM SINHVIEN
WHERE NgaySinh = '1987/12/20'
GO
SELECT HoSV + ' ' + TenSV AS [Họ tên sinh viên], MaKH [Mã khoa],
	HocBong [Học bổng],NgaySinh
FROM SINHVIEN
WHERE NgaySinh = '12/20/1987'
GO
SET DATEFORMAT DMY
GO
SELECT HoSV + ' ' + TenSV AS [Họ tên sinh viên], MaKH [Mã khoa],
	HocBong [Học bổng],NgaySinh
FROM SINHVIEN
WHERE NgaySinh = '20/12/1987'
GO
SELECT HoSV + ' ' + TenSV AS [Họ tên sinh viên], MaKH [Mã khoa],
	HocBong [Học bổng], CONVERT(CHAR(10),NgaySinh,105) AS [Ngày sinh]
FROM SINHVIEN
WHERE NgaySinh = '20/12/1987'
GO

SELECT HoSV + ' ' + TenSV AS [Họ tên sinh viên], MaKH [Mã khoa],
	HocBong [Học bổng], CONVERT(CHAR(10),NgaySinh,105) AS [Ngày sinh]
FROM SINHVIEN
WHERE CONVERT(CHAR(10),NgaySinh,105) = '20-12-1987'
GO

--8. sự dụng mệnh đề case when trong câu lệnh select
select *
from SinhVien
-- hiển thị thông tin sinh viên, cột phai hiển thị nam, nữ
SELECT MaSV, HoSV, TenSV, 
	Phai =  CASE PHAI 
				WHEN 0 THEN N'Nam'
				ELSE N'Nữ'
			END
	, 
	NgaySinh, NoiSinh, MaKH, HocBong, DiemTrungBinh
FROM SinhVien
GO
SELECT MaSV, HoSV, TenSV, 
	Phai =  CASE  
				WHEN PHAI = 0 THEN N'Nam'
				WHEN PHAI = 1 THEN N'Nữ'
				ELSE N'Khác'
			END
	, 
	NgaySinh, NoiSinh, MaKH, HocBong, DiemTrungBinh
FROM SinhVien
GO

--9. Truy vấn tạo bảng (Make table Query)
-- into
SELECT MaSV, HoSV, TenSV, 
	Phai =  CASE  
				WHEN PHAI = 0 THEN N'Nam'
				WHEN PHAI = 1 THEN N'Nữ'
				ELSE N'Khác'
			END
	, 
	NgaySinh, NoiSinh, MaKH, HocBong, DiemTrungBinh
INTO SINHVIEN_TEMP
FROM SinhVien
GO
SELECT * FROM SINHVIEN_TEMP
--- #TABLE / ##TABLE
SELECT MaSV, HoSV, TenSV, 
	Phai =  CASE  
				WHEN PHAI = 0 THEN N'Nam'
				WHEN PHAI = 1 THEN N'Nữ'
				ELSE N'Khác'
			END
	, 
	NgaySinh, NoiSinh, MaKH, HocBong, DiemTrungBinh
INTO #SINHVIEN_TEMP
FROM SinhVien
GO
SELECT * FROM #SINHVIEN_TEMP
GO
-----
--10. SỬ DỤNG TỪ KHÓA DISTINCT TRONG MỆNH ĐỀ SELECT
-- DISTINCT: LOẠI BỎ CÁC HÀNG TRÙNG LẶP - CHỈ DỮ LẠI 1
SELECT * FROM SINHVIEN 
GO
SELECT PHAI FROM SINHVIEN 
GO
SELECT DISTINCT PHAI FROM SINHVIEN 
GO
SELECT  PHAI, MAKH FROM SINHVIEN 
GO
SELECT DISTINCT PHAI, MAKH FROM SINHVIEN 
GO
--11. SỬ TỪ KHÓA TOP TRONG SELECT
-- TOP  : TRÍCH RA N HÀNG ĐẦU TIÊN TRONG TẬP KẾT QUẢ
SELECT MaSV, HoSV, TenSV, Phai, NgaySinh, NoiSinh, MaKH, HocBong
FROM SinhVien
ORDER BY HocBong DESC
go
SELECT TOP 1 MaSV, HoSV, TenSV, Phai, NgaySinh, NoiSinh, MaKH, HocBong
FROM SinhVien
go
-- LẤY RA SINH VIÊN CÓ HỌC BỔNG CAO NHẤT
SELECT TOP 1 MaSV, HoSV, TenSV, Phai, NgaySinh, NoiSinh, MaKH, HocBong
FROM SinhVien
ORDER BY HocBong DESC
go
--12. SỬ DỤNG WITH TIES CÙNG VỚI TOP
-- LẤY RA TẦNG ĐẦU TIÊN BẰNG NHAU
UPDATE SinhVien SET HocBong = 1500000 WHERE MaSV='a12'
GO
SELECT MaSV, HoSV, TenSV, Phai, NgaySinh, NoiSinh, MaKH, HocBong
FROM SinhVien
ORDER BY HocBong DESC
go
SELECT TOP 1 WITH TIES MaSV, HoSV, TenSV, Phai, NgaySinh, NoiSinh, MaKH, HocBong
FROM SinhVien
ORDER BY HocBong DESC
go
SELECT TOP 2 WITH TIES MaSV, HoSV, TenSV, Phai, NgaySinh, NoiSinh, MaKH, HocBong
FROM SinhVien
ORDER BY HocBong DESC
go
SELECT TOP 3 WITH TIES MaSV, HoSV, TenSV, Phai, NgaySinh, NoiSinh, MaKH, HocBong
FROM SinhVien
ORDER BY HocBong DESC
go
--13. PERCENT
SELECT TOP 50 PERCENT MaSV, HoSV, TenSV, Phai, NgaySinh, NoiSinh, MaKH, HocBong
FROM SinhVien
ORDER BY HocBong DESC
go
--14. TRUY VẤN KẾT HỢP 2 HAY NHIỀU BẢNG (JOIN)
-- 
-- LEFT JOIN / LEFT OUTER JOIN
-- INNER JOIN 
-- RIGHT JOIN / RIGHT OUTER JOIN
-- FULL JOIN / FULL OUTER JOIN
SELECT * FROM KHOA ORDER BY MAKH 
SELECT * FROM SINHVIEN ORDER BY MAKH 
GO
-- inner join
SELECT *
FROM KHOA K
	INNER JOIN SinhVien SV ON K.MaKH = sv.MaKH
GO
SELECT k.MaKH,TenKH,MaSV,HoSV,TenSV,HocBong
FROM KHOA K
	INNER JOIN SinhVien SV ON K.MaKH = sv.MaKH
GO
/*
SELECT KHOA.MaKH,TenKH,MaSV,HoSV,TenSV,HocBong
FROM KHOA K
	INNER JOIN SinhVien SV ON K.MaKH = sv.MaKH
GO
*/
INSERT KHOA VALUES('DE','Devmaster')
GO
SELECT k.MaKH,TenKH,MaSV,HoSV,TenSV,HocBong
FROM KHOA K
	INNER JOIN SinhVien SV ON K.MaKH = sv.MaKH
GO
-- left join 
SELECT k.MaKH,TenKH,MaSV,HoSV,TenSV,HocBong
FROM KHOA K
	left JOIN SinhVien SV ON K.MaKH = sv.MaKH
GO
-- RIGHT JOIN
SELECT k.MaKH,TenKH,MaSV,HoSV,TenSV,HocBong
FROM KHOA K
	RIGHT JOIN SinhVien SV ON K.MaKH = sv.MaKH
GO
--FULL JOIN
SELECT k.MaKH,TenKH,MaSV,HoSV,TenSV,HocBong
FROM KHOA K
	FULL JOIN SinhVien SV ON K.MaKH = sv.MaKH
GO

---VD: JOIN 3 BẢNG
SELECT *
FROM Khoa AS K
	JOIN SinhVien AS SV ON K.MaKH = SV.MaKH
	JOIN Ketqua AS KQ ON SV.MaSV = KQ.MaSV
GO
--- 4 BẢNG
SELECT Khoa.*, SinhVien.MaSV, SinhVien.HoSV, SinhVien.TenSV, SinhVien.Phai, Ketqua.Diem, MonHoc.MaMH, MonHoc.TenMH, MonHoc.Sotiet
FROM  Khoa INNER JOIN
         SinhVien ON Khoa.MaKH = SinhVien.MaKH INNER JOIN
         Ketqua ON SinhVien.MaSV = Ketqua.MaSV INNER JOIN
         MonHoc ON Ketqua.MaMH = MonHoc.MaMH
GO
SELECT Khoa.*, SinhVien.MaSV, SinhVien.HoSV, SinhVien.TenSV, SinhVien.Phai, Ketqua.Diem, MonHoc.MaMH, MonHoc.TenMH, MonHoc.Sotiet
FROM  Ketqua INNER JOIN
         MonHoc ON Ketqua.MaMH = MonHoc.MaMH LEFT OUTER JOIN
         SinhVien ON Ketqua.MaSV = SinhVien.MaSV RIGHT OUTER JOIN
         Khoa ON SinhVien.MaKH = Khoa.MaKH
GO

-----

 

GIỜ ĐẾN LÚC LÀM BÀI TẬP THÔI

LAB 04 TRUY VẪN DỮ LIỆU

Bài 1: Viết những truy vẫn lọc và sắp xếp dữ liệu

1.  Cho biết danh sách các môn học, gồm những thông tin sau: Mã môn học, Tên môn học, số tiết

Code: 

select 
	MaMH as N'Mã môn học'
	,TenMH as N'Tên môn học'
	,Sotiet as N'Số tiết'
from MonHoc

Màn hình hiện thị kết quả

Bài 33 Lab4 Truy vẫn Dữ liệu

2. Liệt kê 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. Danh sách sẽ được sắp xếp theo thứ tự Mã sinh viên tăng dần.

Code:

select 
	MaSV
	,HoSv
	,TenSV
	,HocBong
from SinhVien
order by Masv

Màn hình kết quả:

Bài 33 Lab4 Truy vẫn Dữ liệu

3. Danh sách các sinh viên, gồm các thông tin sau: Mã sinh viên, Tên sinh viên, Phải, Ngày sinh. Danh sách sẽ được sắp xếp theo thứ tự của tên

Code:

select 
	MaSV
	,TenSV
	,Phai
	,Hocbong
	,CONVERT(CHAR(10),NgaySinh,103)
from SinhVien
order by TenSV

Màn hình kết quả:

Bài 33 Lab4 Truy vẫn Dữ liệu

Bài 2: Sử dụng hàm trong truy vấn dữ liệu

1. Liệt kê danh sách sinh viên gồm các thông tin sau: Họ và tên sinh viên, giới tinh, Tuổi, Mã khoa. 

Trong đó Giới tính hiện thị ở dạng Nam/Nữ tùy theo giá trí của field Phai là True hay False

Tuổi sẽ được tính bằng cách lấy năm hiện tại trừ đi cho năm sinh.  Danh sách được sắp xếp theo thứ tự Tuổi giảm dấn

Code:

select 
	HoSV + ' ' + TenSV As FullName
	,case Phai
		when '1' then N'Nam'
		when '0' then N'Nữ'
	end
	as N'Giới tính'
	--tinh tuổi có nhiều cách để tinh; mình viết mẫu 2 cách thôi nhé
	--cách 1 là dùng DATEDIFF
	,DATEDIFF(year, NgaySinh, GETDATE())  as Tuoi
	--cách 2 dùng hàm Convert YEAR của định dạng ngày tháng
	, YEAR(getdate()) - YEAR(Ngaysinh) as N'Tuổi cách 2'
from SinhVien
order by Tuoi desc

Màn hình kết quả

Bài 33 Lab4 Truy vẫn Dữ liệu

2. Danh sách sinh viên sinh vào tháng 2 năm 1994, gồm các thông tin Họ tên sinh viên, Phái, Ngày sinh. Trong đó, Ngày sinh chỉ lấy giá trị ngày của truong Ngaysinh

Code:

select 
	HoSV + ' ' + TenSV As FullName
	,case Phai
		when '1' then N'Nam'
		when '0' then N'Nữ'
	end
	as N'Giới tính'
	,DAY(Ngaysinh) as N'Ngày của ngày sinh'
from SinhVien
where
	Year(Ngaysinh) = '1994' and MONTH(Ngaysinh)='02'

Màn hình kết quả:

Bài 33 Lab4 Truy vẫn Dữ liệu

 3. Sắp xếp dữ liệu giảm dần theo cột Ngaysinh

Bài này dễ quá quá

4. Cho biết thông tin về mức học bổng của 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í feild của Hocbong > 100,000 và ngược lại là hiện thị "Mức trung bình"

Code:

select 
	MaSV
	,case Phai
		when '1' then N'Nam'
		when '0' then N'Nữ'
	end
	as N'Giới tính'
	,MaKH
	,case 
		when hocbong >= 100000 then N'Học bổng cao'
		when hocbong < 100000 then N'Mức trung bình'
	end

from SinhVien
where hocbong > 0

Màn hình kết quả:

Bài 33 Lab4 Truy vẫn Dữ liệu

5. Cho biết điểm thi của các sinh viên, gồm các thông tin: Họ và tên Sinh viên, Mã môn học, Điểm. Kết quả được sắp xếp theo tứ tự Họ và tên Sinh viên, Mã môn học tăng dần

Chú thích 1 chút: Là bạn kéo lên phía trên đọc lại cái phần Database Diagrams kia nhé; Đây là ví do vì sao mình phải kéo Diagrams để xem sự liên kết các bảng dữ liệu sẽ như thế nào. Bài số 5 này là select join nhiều bảng với nhau với relationship

Code:

select 
	_sinhvien.HoSV + ' ' + _sinhvien.TenSV as Hovatensinhvien,
	_monhoc.MaMH,
	_ketqua.Diem

from 
	SinhVien _sinhvien
	inner join  Ketqua _ketqua on _ketqua.MaSV = _sinhvien.MaSV
	inner join MonHoc _monhoc on _monhoc.MaMH = _ketqua.MaMH
order by Hovatensinhvien, _monhoc.MaMH

Màn hình kết quả

Bài 33 Lab4 Truy vẫn Dữ liệu

6. Danh sách khoa Anh Văn, điều kiện lọc phải sử dụng tên khoa, gồm các thông tin sau: Họ tên sinh viên, giới tính, tên khoa. Trong đó giới tính sẽ hiện dạng Nam/Nữ

Code:

select 
	_sinhvien.HoSV + ' ' + _sinhvien.TenSV as Hovatensinhvien
	,case _sinhvien.Phai
		when '1' then N'Nam'
		when '0' then N'Nữ'
	end as N'Giới tính'
	,_khoa.TenKH

from 
	SinhVien _sinhvien
	inner join  Khoa _khoa on _khoa.MaKH = _sinhvien.MaKH
where
	_khoa.TenKH = N'Anh Văn'
order by Hovatensinhvien

Màn hình kết quả:

Bài 33 Lab4 Truy vẫn Dữ liệu

7. Liệt kê bảng điểm của sinh viên khoa Tin học, gồm các thông tin: Tên khoa, Họ và tên Sinh viên, Tên môn học, Số điểm, Điểm

8. Kết quả học tập của sinh viên, gồm các thông tin: Họ tên sinh viên, Mã khoa, Tên môn học, Điểm thi, loại. Trong đó, Loại sẽ là Giỏi nếu Điềm > 8, từ 6-8 thì Loại là Khá, và nhỏ hơn 6 thì lại là Trung Bình

Bài 3: Tính toán thống kê dữ liệu

1. Cho biết điểm trung bình điểm thi theo từng môn, gồm các các thông tin: Mã môn, Tên môn và Trung bình điểm thi

Code:

select 
	_ketqua.MaMH
	,_monhoc.TenMH
	,avg(_ketqua.diem) as DiemTrungBinhthi
from 
	ketqua _ketqua 
	inner join MonHoc _monhoc on _ketqua.MaMH = _monhoc.MaMH
group by _ketqua.MaMH,_monhoc.TenMH

Màn hình kết quả:

Bài 33 Lab4 Truy vẫn Dữ liệu

2. Danh sách số môn thi của từng Sinh viên, gồm các thông tin: Họ và tên Sinh viên, Tên khoa, Tổng số môn thi

Code:

select 
	_sinhvien.HoSV + ' ' + _sinhvien.TenSV as HovaTen
	,_khoa.TenKH
into #BangTam1
from 
	sinhvien _sinhvien
	inner join Ketqua _ketqua on _ketqua.MaSV = _sinhvien.MaSV
	inner join Monhoc _monhoc on _monhoc.MaMH = _ketqua.MaMH
	inner join Khoa _khoa on _khoa.MaKH = _sinhvien.MaKH
select 
	hovaten
	,TenKH
	,count(hovaten) as Tongmonthi
from #BangTam1
group by HovaTen, TenKH
drop table #BangTam1

Màn hình kết quả:

Bài 33 Lab4 Truy vẫn Dữ liệu

NOTE - Anh xem kỹ lại tý nhá:

Cảm giác chỗ này có gì đó sai sai, Trong bảng Sinh viên tận 15 chú mà sao kết quả thì ra có 8 sinh viên. Hức, làm mình cứ loay hoay cứ tưởng câu query của mình bị sai chỗ logic inner join, right join hay left join

Để cho chắc ăn; đầu tiên mình sẽ kiểm tra bảng KetQua.

Thì cho ra 34 chú có Kết quả thi. 

Bài 33 Lab4 Truy vẫn Dữ liệu
Dữ liệu bảng Kết quả

Như vậy xem lại bảng query phía trên; nếu cộng tổng Tongmonthi: 

Bài 33 Lab4 Truy vẫn Dữ liệu
Vậy thì 34 là chuẩn rồi

Vậy thì 34 là chuẩn rồi!

Chốt lại có mấy chú Sinh viên bỏ thi :D

3. Tổng điểm của từng sinh viên, gồm các thông tin: Tên sinh viên, Tên Khoa, Phái, Tổng điểm thi

Code:

select
	sv.MaSV
	,sv.TenSV
	,case Phai
		when '1' then N'Nam'
		when '0' then N'Nữ'
	end
	as N'Phai'
	,_khoa.TenKH
	,kq.Diem
into #Tongdiem_Temp
from sinhvien sv
inner join Ketqua kq on kq.MaSV = sv.MaSV
inner join Khoa _khoa on _khoa.MaKH = sv.MaKH
select 
	TenSV
	,Phai
	,TenKH
	,Sum(Diem) as TongDiem
from #Tongdiem_Temp
group by masv, tensv,phai, TenKh	
drop table #Tongdiem_Temp	

Màn hình kết quả:

Bài 33 Lab4 Truy vẫn Dữ liệu
Kết quả bài 3

4. Cho biết tổng số sinh viên ở mỗi khoa, gồm các thông tin: Tên khoa, Tổng số sinh viên

5. Cho biết điểm cao nhất của mỗi sinh viên, gồm thông tin: Họ tên sinh viên, Điểm

6. Thông tin của môn học só tiết nhiều nhất: Tên môn học, số tiết

7. Cho biết học bổng cao nhất của từng khoa, gồm: Mã khoa, Tên Khoa, Học bổng cao nhất

8. Cho biết điểm cao nhất của mỗi môn, gồm: Tên môn, điểm cao nhất

9. Thống kê số sinh viên học của từng môn, thông tin gồm: Mã môn, Tên môn, Số sinh viên đang học

10. Cho biết môn nào có điểm thi cao nhất, gồm các thông tin: Tên môn, số tiết, Tên sinh viên, điểm

11. ..

Bài 4: Sử dụng tham số trong truy vấn

1. Cho biết danh sách những sinh viên của một khoa: Mã sinh viên, họ tên sinh viên, giới tính, tên khoa. Trong đó: Giá trị mã khoa cần xem danh sách sinh viên sẽ được người dùng nhập khi thực thi câu truy vấn

Code: 

CREATE PROCEDURE [dbo].[SinhVien_GetByKhoa]
	@MaKH nvarchar(2)
AS
select 
	_sinhvien.MaSV
	,_sinhvien.HoSV + ' ' + _sinhvien.TenSV as HovaTenSinhVien
	,case _sinhvien.Phai
		when '1' then N'Nam'
		when '0' then N'Nữ'
	end
	as N'Giới tính'
	,_khoa.TenKH
from sinhvien _sinhvien
	inner join Khoa _khoa on _khoa.MaKH = _sinhvien.MaKH
where 
	@MaKH = _sinhvien.MaKH

Màn hình kết quả:

Chúng ta sẽ sử dụng việc gọi Procedure theo cấu trúc như sau; Ví dụ Lấy danh sách Sinh viên theo khoa có mã là TH

exec SinhVien_GetByKhoa 'TH'
Bài 33 Lab4 Truy vẫn Dữ liệu
Kết quả bài 1

2. Liệt kê danh sách sinh viên có điểm môn Cơ sở dữ liệu lớn hơn một giá trị bất kỳ do người dùng sử dụng nhập vào khi thực thi câu truy vấn, thông tin gồm: Mã sinh viên, Họ tên sinh viên, Tên môn, Điểm

 

3. Cho biết kết quả thi của các sinh viên theo môn, tên môn cần xem kết quả sẽ được nhập vào khi thực thi câu truy vấn. Thông tin hiện thị: Mã Sinh viên, tên Khoa, tên Môn, Điểm

.....

Nói chung mấy cái này làm nhiều thì quen; Nhưng nếu các bạn thích làm về Data thì mình khuyên đá thêm cả mảng python ; Tại sao lại thế  bởi python nó cực mạnh trong mấy khoản này và mình đã trực tiếp trải nghiệm;

Với khoản query data đã là siêu nhanh rồi (tầm 500K bản ghi thì muỗi)

Khoản tính toán thì vô đối

Khoản maping; vẽ biểu đồ; phân tích thì đến thời điểm này mình đánh giá python khá OK. 

Chắc chỉ cần nắm rõ pandas, numpy; Matplotlib; seaborn... là OK

Mình sẽ làm 1 bài Từ database mẫu này bằng python để các bạn tham khảo! Viết thẳng trên colab ;

Còn đây https://colab.research.google.com/github/teticio/aventuras-con-textos là một số bài mẫu với data có sẵn để các bạn xem trước

Và đây https://colab.research.google.com/notebooks/welcome.ipynb?hl=vi là một số bài học cơ bản (Tiếng việt luôn cho các bạn dễ đọc)