/*auto readmore*/ /*auto readmore*/ /* an hien script*/ // an hien password /*an hien ma chuong trinh cong tru */ /*Scrollbox thanh cuon*/ /***Nhung CODE***/ /* dòng xanh dòng trắng */ /* https://cdnjs.com/libraries/prism lay thu vien, can vao ten file ma goi 1. copy link vao vi du:prism-python.min.js 2. ten ngon nua la python */ /*=== New posts ===*/ /*header slider*/ /*=== bai viet lien quan===*/ /*===tabcode===*/

[Database-Tự Học SQL] COM2034_SQL Server - Lab 4: Điều Kiện & Vòng Lặp - P1

NỘI DUNG:  Tìm hiểu chủ đề IF ... ELSE, IIF, CASE 

Bài 1:

  • Viết câu truy vấn đếm số lượng nhân viên trong từng phòng ban, nếu số lượng nhân viên nhỏ hơn 3  thì hiển thị “Thiếu nhân viên”, ngược lại <5 hiển thị “Đủ Nhan Vien”, ngược lại hiển thị”Đông nhân viên”
  • Viết câu truy vấn hiển thị TenNV và thêm cột thuế dựa vào mức lương: trong khoảng 0 and 25000 thì Thuế= LUONG*0.1, trong khoảng 25000 and 30000 thì LUONG*0.12, trong khoảng 30000 and 40000 thì LUONG *0.15, trong khoảng 40000 and 50000 thì LUONG *0.2, còn lại LUONG*0.25

Bài 2:

Sử dụng cơ sở dữ liệu QLDA. Thực hiện các câu truy vấn sau, sử dụng if…else và case

Viết chương trình xem xét có tăng lương cho nhân viên hay không. Hiển thị cột thứ 1 là TenNV, cột thứ 2 nhận giá trị

  • “TangLuong” nếu lương hiện tại của nhân viên nhở hơn trung bình lương trong phòng mà nhân viên đó đang làm việc. 
  • “KhongTangLuong “nếu lương hiện tại của nhân viên lớn hơn trung bình lương trong phòng mà nhân viên đó đang làm việc.

Viết chương trình phân loại nhân viên dựa vào mức lương.

  • Nếu lương nhân viên nhỏ hơn trung bình lương mà nhân viên đó đang làm việc thì xếp loại “nhanvien”, ngược lại xếp loại “truongphong”

Viết chương trình hiển thị TenNV tùy vào cột phái của nhân viên, 

  • nếu phái là Nữ thì ghi Ms. + TENNV, 
  • Nam thì ghi Mr. + TENNV, 
  • Ngược lại Khong_ro + TENNV

Viết chương trình tính thuế mà nhân viên phải đóng theo công thức:

  • 0<luong<25000 thì đóng 10% tiền lương
  • 25000<luong<30000 thì đóng 12% tiền lương
  • 30000<luong<40000 thì đóng 15% tiền lương
  • 40000<luong<50000 thì đóng 20% tiền lương
  • Luong>50000 đóng 25% tiền lương


THỰC HIỆN:

Bài 1:

  • Viết câu truy vấn đếm số lượng nhân viên trong từng phòng ban, nếu số lượng nhân viên nhỏ hơn 3  thì hiển thị “Thiếu nhân viên”, ngược lại <5 hiển thị “Đủ Nhan Vien”, ngược lại hiển thị”Đông nhân viên”


Đếm nhân viên theo từng phòng ban
-- thực hiện đếm nhân viên theo từng phòng ban trước
SELECT NHANVIEN.PHG
	, COUNT(NHANVIEN.MANV) AS 'So_nv'
FROM NHANVIEN
GROUP BY NHANVIEN.PHG

Dùng IFF thực hiện theo yêu cầu đề bài
SELECT NHANVIEN.PHG
	, COUNT(NHANVIEN.MANV) AS 'So_nv'
	, 'Ghi Chu' = IIF(COUNT(NHANVIEN.MANV) < 3, 'thieu -> can tuyen them',
					  IIF(COUNT(NHANVIEN.MANV) < 5, 'Du nhan vien', 'Dong nhan vien')
					 )
FROM NHANVIEN
GROUP BY NHANVIEN.PHG

