You are on page 1of 6

CREATE DATABASE DEAN_215122197

go
USE DEAN_215122197
go
/* Cau 1 */
CREATE TABLE PHONGBAN
(
MAPHG INT NOT NULL,
TENPHG NVARCHAR(15),
TRPHG CHAR(9),
NG_NHANCHUC DATETIME,
PRIMARY KEY (MAPHG)
)
CREATE TABLE NHANVIEN
(
MANV CHAR(9) NOT NULL,
HONV NVARCHAR(15),
TENLOT NVARCHAR(15),
TENNV NVARCHAR(15),
NGSINH DATETIME,
DCHI NVARCHAR(30),
PHAI NCHAR(3),
LUONG FLOAT,
MA_NQL CHAR(9),
PHG INT,
PRIMARY KEY(MANV)
)

CREATE TABLE DIADIEM_PHG


(
MAPHG INT NOT NULL,
DIADIEM NVARCHAR(15) NOT NULL,
PRIMARY KEY (MAPHG, DIADIEM),
)

CREATE TABLE CONGVIEC


(
MADA INT NOT NULL,
STT INT NOT NULL,
TEN_CONG_VIEC NVARCHAR(50),
PRIMARY KEY (MADA, STT)
)

CREATE TABLE PHANCONG


(
MA_NVIEN CHAR(9) NOT NULL,
MADA INT NOT NULL,
STT INT NOT NULL,
THOIGIAN DECIMAL(5,1),
PRIMARY KEY (MA_NVIEN, MADA,STT)
)

CREATE TABLE THANNHAN


(
MA_NVIEN CHAR(9) NOT NULL,
TENTN NVARCHAR(15) NOT NULL,
PHAI NCHAR(3),
NGSINH DATETIME,
QUANHE NVARCHAR(8) NOT NULL,
PRIMARY KEY (MA_NVIEN, TENTN)
)

CREATE TABLE DEAN


(
MADA INT NOT NULL,
TENDA NVARCHAR(15),
DDIEM_DA NVARCHAR(15),
PHONG INT,
PRIMARY KEY (MADA)
)
/*TAO KHOA NGOAI CHO CAC BANG*/

/*CONTRAINST*/

ALTER TABLE NHANVIEN ADD CONSTRAINT FK_NHANVIEN_NHANVIEN


FOREIGN KEY (MA_NQL) REFERENCES NHANVIEN(MANV)

ALTER TABLE NHANVIEN ADD CONSTRAINT FK_NHANVIEN_PHONGBAN


FOREIGN KEY (PHG) REFERENCES PHONGBAN(MAPHG)

ALTER TABLE NHANVIEN ADD CONSTRAINT CK_PHAI


CHECK (PHAI IN ('Nam',N'Nữ'))

ALTER TABLE PHONGBAN ADD CONSTRAINT FK_PHONGBAN_NHANVIEN


FOREIGN KEY (TRPHG) REFERENCES NHANVIEN(MANV)

ALTER TABLE DIADIEM_PHG ADD CONSTRAINT FK_DIADIEM_PHG_PHONGBAN


FOREIGN KEY (MAPHG) REFERENCES PHONGBAN(MAPHG)

ALTER TABLE DEAN ADD CONSTRAINT FK_DEAN_PHONGBAN


FOREIGN KEY (PHONG) REFERENCES PHONGBAN(MAPHG)

ALTER TABLE CONGVIEC ADD CONSTRAINT FK_CONGVIEC_DEAN


FOREIGN KEY (MADA) REFERENCES DEAN(MADA)

ALTER TABLE PHANCONG ADD CONSTRAINT FK_PHANCONG_CONGVIEC


FOREIGN KEY (MADA, STT) REFERENCES CONGVIEC(MADA, STT)

ALTER TABLE THANNHAN ADD CONSTRAINT FK_THANNHAN_NHANVIEN


FOREIGN KEY (MA_NVIEN) REFERENCES NHANVIEN(MANV)

