bai 13 ql nhan vien
CREATE DATABASE QUANLYNHANVIEN
USE QUANLYNHANVIEN
CREATE TABLE PHONG(
MAP CHAR(10) PRIMARY KEY,
TENP CHAR(30) NOT NULL,
DIACHIP CHAR(30),
SDT CHAR(15)
CREATE TABLE NHANVIEN(
MANV CHAR(10) PRIMARY KEY,
TENNV CHAR(40) NOT NULL,
DIACHI CHAR(40),
MAP CHAR(10),
LUONG INT, --LUONG CUA NHAN VIEN--
CONSTRAINT KN_NHANVIEN FOREIGN KEY(MAP) REFERENCES PHONG(MAP)
CREATE TABLE NGOAINGU(
MANN CHAR(10) PRIMARY KEY,
TENN CHAR(30) NOT NULL
CREATE TABLE TDNN( --TRINH DO NGOAI NGU--
MANV CHAR(10),
MANN CHAR(10),
TRINHDO CHAR(30) NOT NULL,
CONSTRAINT KC_TDNN PRIMARY KEY(MANV,MANN),
CONSTRAINT KN_TDNN FOREIGN KEY(MANV) REFERENCES NHANVIEN(MANV),
CONSTRAINT KN1_TDNN FOREIGN KEY(MANN) REFERENCES NGOAINGU(MANN),
--2.TAO VIEW DE TONG HOP THONG TIN VE MOI PHONG HIEN TAI CO BAO NHIEU NHAN VIEN--
CREATE VIEW VD2
AS
SELECT PHONG.MAP,TENP,DIACHIP,SDT,COUNT(NHANVIEN.MAP) AS SONV
FROM PHONG,NHANVIEN
WHERE PHONG.MAP=NHANVIEN.MAP
GROUP BY phong.MAP,TENP,DIACHIP,SDT
--3/ Tạo View để tổng hợp thông tin về các nhân viên chưa tích luỹ được trình độ ngoại ngữ nào--
CREATE VIEW VD3
AS
SELECT * FROM NHANVIEN
WHERE MANV NOT IN (SELECT MANV FROM TDNN)
--4/ Tạo View để tổng hợp thông tin về các nhân viên có lương cao nhất trong phòng họ làm việc.--
CREATE VIEW TG
AS
SELECT MAP,MAX(LUONG) AS LUONGCAONHAT
FROM NHANVIEN
GROUP BY MAP
CREATE VIEW LUONGMAX
AS
SELECT NHANVIEN.*
FROM NHANVIEN,TG
WHERE NHANVIEN.MAP=TG.MAP AND LUONG=LUONGCAONHAT
/*5/ Tạo thủ tục có tham số vào @TenNN và @TrinhDo để đưa ra danh các nhân viên biết ngoại ngữ
và trình độ trên. */
CREATE PROC VD5
@TENN CHAR(30),@TRINHDO CHAR(30)
AS
SELECT * FROM NHANVIEN
WHERE MANV IN (SELECT MANV FROM TDNN
WHERE TRINHDO=@TRINHDO AND MANN IN (SELECT MANN FROM NGOAINGU
WHERE TENN=@TENN))
EXEC VD5 'TIENG ANH','A'
--6/ Tạo thủ tục có tham số vào @TenP để đưa ra tổng số nhân viên hiện có trong phòng này--
ALTER PROC VD6
@TENP CHAR(20)
AS
SELECT PHONG.MAP,COUNT(NHANVIEN.MAP) AS SONV
FROM PHONG,NHANVIEN
WHERE PHONG.MAP=NHANVIEN.MAP AND TENP=@TENP
GROUP BY PHONG.MAP
EXEC VD6 'ABC'
/*7/ Tạo thủ tục có tham số vào là @TenNN, @TenP và @TrinhDo để đưa ra danh các nhân viên
ở phòng này biết ngoại ngữ và trình độ ứng với các tham biến đã cho */
CREATE PROC VD7
@TENNN CHAR(30),@TENP CHAR(20),@TRINHDO CHAR(30)
AS
SELECT NHANVIEN.* FROM NHANVIEN,PHONG,TDNN,NGOAINGU
WHERE NHANVIEN.MANV=TDNN.MANV AND PHONG.MAP=NHANVIEN.MAP
AND NGOAINGU.MANN=TDNN.MANN AND TENN=@TENNN AND TENP=@TENP AND TRINHDO=@TRINHDO
EXEC VD7 'TIENG ANH','ABC','A'
/*8/ Tạo thủ tục có tham số vào @TenP để đưa ra danh các nhân viên có lương cao nhất của phòng này*/
CREATE PROC VD8
@TENP CHAR(20)
AS
SELECT NHANVIEN.*
FROM NHANVIEN,TG,PHONG
WHERE NHANVIEN.MAP=TG.MAP AND TG.MAP=PHONG.MAP AND LUONG=LUONGCAONHAT AND TENP=@TENP
EXEC VD8 'ABC'
/*9/ Tạo Trigger để kiểm tra khi nhập dữ liệu vào bảng NhanVien phải đảm bảo lương của nhân viên
phải >0 */
CREATE TRIGGER tg9
ON NHANVIEN
FOR INSERT
AS
IF EXISTS (SELECT LUONG FROM NHANVIEN
WHERE LUONG<0)
BEGIN
PRINT 'DU LIEU NHAP KHONG HOP LE'
ROLLBACK TRAN
END
ELSE PRINT 'DU LIEU NHAP THANH CONG'
INSERT INTO NHANVIEN
VALUES('NV6','HAI','HA NOI','P04','7000')
--10/ Dùng kiểu dữ liệu CURSOR để tăng lương cho mỗi nhân viên lên 10%.--
--KHAI BAO--
DECLARE CS10 CURSOR FOR
SELECT MANV,TENNV,DIACHI,MAP,(LUONG*1.1) AS LUONGMOI
FROM NHANVIEN
GROUP BY MANV,TENNV,DIACHI,MAP,LUONG
--MO--
OPEN CS10
--XU LY--
PRINT 'DANH SACH NHAN VIEN SAU KHI TANG LUONG LEN 10% LA:'
PRINT 'MANV TENNV DIACHI MAP LUONGMOI'
DECLARE @MANV CHAR(10),@TENNV CHAR(20),@DIACHI CHAR(20),@MAP CHAR(10),@LUONG INT
FETCH NEXT FROM CS10
INTO @MANV,@TENNV,@DIACHI,@MAP,@LUONG
WHILE @@FETCH_STATUS=0
BEGIN
PRINT @MANV+@TENNV+@DIACHI+@MAP+CONVERT(CHAR(10),@LUONG)
FETCH NEXT FROM CS10
INTO @MANV,@TENNV,@DIACHI,@MAP,@LUONG
END
--DONG--
CLOSE CS10
--HUY--
DEALLOCATE CS10
--11/ Dùng kiểu dữ liệu CURSOR để đưa ra danh sách các nhân viên có ngoại ngữ tiếng anh trình độ C--
--KHAI BAO--
DECLARE CS11 CURSOR FOR
SELECT NHANVIEN.MANV,TENNV,DIACHI,MAP,LUONG
FROM NHANVIEN,TDNN,NGOAINGU
WHERE NHANVIEN.MANV=TDNN.MANV AND TDNN.MANN=NGOAINGU.MANN
AND TENN='TIENG ANH' AND TRINHDO='C'
--MO--
OPEN CS11
--XU LY--
PRINT 'DANH SACH NHAN VIEN CO NGAOI NGU TIENG ANH TRINH DO C LA:'
PRINT 'MANV TENNV DIACHI MAP LUONG'
DECLARE @MANV CHAR(10),@TENNV CHAR(20),@DIACHI CHAR(20),@MAP CHAR(10),@LUONG INT
FETCH NEXT FROM CS11
INTO @MANV,@TENNV,@DIACHI,@MAP,@LUONG
WHILE @@FETCH_STATUS=0
BEGIN
PRINT @MANV+@TENNV+@DIACHI+@MAP+CONVERT(CHAR(10),@LUONG)
FETCH NEXT FROM CS11
INTO @MANV,@TENNV,@DIACHI,@MAP,@LUONG
END
--DONG--
CLOSE CS11
--HUY--
DEALLOCATE CS11
Bạn đang đọc truyện trên: AzTruyen.Top