Dùng CASE
--CASE
SELECT PHONGBAN.TENPHG
	, COUNT(NHANVIEN.PHG) So_luong_nhan_vien
	, Ghi_Chu = CASE 
		WHEN COUNT(NHANVIEN.PHG) < 3  THEN 'Thieu nhan vien'
		WHEN COUNT(NHANVIEN.PHG) < 5  THEN 'Du nhan vien'
	ELSE 'Dong nhan vien'
	END
FROM NHANVIEN 
	INNER JOIN PHONGBAN ON PHONGBAN.MAPHG = NHANVIEN.PHG
GROUP BY PHONGBAN.TENPHG

  • Viết câu truy vấn hiển thị TenNV và thêm cột thuế dựa vào mức lương: 
- Trong khoảng 0 and 25000 thì Thuế= LUONG*0.1, 
- Trong khoảng 25000 and 30000 thì LUONG*0.12, 
- Trong khoảng 30000 and 40000 thì LUONG *0.15, 
- Trong khoảng 40000 and 50000 thì LUONG *0.2, 
- Còn lại LUONG*0.25

SELECT TENNV, LUONG, 
 THUE = CASE
			WHEN LUONG BETWEEN 0 AND 25000 THEN LUONG * 0.1
			WHEN LUONG BETWEEN 25000 AND 30000 THEN LUONG * 0.12
			WHEN LUONG BETWEEN 30000 AND 40000 THEN LUONG * 0.15
			WHEN LUONG BETWEEN 40000 AND 50000 THEN LUONG * 0.2
			ELSE LUONG * 0.25 
		END
FROM NHANVIEN


Bài 2:

Sử dụng cơ sở dữ liệu QLDA. Thực hiện các câu truy vấn sau, sử dụng if…else và case

Viết chương trình xem xét có tăng lương cho nhân viên hay không. Hiển thị cột thứ 1 là TenNV, cột thứ 2 nhận giá trị

  • “TangLuong” nếu lương hiện tại của nhân viên nhở hơn trung bình lương trong phòng mà nhân viên đó đang làm việc. 
  • “KhongTangLuong “nếu lương hiện tại của nhân viên lớn hơn trung bình lương trong phòng mà nhân viên đó đang làm việc.

Mức lương trung bình mỗi phòng ban
-- Mức lương trung bình mỗi phòng ban
SELECT NHANVIEN.PHG
	, AVG(NHANVIEN.LUONG)
FROM NHANVIEN
GROUP BY NHANVIEN.PHG


Lưu kết quả vào biến bảng (1)
-- Lưu kết quả vào biến bảng (1)
DECLARE @cau_1a TABLE (ma_phong INT, luong_TB FLOAT)
INSERT INTO @cau_1a
	SELECT NHANVIEN.PHG
		, AVG(NHANVIEN.LUONG)
	FROM NHANVIEN
	GROUP BY NHANVIEN.PHG

Thực hiện theo yêu cầu đề bài - Dùng IIF
-- thực hiện theo yêu cầu đề bài (phải kết nối bảng (1) với bảng nhân viên) 
-- dùng IIF

SELECT 
	NHANVIEN.TENNV
	, NHANVIEN.LUONG AS Luong_HienTai
	, Ghi_Chu_IIF = IIF (NHANVIEN.LUONG < bang_LTB.luong_TB, 'Tang luong', 'KHONG TANG luong')
FROM NHANVIEN
	INNER JOIN @cau_1a AS bang_LTB ON NHANVIEN.PHG = bang_LTB.ma_phong


Thực hiện theo yêu cầu đề bài - Dùng CASE
-- dùng CASE
SELECT 
	NHANVIEN.TENNV
	, NHANVIEN.LUONG AS Luong_HienTai
	, Ghi_Chu_CASE = CASE
		WHEN (NHANVIEN.LUONG < bang_LTB.luong_TB) THEN 'Tang luong'		
		ELSE 'KHONG TANG luong'
	END
FROM NHANVIEN
	INNER JOIN @cau_1a AS bang_LTB ON NHANVIEN.PHG = bang_LTB.ma_phong