ALTER TABLE PHANCONG ADD CONSTRAINT FK_PHANCONG_NHANVIEN


FOREIGN KEY (MA_NVIEN) REFERENCES NHANVIEN(MANV)

BEGI
N /*
2.3
TRUY
VẤN
LỒNG
+
GOM
NHÓM
*/
--37. Cho biết danh sách các đề án (MADA) có: nhân công với họ (HONV) là 'Đinh'
hoặc có người trưởng phòng chủ trì đề án với họ (HONV) là 'Đinh'.
SELECT PHANCONG.MADA

FROM NHANVIEN, PHANCONG

WHERE NHANVIEN.MANV = PHANCONG.MA_NVIEN AND

NHANVIEN.HONV = N'Đinh'

UNION --phép kết

SELECT DEAN.MADA

FROM NHANVIEN, PHONGBAN, DEAN

WHERE NHANVIEN.MANV = PHONGBAN.TRPHG AND

PHONGBAN.MAPHG = DEAN.PHONG AND

NHANVIEN.HONV = N'Đinh'

--38. Danh sách những nhân viên (HONV, TENLOT, TENNV) có trên 2 thân
nhân.
SELECT (NHANVIEN.HONV + ' ' + NHANVIEN.TENLOT + ' '+ NHANVIEN.TENNV) AS 'Họ
tên nhân viên có trên 2 thân nhân'
FROM NHANVIEN, THANNHAN

WHERE NHANVIEN.MANV= THANNHAN.MA_NVIEN

GROUP BY (NHANVIEN.HONV + ' ' + NHANVIEN.TENLOT + ' '+ NHANVIEN.TENNV)

HAVING COUNT(THANNHAN.MA_NVIEN) > 2

--39. Danh sách những nhân viên (HONV, TENLOT, TENNV) không có thân nhân
nào.
SELECT (NHANVIEN.HONV + ' ' + NHANVIEN.TENLOT + ' '+ NHANVIEN.TENNV) AS 'Họ
tên nhân viên không có thân nhân'
FROM NHANVIEN

WHERE NHANVIEN.MANV NOT IN (SELECT THANNHAN.MA_NVIEN

FROM NHANVIEN, THANNHAN

WHERE NHANVIEN.MANV =
THANNHAN.MA_NVIEN
)

--40. Danh sách những trưởng phòng (HONV, TENLOT, TENNV) có tối thiểu một
thân nhân.
SELECT (NHANVIEN.HONV + ' ' + NHANVIEN.TENLOT + ' '+ NHANVIEN.TENNV) AS 'Họ
tên trưởng phòng có ít nhất 1 thân nhân'
FROM NHANVIEN, PHONGBAN

WHERE NHANVIEN.MANV = PHONGBAN.TRPHG AND

PHONGBAN.TRPHG IN (SELECT THANNHAN.MA_NVIEN

FROM NHANVIEN, THANNHAN

WHERE NHANVIEN.MANV =
THANNHAN.MA_NVIEN
)

--41. Tìm họ (HONV) của những trưởng phòng chưa có gia đình.

SELECT NHANVIEN.HONV

FROM NHANVIEN, PHONGBAN

WHERE NHANVIEN.MANV = PHONGBAN.TRPHG AND

PHONGBAN.TRPHG NOT IN (SELECT PHONGBAN.TRPHG

FROM PHONGBAN, THANNHAN

WHERE PHONGBAN.TRPHG =
THANNHAN.MA_NVIEN AND
THANNHAN.QUANHE
= N'Vợ chồng'
)

--42. Cho biết họ tên nhân viên (HONV, TENLOT, TENNV) có mức lương trên mức lương
trung bình của phòng "Nghiên cứu".
SELECT (NHANVIEN.HONV + ' ' + NHANVIEN.TENLOT + ' ' + NHANVIEN.TENNV) AS 'Họ
tên nhân viên có lương trung bình trên mức lương trung bình của phòng "Nghiên cứu"'
FROM NHANVIEN

