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
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
Kiểm tra tính ràng buộc của các bảng
- Chọn Database Diagrams --> Bấm chuột phải
- Chọn New Database Diagrams
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
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ả
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ả:
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 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ả
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ả:
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ả:
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ả
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ả:
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ả:
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ả:
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.
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:
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ả:
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'
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)