Viết chương trình phân loại nhân viên dựa vào mức lương.

  • Nếu lương nhân viên nhỏ hơn trung bình lương mà nhân viên đó đang làm việc thì xếp loại “nhanvien”, ngược lại xếp loại “truongphong”

Mức lương trung bình mỗi phòng ban
-- Mức lương trung bình mỗi phòng ban
SELECT NHANVIEN.PHG
	, AVG(NHANVIEN.LUONG)
FROM NHANVIEN
GROUP BY NHANVIEN.PHG


Lưu kết quả vào biến bảng (1)
-- Lưu kết quả vào biến bảng (1)
DECLARE @cau_1b TABLE (ma_phong INT, luong_TB FLOAT)
INSERT INTO @cau_1b
	SELECT NHANVIEN.PHG
		, AVG(NHANVIEN.LUONG)
	FROM NHANVIEN
	GROUP BY NHANVIEN.PHG

Thực hiện theo yêu cầu đề bài
-- thực hiện theo yêu cầu đề bài (phải kết nối bảng (1) với bảng nhân viên) 
SELECT 
	NHANVIEN.TENNV
	, NHANVIEN.LUONG AS Luong_HienTai
	, Ghi_Chu_IIF = IIF (NHANVIEN.LUONG < bang_LTB.luong_TB, 'Nhan Vien', 'Truong Phong')
FROM NHANVIEN
	INNER JOIN @cau_1b AS bang_LTB ON NHANVIEN.PHG = bang_LTB.ma_phong

Viết chương trình hiển thị TenNV tùy vào cột phái của nhân viên, 

  • Nếu phái là Nữ thì ghi Ms. + TENNV, 
  • Nam thì ghi Mr. + TENNV, 
  • Ngược lại Khong_ro + TENNV

Simple CASE
-- Simple CASE 
SELECT 'Ten_nhanvien Simple CASE ' = CASE NHANVIEN.PHAI
	WHEN N'Nữ' THEN 'Ms. ' + NHANVIEN.TENNV
	WHEN N'Nam' THEN 'Mr. ' + NHANVIEN.TENNV
	ELSE 'Khong_ro ' + NHANVIEN.TENNV
	END
FROM NHANVIEN

Searched CASE
-- Searched CASE
SELECT 'ten nv' = CASE 
	WHEN NHANVIEN.PHAI LIKE N'Nữ' THEN 'Ms. ' + NHANVIEN.TENNV
	WHEN NHANVIEN.PHAI LIKE N'Nam' THEN 'Mr. ' + NHANVIEN.TENNV
	ELSE 'Khong_ro ' + NHANVIEN.TENNV
	END
FROM NHANVIEN


Viết chương trình tính thuế mà nhân viên phải đóng theo công thức:

  • 0<luong<25000 thì đóng 10% tiền lương
  • 25000<luong<30000 thì đóng 12% tiền lương
  • 30000<luong<40000 thì đóng 15% tiền lương
  • 40000<luong<50000 thì đóng 20% tiền lương
  • Luong>50000 đóng 25% tiền lương


Thực hiện yêu cầu (Searched Case)

SELECT
	NHANVIEN.TENNV
	,NHANVIEN.LUONG
	,'Dong Thue' = CASE
			WHEN NHANVIEN.LUONG between 0 and 25000 THen NHANVIEN.LUONG * 0.1
			WHEN NHANVIEN.LUONG between 25000 and 30000 THen NHANVIEN.LUONG * 0.12
			WHEN NHANVIEN.LUONG between 30000 and 40000 THen NHANVIEN.LUONG * 0.15
			WHEN NHANVIEN.LUONG between 40000 and 50000 THen NHANVIEN.LUONG * 0.20
			ELSE NHANVIEN.LUONG * 0.25
	END
FROM NHANVIEN

NotedCâu hỏi đặt ra ở câu lệnh trên là nếu mức lương 25000 thì thuế sẽ đóng là 10% hay 12% ? => Máy tính sẽ thực hiện từ trên xuống nếu lương 25000 thỏa mản điều kiện đầu nên thuế sẽ đóng là 10% (Thứ tự các câu lệnh trong trường hợp này các bạn cần để ý)


Xong!

No comments:

Post a Comment

/*header slide*/