WHERE NHANVIEN.LUONG > (SELECT AVG(NHANVIEN.LUONG)

FROM NHANVIEN, PHONGBAN

WHERE NHANVIEN.PHG =
PHONGBAN.MAPHG AND
PHONGBAN.TENPHG =
N'Nghiên cứu')
--43. Cho biết tên phòng ban và họ tên trưởng phòng của phòn ban có đông nhân viên
nhất.
SELECT PHONGBAN.TENPHG, (NHANVIEN.HONV + ' ' + NHANVIEN.TENLOT + ' ' +
NHANVIEN.TENNV) AS 'Họ tên trưởng phòng của phòng ban đông nhân viên nhất'
FROM NHANVIEN, PHONGBAN

WHERE NHANVIEN.MANV = PHONGBAN.TRPHG AND

PHONGBAN.MAPHG = (SELECT TOP 1 PHONGBAN.MAPHG


FROM NHANVIEN, PHONGBAN

WHERE NHANVIEN.PHG =
PHONGBAN.MAPHG
GROUP BY PHONGBAN.MAPHG

ORDER BY COUNT (NHANVIEN.PHG)


DESC
)

--44. Cho biết danh sách các mã đề án mà nhân viên có mã là 009 chưa làm.

SELECT DEAN.MADA

FROM DEAN

WHERE DEAN.MADA NOT IN (SELECT PHANCONG.MADA

FROM PHANCONG

WHERE PHANCONG.MA_NVIEN = '009'

--45. Cho biết danh sách các công việc (tên công việc) trong đề án "Sản phẩm X" mà
nhân viên có mã là 009 chưa làm.
SELECT CONGVIEC.TEN_CONG_VIEC

FROM CONGVIEC, DEAN

WHERE CONGVIEC.MADA = DEAN.MADA AND

DEAN.TENDA = N'Sản phẩm X' AND

CONGVIEC.TEN_CONG_VIEC NOT IN (SELECT CONGVIEC.TEN_CONG_VIEC

FROM
CONGVIEC, PHANCONG
WHERE
CONGVIEC.MADA = PHANCONG.MADA AND

PHANCONG.MA_NVIEN = '009')
--46. Tìm họ tên và địa chỉ của những nhân viên làm việc cho một đề án ở 'TP HCM'
nhưng phòng ban mà họ trực thuộc lại không tọa lạc ở thành phố 'TP HCM'.
SELECT DISTINCT (NHANVIEN.HONV + ' ' + NHANVIEN.TENLOT + ' ' +
NHANVIEN.TENNV) AS 'Họ tên nhân viên', NHANVIEN.DCHI
FROM NHANVIEN, DEAN, DIADIEM_PHG

WHERE NHANVIEN.PHG = DEAN.PHONG AND

NHANVIEN.PHG = DIADIEM_PHG.MAPHG AND

DEAN.DDIEM_DA LIKE '%HCM' AND

DIADIEM_PHG.DIADIEM NOT LIKE '%HCM'


--47. Tổng quát câu 46, tìm họ tên và địa chỉ của các nhân viên làm việc cho một đề
án ở một thành phố nhưng phòng ban mà họ trực thuộc lại không toạ lạc ở thành phố
đó.
SELECT DISTINCT (NHANVIEN.HONV + ' ' + NHANVIEN.TENLOT + ' ' +
NHANVIEN.TENNV) AS 'Họ tên nhân viên', NHANVIEN.DCHI
FROM NHANVIEN, DEAN, DIADIEM_PHG

WHERE NHANVIEN.PHG = DEAN.PHONG AND

NHANVIEN.PHG = DIADIEM_PHG.MAPHG AND

DEAN.DDIEM_DA IN (SELECT DEAN.DDIEM_DA

FROM DEAN

) AND

DIADIEM_PHG.DIADIEM NOT LIKE DEAN.DDIEM_DA

END

GO

You might also like