SlideShare a Scribd company logo
---Bài số 1: Viết hàm xếp loại dựa vào điểm
CREATE FUNCTION XEPLOAI (@Diem numeric(4,1)) RETURNS nvarchar(10)
AS
BEGIN
DECLARE @xl nvarchar(10)
SET @xl=CASE
WHEN @Diem>=8 THEN N'Giỏi'
WHEN @Diem>=7 THEN N'Khá'
WHEN @Diem>=5 THEN N'Trung bình'
ELSE N'Yếu'
END
RETURN @xl
END
---Ứng dụng: Hiển thị danh sách gồm: MaSV, DiemTBC, Xếp Loại của mỗi sinh viên và xuất ra bảng mới tên là DIEMTBC.
SELECT MaSV, SUM(DiemHP*Sodvht)/SUM(Sodvht) AS DiemTBC, dbo.XEPLOAI(SUM(DiemHP*Sodvht)/SUM(Sodvht)
AS ‘Xếp loại’IN TO DIEMTBC
FROM DMHOCPHAN INNER JOIN DIEMHP ON DMHOCPHAN.MaHP=DIEMHP.MaHP
GROUP BY MaSV
Bài số 4: Các dạng hàm liên quan đến tính toán trong CSDL
---1. Viết hàm tính điểm trung bình chung của sinh viên có mã chỉ định ở học kỳ bất kỳ.
1. CREATE FUNCTION DIEM_SV(@MaSV varchar(11),@HocKy char(2)) RETURNS numeric(4,1)
BEGIN
DECLARE @DiemTBC numeric(4,1)
IF NOT EXISTS (SELECT * FROM DIEMHP WHERE MaSV=@MaSV)
RETURN 0
ELSE
SET @DiemTBC=(
SELECT SUM(DiemHP*Sodvht)/SUM(Sodvht)
FROM DMHOCPHAN INNER JOIN DIEMHP ON DMHOCPHAN.MaHP=DIEMHP.MaHP
WHERE HocKy=@HocKy AND MaSV=@MaSV)
RETURN @DiemTBC
END
Thực hiện hàm
PRINT dbo.DIEM_SV(‘001’,1)
SELECT MaSV, HoTen, dbo.DIEM_SV(MaSV,1) FROM SINHVIEN
DẠNG 2: THỦTỤC
DẠNG BÀI 1: Tạo thủ tuc cập nhật, bổ sung , xoá dữ liệu.
---Bài số 1: Viết chương trình tính điểm trung bình chung theo từng học kỳ với mã lớp chỉ định.
Lời giải
CREATE PROCEDURE TinhDTBC
@HocKy char(3),@MaLop varchar(10) AS IF NOT EXISTS (SELECT * FROM SINHVIEN WHERE MaLop=@MaLop)
BEGIN
PRINT N'Lớp này không có sinh viên'
RETURN -1
END
SELECT HocKy, SINHVIEN.MaSV, HoTen,
SUM(DiemHP*Sodvht)/SUM(Sodvht) AS diemTBC
FROM DIEMHP
INNER JOIN DMHOCPHAN ON DIEMHP.MaHP=DMHOCPHAN.MAHP
INNER JOIN SINHVIEN ON SINHVIEN.MaSV=DIEMHP.MaSV
WHERE MaLop=@MaLop AND HocKy=@HocKy
GROUP BY HocKy, SINHVIEN.MaSV, HoTen
ORDER BY HocKy
GO
Thực hiện gọi thủ tục
EXEC TinhDTBC '1', 'CT12'
DẠNG 3: CON TRỎ
---Bài số 1: Tạo thủ tục đánh Số báo danh theo từng lớp chỉ định.
Trước hết thêm cột SBD vào bảng SINHVIEN
ALTER TABLE SINHVIEN
ADD SBD varchar(4)
Lời giải
CREATE PROCEDURE DanhSBD @MaLop varchar(5)
AS
DECLARE cur_SBD CURSOR
FOR SELECT MaSV
FROM SINHVIEN WHERE MaLop=@MaLop
ORDER BY MaLop, dbo.TACHTEN(HoTen)
OPEN cur_SBD
DECLARE @MaSV varchar(5),@i int
FETCH NEXT FROM cur_SBD INTO @MaSV
SET @i=1
WHILE @@fetch_status = 0
BEGIN
UPDATE SINHVIEN
SET SBD=RIGHT('0000'+LTRIM(STR(@i)),4)
WHERE MaSV=@MaSV
FETCH NEXT FROM cur_SBD INTO @MaSV
SET @i=@i+1
END
CLOSE cur_SBD
DEALLOCATE cur_SBD
Go
DẠNG 1: Tạo bẫy lỗi INSERT
---Bài số 1: Tạo một Trigger để kiểm tra tính hợp lệ của dữ liệu được nhập vào một bảng SINHVIEN là dữ liệu MaSV là không rỗng.
Lời giải
CREATE TRIGGER INSERTSINHVIEN
ON SINHVIEN
FOR INSERT
AS
IF ((SELECT MaSV FROM INSERTED) = '')
BEGIN
PRINT N'Mã sinh viên phải được nhập'
ROLLBACK TRANSACTION
END
---Bài số 2: Thực hiện việc kiểm tra rằng buộc khoá ngoại trong bảng SINHVIEN là mã lớp phải tồn tại trong bảng DMLOP.
Lời giải
CREATE TRIGGER SV_INSERT
ON SINHVIEN
FOR INSERT
AS
IF NOT EXISTS(SELECT * FROM DMLOP, INSERTED WHERE DMLOP.MaLop=INSERTED.MaLop)
BEGIN
PRINT N'Mã lớp không có trong danh mục'
ROLLBACK TRANSACTION
END
DẠNG 3: Bẫy lỗi UPDATE
---Bài số 1: Tạo một Trigger kiểm tra điều kiện cho cột Điểm là <=10
Lời giải
CREATE TRIGGER DiemUPDATE
ON DIEMHP
FOR UPDATE
AS
IF ((SELECT DiemHP FROM INSERTED) > 10)
BEGIN
PRINT N'Nhập lại điểm <=10'
ROLLBACK TRANSACTION
END
CAC HAM CO BAN
-- 1. sum
SELECT top 10* FROM tblHanghoa
SELECT sum(hh_soton) as soton FROM tblHanghoa
-- 2. avg
SELECT avg(HH_GIANHAP) as gianhaptrungbinh FROM tblHanghoa
-- ==> tinh gia trij hang ton kho
-- ton * giatrungbinh
SELECT sum(hh_soton) * avg(HH_GIANHAP) as tienhangtonkho FROM tblHanghoa
-- 3. count
SELECT count(hh_id) FROM tblHanghoa
-- SELECT * FROM tblNhomHanghoa
-- đếm số lượng nhóm hàng hóa được sử dụng trong bảng tblhanghoa
-- sử dụng DISTINCT
SELECT count(distinct hh_nhh_id) soluong FROM tblHanghoa
SELECT distinct hh_nhh_id FROM tblHanghoa
-- đếm số lượng hàng hóa trong 1 nhóm , dùng group by
SELECT hh_nhh_id , count(hh_nhh_id) soluong FROM tblHanghoa group by hh_nhh_id
--- Lưu ý: khi dùng sum, avg, count, nếu có các trường khác trong câu lệnh SELECT ===> các trường ko có
hàm đi kèm ==> toàn bộ đặt sau group by (mỗi trường cách nhau bởi dấu phẩy)
SELECT (SELECT nhh_ten FROM tblNhomHanghoa WHERE nhh_id = hh_nhh_id) tennhom
, count(hh_nhh_id) soluong
, sum(hh_soton) tongsotoncuanhom
FROM tblHanghoa group by hh_nhh_id
-- 4. min => lấy giá trị nhỏ nhất, max: giá trị lớn nhất
SELECT (SELECT hh_ma FROM tblhanghoa WHERE hh_giaban = ), min (hh_Giaban), max(hh_Giaban) FROM tblHanghoa
-- cần lấy các nhóm hàng hóa có số tồn từ < 2000 trở lên
SELECT (SELECT nhh_ten FROM tblNhomHanghoa WHERE nhh_id = hh_nhh_id) tennhom
, count(hh_nhh_id) soluong
, sum(hh_soton) tongsotoncuanhom
FROM tblHanghoa group by hh_nhh_id having sum(hh_soton) <2000
-- khồng dùng having, có thể dùng bảng tạm
SELECT * FROM (SELECT (SELECT nhh_ten FROM tblNhomHanghoa WHERE nhh_id = hh_nhh_id) tennhom
, count(hh_nhh_id) soluong
, sum(hh_soton) tongsotoncuanhom
FROM tblHanghoa group by hh_nhh_id
) t1 WHERE tongsotoncuanhom<2000
-- 5. tạo trường tự tăng ở đầu ra
-- identity(int, 1,1)
-- cách 1:
SELECT ROW_NUMBER() OVER(ORDER BY tennhom ASC) AS thutu, *
FROM (SELECT (SELECT nhh_ten FROM tblNhomHanghoa WHERE nhh_id = hh_nhh_id) tennhom
, count(hh_nhh_id) soluong, sum(hh_soton) tongsotoncuanhomFROM tblHanghoa group by hh_nhh_id
) t1
WHERE tongsotoncuanhom<2000
-- cách 2: dùng 1 bảng tạm, bảng này có trường tự tăng ==> đưa dữ liệu vào bảng tạm -- lấy dữ liệu ra =>
có trường tự tăng
DECLARE @T TABLE (thutu int identity(1,1) , tennhom nvarchar(1000), soluong float, tongton float)
INSERT INTO @t(tennhom, soluong, tongton)
SELECT tennhom, soluong, tongsotoncuanhom FROM (
SELECT (
SELECT nhh_ten FROM tblNhomHanghoa WHERE nhh_id = hh_nhh_id) tennhom
, count(hh_nhh_id) soluong
, sum(hh_soton) tongsotoncuanhom
FROM tblHanghoa group by hh_nhh_id
) t1 WHERE tongsotoncuanhom<2000
SELECT * FROM @t
------------------
-- case when then end
SELECT top 20 hh_ma, hh_ten , HH_ACTIVE
, (case
when HH_ACTIVE =1 then N'Còn sử dụng'
when HH_ACTIVE =2 then N'Đang chờ nhập'
else N'Không được sử dụng'
end) active_ten
FROM tblHanghoa
---------------------
FUNCTION
use IT1PHUT_2021
go
SELECT top 10 * FROM tblHanghoa
-- 1. hàm trả về 1 giá trị
-- giá trị tồn = giá nhập * số tồn
CREATE FUNCTION fnTinhTienTon
(
@soton float, @gianhap float
)
RETURNS float
AS
BEGIN
RETURN @soton * @gianhap
END
GO
CREATE FUNCTION fnTinhTienTon1
(@hhid uniqueidentifier)
RETURNS float
AS
BEGIN
--//code tinh toán
declare @soton float, @gianhap float
SELECT top 1 @soton = hh_soton, @gianhap = hh_gianhap FROM tblHanghoa WHERE hh_id = @hhid
RETURN @soton * @gianhap
END
GO
-- call function return 1 value in SELECT command
SELECT top 10 hh_ma, hh_ten, hh_gianhap, hh_soton
, dbo.fnTinhTienTon(HH_Soton, HH_GIANHAP) giatriton
, dbo.fnTinhTienTon1(hh_id) giatriton
FROM tblHanghoa
-- 2. hàm trả về 1 bảng dữ liệu
-- viết 1 hàm trả về: mã hàng hóa, tên hàng, giá trị tồn với những hàng hóa có số tồn > 10
-- option2, có tham số truyền vào
CREATE FUNCTION fnDanhsachHangTonVaGiatri
(
@soluong float
)
RETURNS @tb TABLE (ma nvarchar(1000), ten nvarchar(1000), giatriton float)
AS
BEGIN
INSERT INTO @tb (ma, ten, giatriton)
SELECT hh_ma, hh_ten, HH_GIANHAP * HH_Soton FROM tblHanghoa WHERE HH_Soton>@soluong
return;
END
GO
SELECT * FROM dbo.fnDanhsachHangTonVaGiatri (10)
-- Create View
CREATE VIEW [dbo].[View_Employee1]
AS
SELECT IdEmp, LName, FName, PhoneNo, Salary, Addr
FROM dbo.DisEmployee
GO
--
Select * from [dbo].[View_Employee1];
Select * from [dbo].[View_Salary];
SELECT IdEmp, LName, FName, PhoneNo, Salary, Addr
FROM dbo.DisEmployee;
Select * from [dbo].[View_Employee2];
--
DROP VIEW [View_Employee1];
-- View Index
EXEC sp_helpindex 'DisEmployee';
--Select Employee
SELECT IdEmp, LName, FName, PhoneNo, Salary, Addr
FROM dbo.DisEmployee
-- Slect View 1
Select * from [dbo].[View_Employee1];
--View Display
EXEC sp_helptext '[View_Employee1]';
-- Create Table IndexEmployee
CREATE TABLE IndexEmployee
(IdEmp INT,
EmpName nvarchar(100) NOT NULL,
DOB date,
PhoneNo char(12),
Addr nvarchar(50) DEFAULT N'Hà Nội'
);
-- Slect IndexEmployee
SELECT * FROM IndexEmployee;
--
IF OBJECT_ID('Tr_Employee_Under18', 'TR') is not null
drop trigger Tr_Employee_Under18
go
CREATE TRIGGER Tr_Employee_Under18 ON tblEmployee
AFTER INSERT, UPDATE
AS
IF EXISTS(SELECT *
FROM inserted
WHERE (YEAR(GETDATE())-YEAR(empBirthdate))<18
)
BEGIN
RAISERROR('Employee is under 18 years old.We can not sign a contact with him/her.',16,1)
ROLLBACK TRANSACTION
END
go
INSERT INTO tblEmployee(empSSN, empName, empSalary, empBirthdate,depNum, supervisorSSN)
VALUES (30121050378368, N'Nguyễn Văn Tý', 10000, '1987-08-30 00:00:00.000',1, 30121050037);
INSERT INTO tblEmployee(empSSN, empName, empSalary, empBirthdate,depNum, supervisorSSN)
VALUES (3012105037838, N'Nguyễn Văn Tý', 10000, '2010-08-30 00:00:00.000',1, 30121050037);
--
SELECT * FROM tblEmployee WHERE empSSN=30121050378368
Go
--
DELETE FROM tblEmployee WHERE empSSN=3012105037836
Go

More Related Content

Similar to bai in.docx

Bai tapsql1
Bai tapsql1Bai tapsql1
Bai tapsql1
Nghia Tu
 
ORACLE_ch2_SQL.pptx
ORACLE_ch2_SQL.pptxORACLE_ch2_SQL.pptx
ORACLE_ch2_SQL.pptx
QuangTrnMinh18
 
Fortran cơ sở
Fortran cơ sởFortran cơ sở
Fortran cơ sởHajunior9x
 
csdl bai-thuchanh_02
csdl bai-thuchanh_02csdl bai-thuchanh_02
csdl bai-thuchanh_02
kikihoho
 
Bai tap-thuc-hanh-he-quan-tri-csdl
Bai tap-thuc-hanh-he-quan-tri-csdlBai tap-thuc-hanh-he-quan-tri-csdl
Bai tap-thuc-hanh-he-quan-tri-csdl
giang nguyen le
 
Ngon ngu truy van sql
Ngon ngu truy van sqlNgon ngu truy van sql
Ngon ngu truy van sqlPhùng Duy
 
Bài tập CTDL và GT 1
Bài tập CTDL và GT 1Bài tập CTDL và GT 1
Bài tập CTDL và GT 1
Hồ Lợi
 
chuong3-data and analytics in stata.pptx
chuong3-data and analytics in stata.pptxchuong3-data and analytics in stata.pptx
chuong3-data and analytics in stata.pptx
BchTuyn20
 
02 stack queue
02 stack queue02 stack queue
02 stack queuelanheo04
 
Bài 5 : Lập trình với CSDL trong SQL
Bài 5 : Lập trình với CSDL trong SQLBài 5 : Lập trình với CSDL trong SQL
Bài 5 : Lập trình với CSDL trong SQLMasterCode.vn
 
Cơ sở dữ liệu SQL qua các vi du cu the.pptx
Cơ sở dữ liệu SQL qua các vi du cu the.pptxCơ sở dữ liệu SQL qua các vi du cu the.pptx
Cơ sở dữ liệu SQL qua các vi du cu the.pptx
NguynNgcTn10
 
Tip oracle
Tip oracleTip oracle
Tip oracle
Tích Nguyễn
 
Stack &amp; queue
Stack &amp; queueStack &amp; queue
Stack &amp; queue
Kỳ Tôn Thất
 
csdl - buoi7-8-9
csdl - buoi7-8-9csdl - buoi7-8-9
csdl - buoi7-8-9
kikihoho
 
Huong dan 8 o so
Huong dan 8 o soHuong dan 8 o so
Huong dan 8 o so
shjdunglv
 
Note4_ThucHanh.pdf
Note4_ThucHanh.pdfNote4_ThucHanh.pdf
Note4_ThucHanh.pdf
imquang
 

Similar to bai in.docx (20)

Bai tapsql1
Bai tapsql1Bai tapsql1
Bai tapsql1
 
ORACLE_ch2_SQL.pptx
ORACLE_ch2_SQL.pptxORACLE_ch2_SQL.pptx
ORACLE_ch2_SQL.pptx
 
Sql understanding
Sql understandingSql understanding
Sql understanding
 
Fortran cơ sở
Fortran cơ sởFortran cơ sở
Fortran cơ sở
 
csdl bai-thuchanh_02
csdl bai-thuchanh_02csdl bai-thuchanh_02
csdl bai-thuchanh_02
 
Bai tap-thuc-hanh-he-quan-tri-csdl
Bai tap-thuc-hanh-he-quan-tri-csdlBai tap-thuc-hanh-he-quan-tri-csdl
Bai tap-thuc-hanh-he-quan-tri-csdl
 
Ngon ngu truy van sql
Ngon ngu truy van sqlNgon ngu truy van sql
Ngon ngu truy van sql
 
Tablists help
Tablists helpTablists help
Tablists help
 
Bài tập CTDL và GT 1
Bài tập CTDL và GT 1Bài tập CTDL và GT 1
Bài tập CTDL và GT 1
 
chuong3-data and analytics in stata.pptx
chuong3-data and analytics in stata.pptxchuong3-data and analytics in stata.pptx
chuong3-data and analytics in stata.pptx
 
02 stack queue
02 stack queue02 stack queue
02 stack queue
 
Bài 5 : Lập trình với CSDL trong SQL
Bài 5 : Lập trình với CSDL trong SQLBài 5 : Lập trình với CSDL trong SQL
Bài 5 : Lập trình với CSDL trong SQL
 
Cơ sở dữ liệu SQL qua các vi du cu the.pptx
Cơ sở dữ liệu SQL qua các vi du cu the.pptxCơ sở dữ liệu SQL qua các vi du cu the.pptx
Cơ sở dữ liệu SQL qua các vi du cu the.pptx
 
Tip oracle
Tip oracleTip oracle
Tip oracle
 
Php02 ngon nguphp
Php02 ngon nguphpPhp02 ngon nguphp
Php02 ngon nguphp
 
Stack &amp; queue
Stack &amp; queueStack &amp; queue
Stack &amp; queue
 
Excel 2007
Excel 2007Excel 2007
Excel 2007
 
csdl - buoi7-8-9
csdl - buoi7-8-9csdl - buoi7-8-9
csdl - buoi7-8-9
 
Huong dan 8 o so
Huong dan 8 o soHuong dan 8 o so
Huong dan 8 o so
 
Note4_ThucHanh.pdf
Note4_ThucHanh.pdfNote4_ThucHanh.pdf
Note4_ThucHanh.pdf
 

Recently uploaded

BÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docx
BÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docxBÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docx
BÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docx
HngL891608
 
Từ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdf
Từ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdfTừ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdf
Từ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdf
Man_Ebook
 
100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx
100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx
100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx
khanhthy3000
 
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...
Nguyen Thanh Tu Collection
 
DANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdf
DANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdfDANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdf
DANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdf
thanhluan21
 
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
Nguyen Thanh Tu Collection
 
YHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủ
YHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủYHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủ
YHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủ
duyanh05052004
 
trắc nhiệm ký sinh.docxddddddddddddddddd
trắc nhiệm ký sinh.docxdddddddddddddddddtrắc nhiệm ký sinh.docxddddddddddddddddd
trắc nhiệm ký sinh.docxddddddddddddddddd
my21xn0084
 
Văn 7. Truyện ngụ ngôn Rùa và thỏ+ Viết PT nhân vật.docx
Văn 7. Truyện ngụ ngôn Rùa và thỏ+ Viết PT nhân vật.docxVăn 7. Truyện ngụ ngôn Rùa và thỏ+ Viết PT nhân vật.docx
Văn 7. Truyện ngụ ngôn Rùa và thỏ+ Viết PT nhân vật.docx
metamngoc123
 
Biểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang Thiều
Biểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang ThiềuBiểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang Thiều
Biểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang Thiều
lamluanvan.net Viết thuê luận văn
 
bài dự thi chính luận 2024 đảng chọn lọc.docx
bài dự thi chính luận 2024 đảng chọn lọc.docxbài dự thi chính luận 2024 đảng chọn lọc.docx
bài dự thi chính luận 2024 đảng chọn lọc.docx
HiYnThTh
 
[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf
[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf
[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf
NamNguynHi23
 
PLĐC-chương 1 (1).ppt của trường ĐH Ngoại thương
PLĐC-chương 1 (1).ppt của trường  ĐH Ngoại thươngPLĐC-chương 1 (1).ppt của trường  ĐH Ngoại thương
PLĐC-chương 1 (1).ppt của trường ĐH Ngoại thương
hieutrinhvan27052005
 
BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...
BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...
BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...
Nguyen Thanh Tu Collection
 
Halloween vocabulary for kids in primary school
Halloween vocabulary for kids in primary schoolHalloween vocabulary for kids in primary school
Halloween vocabulary for kids in primary school
AnhPhm265031
 
THONG BAO nop ho so xet tuyen TS6 24-25.pdf
THONG BAO nop ho so xet tuyen TS6 24-25.pdfTHONG BAO nop ho so xet tuyen TS6 24-25.pdf
THONG BAO nop ho so xet tuyen TS6 24-25.pdf
QucHHunhnh
 
Smartbiz_He thong MES nganh may mac_2024june
Smartbiz_He thong MES nganh may mac_2024juneSmartbiz_He thong MES nganh may mac_2024june
Smartbiz_He thong MES nganh may mac_2024june
SmartBiz
 

Recently uploaded (17)

BÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docx
BÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docxBÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docx
BÁO CÁO CUỐI KỲ PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG - NHÓM 7.docx
 
Từ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdf
Từ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdfTừ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdf
Từ ngữ về con người và chiến tranh trong Nhật ký Đặng Thùy Trâm.pdf
 
100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx
100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx
100 DẪN CHỨNG NGHỊ LUẬN XÃ HỘiI HAY.docx
 
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 - SÁCH MỚI - FORM BÀI TẬP 2025 (DÙNG CHUNG ...
 
DANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdf
DANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdfDANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdf
DANH SÁCH XÉT TUYỂN SỚM_NĂM 2023_học ba DPY.pdf
 
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
 
YHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủ
YHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủYHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủ
YHocData.com-bộ-câu-hỏi-mô-phôi.pdf đầy đủ
 
trắc nhiệm ký sinh.docxddddddddddddddddd
trắc nhiệm ký sinh.docxdddddddddddddddddtrắc nhiệm ký sinh.docxddddddddddddddddd
trắc nhiệm ký sinh.docxddddddddddddddddd
 
Văn 7. Truyện ngụ ngôn Rùa và thỏ+ Viết PT nhân vật.docx
Văn 7. Truyện ngụ ngôn Rùa và thỏ+ Viết PT nhân vật.docxVăn 7. Truyện ngụ ngôn Rùa và thỏ+ Viết PT nhân vật.docx
Văn 7. Truyện ngụ ngôn Rùa và thỏ+ Viết PT nhân vật.docx
 
Biểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang Thiều
Biểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang ThiềuBiểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang Thiều
Biểu tượng trăng và bầu trời trong tác phẩm của Nguyễn Quang Thiều
 
bài dự thi chính luận 2024 đảng chọn lọc.docx
bài dự thi chính luận 2024 đảng chọn lọc.docxbài dự thi chính luận 2024 đảng chọn lọc.docx
bài dự thi chính luận 2024 đảng chọn lọc.docx
 
[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf
[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf
[NBV]-CHUYÊN ĐỀ 3. GTLN-GTNN CỦA HÀM SỐ (CÓ ĐÁP ÁN CHI TIẾT).pdf
 
PLĐC-chương 1 (1).ppt của trường ĐH Ngoại thương
PLĐC-chương 1 (1).ppt của trường  ĐH Ngoại thươngPLĐC-chương 1 (1).ppt của trường  ĐH Ngoại thương
PLĐC-chương 1 (1).ppt của trường ĐH Ngoại thương
 
BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...
BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...
BÀI TẬP BỔ TRỢ TIẾNG ANH I-LEARN SMART WORLD 9 CẢ NĂM CÓ TEST THEO UNIT NĂM H...
 
Halloween vocabulary for kids in primary school
Halloween vocabulary for kids in primary schoolHalloween vocabulary for kids in primary school
Halloween vocabulary for kids in primary school
 
THONG BAO nop ho so xet tuyen TS6 24-25.pdf
THONG BAO nop ho so xet tuyen TS6 24-25.pdfTHONG BAO nop ho so xet tuyen TS6 24-25.pdf
THONG BAO nop ho so xet tuyen TS6 24-25.pdf
 
Smartbiz_He thong MES nganh may mac_2024june
Smartbiz_He thong MES nganh may mac_2024juneSmartbiz_He thong MES nganh may mac_2024june
Smartbiz_He thong MES nganh may mac_2024june
 

bai in.docx

  • 1. ---Bài số 1: Viết hàm xếp loại dựa vào điểm CREATE FUNCTION XEPLOAI (@Diem numeric(4,1)) RETURNS nvarchar(10) AS BEGIN DECLARE @xl nvarchar(10) SET @xl=CASE WHEN @Diem>=8 THEN N'Giỏi' WHEN @Diem>=7 THEN N'Khá' WHEN @Diem>=5 THEN N'Trung bình' ELSE N'Yếu' END RETURN @xl END ---Ứng dụng: Hiển thị danh sách gồm: MaSV, DiemTBC, Xếp Loại của mỗi sinh viên và xuất ra bảng mới tên là DIEMTBC. SELECT MaSV, SUM(DiemHP*Sodvht)/SUM(Sodvht) AS DiemTBC, dbo.XEPLOAI(SUM(DiemHP*Sodvht)/SUM(Sodvht) AS ‘Xếp loại’IN TO DIEMTBC FROM DMHOCPHAN INNER JOIN DIEMHP ON DMHOCPHAN.MaHP=DIEMHP.MaHP GROUP BY MaSV Bài số 4: Các dạng hàm liên quan đến tính toán trong CSDL ---1. Viết hàm tính điểm trung bình chung của sinh viên có mã chỉ định ở học kỳ bất kỳ. 1. CREATE FUNCTION DIEM_SV(@MaSV varchar(11),@HocKy char(2)) RETURNS numeric(4,1) BEGIN DECLARE @DiemTBC numeric(4,1) IF NOT EXISTS (SELECT * FROM DIEMHP WHERE MaSV=@MaSV) RETURN 0 ELSE SET @DiemTBC=( SELECT SUM(DiemHP*Sodvht)/SUM(Sodvht) FROM DMHOCPHAN INNER JOIN DIEMHP ON DMHOCPHAN.MaHP=DIEMHP.MaHP WHERE HocKy=@HocKy AND MaSV=@MaSV) RETURN @DiemTBC END Thực hiện hàm PRINT dbo.DIEM_SV(‘001’,1) SELECT MaSV, HoTen, dbo.DIEM_SV(MaSV,1) FROM SINHVIEN DẠNG 2: THỦTỤC DẠNG BÀI 1: Tạo thủ tuc cập nhật, bổ sung , xoá dữ liệu. ---Bài số 1: Viết chương trình tính điểm trung bình chung theo từng học kỳ với mã lớp chỉ định. Lời giải CREATE PROCEDURE TinhDTBC @HocKy char(3),@MaLop varchar(10) AS IF NOT EXISTS (SELECT * FROM SINHVIEN WHERE MaLop=@MaLop) BEGIN PRINT N'Lớp này không có sinh viên' RETURN -1 END SELECT HocKy, SINHVIEN.MaSV, HoTen, SUM(DiemHP*Sodvht)/SUM(Sodvht) AS diemTBC FROM DIEMHP INNER JOIN DMHOCPHAN ON DIEMHP.MaHP=DMHOCPHAN.MAHP INNER JOIN SINHVIEN ON SINHVIEN.MaSV=DIEMHP.MaSV WHERE MaLop=@MaLop AND HocKy=@HocKy GROUP BY HocKy, SINHVIEN.MaSV, HoTen ORDER BY HocKy GO Thực hiện gọi thủ tục EXEC TinhDTBC '1', 'CT12'
  • 2. DẠNG 3: CON TRỎ ---Bài số 1: Tạo thủ tục đánh Số báo danh theo từng lớp chỉ định. Trước hết thêm cột SBD vào bảng SINHVIEN ALTER TABLE SINHVIEN ADD SBD varchar(4) Lời giải CREATE PROCEDURE DanhSBD @MaLop varchar(5) AS DECLARE cur_SBD CURSOR FOR SELECT MaSV FROM SINHVIEN WHERE MaLop=@MaLop ORDER BY MaLop, dbo.TACHTEN(HoTen) OPEN cur_SBD DECLARE @MaSV varchar(5),@i int FETCH NEXT FROM cur_SBD INTO @MaSV SET @i=1 WHILE @@fetch_status = 0 BEGIN UPDATE SINHVIEN SET SBD=RIGHT('0000'+LTRIM(STR(@i)),4) WHERE MaSV=@MaSV FETCH NEXT FROM cur_SBD INTO @MaSV SET @i=@i+1 END CLOSE cur_SBD DEALLOCATE cur_SBD Go DẠNG 1: Tạo bẫy lỗi INSERT ---Bài số 1: Tạo một Trigger để kiểm tra tính hợp lệ của dữ liệu được nhập vào một bảng SINHVIEN là dữ liệu MaSV là không rỗng. Lời giải CREATE TRIGGER INSERTSINHVIEN ON SINHVIEN FOR INSERT AS IF ((SELECT MaSV FROM INSERTED) = '') BEGIN PRINT N'Mã sinh viên phải được nhập' ROLLBACK TRANSACTION END ---Bài số 2: Thực hiện việc kiểm tra rằng buộc khoá ngoại trong bảng SINHVIEN là mã lớp phải tồn tại trong bảng DMLOP. Lời giải CREATE TRIGGER SV_INSERT ON SINHVIEN FOR INSERT AS IF NOT EXISTS(SELECT * FROM DMLOP, INSERTED WHERE DMLOP.MaLop=INSERTED.MaLop) BEGIN PRINT N'Mã lớp không có trong danh mục' ROLLBACK TRANSACTION END DẠNG 3: Bẫy lỗi UPDATE ---Bài số 1: Tạo một Trigger kiểm tra điều kiện cho cột Điểm là <=10 Lời giải CREATE TRIGGER DiemUPDATE ON DIEMHP FOR UPDATE AS IF ((SELECT DiemHP FROM INSERTED) > 10) BEGIN PRINT N'Nhập lại điểm <=10' ROLLBACK TRANSACTION END
  • 3. CAC HAM CO BAN -- 1. sum SELECT top 10* FROM tblHanghoa SELECT sum(hh_soton) as soton FROM tblHanghoa -- 2. avg SELECT avg(HH_GIANHAP) as gianhaptrungbinh FROM tblHanghoa -- ==> tinh gia trij hang ton kho -- ton * giatrungbinh SELECT sum(hh_soton) * avg(HH_GIANHAP) as tienhangtonkho FROM tblHanghoa -- 3. count SELECT count(hh_id) FROM tblHanghoa -- SELECT * FROM tblNhomHanghoa -- đếm số lượng nhóm hàng hóa được sử dụng trong bảng tblhanghoa -- sử dụng DISTINCT SELECT count(distinct hh_nhh_id) soluong FROM tblHanghoa SELECT distinct hh_nhh_id FROM tblHanghoa -- đếm số lượng hàng hóa trong 1 nhóm , dùng group by SELECT hh_nhh_id , count(hh_nhh_id) soluong FROM tblHanghoa group by hh_nhh_id --- Lưu ý: khi dùng sum, avg, count, nếu có các trường khác trong câu lệnh SELECT ===> các trường ko có hàm đi kèm ==> toàn bộ đặt sau group by (mỗi trường cách nhau bởi dấu phẩy) SELECT (SELECT nhh_ten FROM tblNhomHanghoa WHERE nhh_id = hh_nhh_id) tennhom , count(hh_nhh_id) soluong , sum(hh_soton) tongsotoncuanhom FROM tblHanghoa group by hh_nhh_id -- 4. min => lấy giá trị nhỏ nhất, max: giá trị lớn nhất SELECT (SELECT hh_ma FROM tblhanghoa WHERE hh_giaban = ), min (hh_Giaban), max(hh_Giaban) FROM tblHanghoa -- cần lấy các nhóm hàng hóa có số tồn từ < 2000 trở lên SELECT (SELECT nhh_ten FROM tblNhomHanghoa WHERE nhh_id = hh_nhh_id) tennhom , count(hh_nhh_id) soluong , sum(hh_soton) tongsotoncuanhom FROM tblHanghoa group by hh_nhh_id having sum(hh_soton) <2000 -- khồng dùng having, có thể dùng bảng tạm SELECT * FROM (SELECT (SELECT nhh_ten FROM tblNhomHanghoa WHERE nhh_id = hh_nhh_id) tennhom , count(hh_nhh_id) soluong , sum(hh_soton) tongsotoncuanhom FROM tblHanghoa group by hh_nhh_id ) t1 WHERE tongsotoncuanhom<2000 -- 5. tạo trường tự tăng ở đầu ra -- identity(int, 1,1) -- cách 1: SELECT ROW_NUMBER() OVER(ORDER BY tennhom ASC) AS thutu, * FROM (SELECT (SELECT nhh_ten FROM tblNhomHanghoa WHERE nhh_id = hh_nhh_id) tennhom , count(hh_nhh_id) soluong, sum(hh_soton) tongsotoncuanhomFROM tblHanghoa group by hh_nhh_id ) t1 WHERE tongsotoncuanhom<2000 -- cách 2: dùng 1 bảng tạm, bảng này có trường tự tăng ==> đưa dữ liệu vào bảng tạm -- lấy dữ liệu ra => có trường tự tăng DECLARE @T TABLE (thutu int identity(1,1) , tennhom nvarchar(1000), soluong float, tongton float) INSERT INTO @t(tennhom, soluong, tongton) SELECT tennhom, soluong, tongsotoncuanhom FROM ( SELECT ( SELECT nhh_ten FROM tblNhomHanghoa WHERE nhh_id = hh_nhh_id) tennhom , count(hh_nhh_id) soluong , sum(hh_soton) tongsotoncuanhom FROM tblHanghoa group by hh_nhh_id ) t1 WHERE tongsotoncuanhom<2000 SELECT * FROM @t
  • 4. ------------------ -- case when then end SELECT top 20 hh_ma, hh_ten , HH_ACTIVE , (case when HH_ACTIVE =1 then N'Còn sử dụng' when HH_ACTIVE =2 then N'Đang chờ nhập' else N'Không được sử dụng' end) active_ten FROM tblHanghoa --------------------- FUNCTION use IT1PHUT_2021 go SELECT top 10 * FROM tblHanghoa -- 1. hàm trả về 1 giá trị -- giá trị tồn = giá nhập * số tồn CREATE FUNCTION fnTinhTienTon ( @soton float, @gianhap float ) RETURNS float AS BEGIN RETURN @soton * @gianhap END GO CREATE FUNCTION fnTinhTienTon1 (@hhid uniqueidentifier) RETURNS float AS BEGIN --//code tinh toán declare @soton float, @gianhap float SELECT top 1 @soton = hh_soton, @gianhap = hh_gianhap FROM tblHanghoa WHERE hh_id = @hhid RETURN @soton * @gianhap END GO -- call function return 1 value in SELECT command SELECT top 10 hh_ma, hh_ten, hh_gianhap, hh_soton , dbo.fnTinhTienTon(HH_Soton, HH_GIANHAP) giatriton , dbo.fnTinhTienTon1(hh_id) giatriton FROM tblHanghoa -- 2. hàm trả về 1 bảng dữ liệu -- viết 1 hàm trả về: mã hàng hóa, tên hàng, giá trị tồn với những hàng hóa có số tồn > 10 -- option2, có tham số truyền vào CREATE FUNCTION fnDanhsachHangTonVaGiatri ( @soluong float ) RETURNS @tb TABLE (ma nvarchar(1000), ten nvarchar(1000), giatriton float) AS BEGIN INSERT INTO @tb (ma, ten, giatriton) SELECT hh_ma, hh_ten, HH_GIANHAP * HH_Soton FROM tblHanghoa WHERE HH_Soton>@soluong return; END GO SELECT * FROM dbo.fnDanhsachHangTonVaGiatri (10)
  • 5. -- Create View CREATE VIEW [dbo].[View_Employee1] AS SELECT IdEmp, LName, FName, PhoneNo, Salary, Addr FROM dbo.DisEmployee GO -- Select * from [dbo].[View_Employee1]; Select * from [dbo].[View_Salary]; SELECT IdEmp, LName, FName, PhoneNo, Salary, Addr FROM dbo.DisEmployee; Select * from [dbo].[View_Employee2]; -- DROP VIEW [View_Employee1]; -- View Index EXEC sp_helpindex 'DisEmployee'; --Select Employee SELECT IdEmp, LName, FName, PhoneNo, Salary, Addr FROM dbo.DisEmployee -- Slect View 1 Select * from [dbo].[View_Employee1]; --View Display EXEC sp_helptext '[View_Employee1]'; -- Create Table IndexEmployee CREATE TABLE IndexEmployee (IdEmp INT, EmpName nvarchar(100) NOT NULL, DOB date, PhoneNo char(12), Addr nvarchar(50) DEFAULT N'Hà Nội' ); -- Slect IndexEmployee SELECT * FROM IndexEmployee; -- IF OBJECT_ID('Tr_Employee_Under18', 'TR') is not null drop trigger Tr_Employee_Under18 go CREATE TRIGGER Tr_Employee_Under18 ON tblEmployee AFTER INSERT, UPDATE AS IF EXISTS(SELECT * FROM inserted WHERE (YEAR(GETDATE())-YEAR(empBirthdate))<18 ) BEGIN RAISERROR('Employee is under 18 years old.We can not sign a contact with him/her.',16,1) ROLLBACK TRANSACTION END go INSERT INTO tblEmployee(empSSN, empName, empSalary, empBirthdate,depNum, supervisorSSN) VALUES (30121050378368, N'Nguyễn Văn Tý', 10000, '1987-08-30 00:00:00.000',1, 30121050037); INSERT INTO tblEmployee(empSSN, empName, empSalary, empBirthdate,depNum, supervisorSSN) VALUES (3012105037838, N'Nguyễn Văn Tý', 10000, '2010-08-30 00:00:00.000',1, 30121050037); -- SELECT * FROM tblEmployee WHERE empSSN=30121050378368 Go -- DELETE FROM tblEmployee WHERE empSSN=3012105037836 Go