-- 1. 查询所有在职员工的姓名和职位
-- 查询类型：比较条件
SELECT Name, Position
FROM Employee
WHERE EmploymentStatus = '在职';

-- 2. 查询所有已批准的年假记录
-- 查询类型：比较条件
SELECT e.Name, l.LeaveType, l.StartDate, l.EndDate
FROM LeaveRequest l
JOIN Employee e ON l.EmployeeID = e.EmployeeID
WHERE l.LeaveType = '年假' AND l.RequestStatus = '已批准';

-- 3. 查询1985年6月21日后入职的员工姓名和职位
-- 查询类型：范围比较
SELECT Name, Position
FROM Employee
WHERE HireDate > '1985-06-21';

-- 4. 查询所有在2024年1月到2024年3月间请病假的员工及其假期天数
-- 查询类型：范围比较
SELECT e.Name, l.LeaveDays, l.StartDate, l.EndDate
FROM LeaveRequest l
JOIN Employee e ON l.EmployeeID = e.EmployeeID
WHERE l.LeaveType = '病假' AND l.StartDate BETWEEN '2024-01-01' AND '2024-03-31';

-- 5. 查询所有名字中包含“王”字的员工
-- 查询类型：字符串相似比较
SELECT Name
FROM Employee
WHERE Name LIKE '%王%';

-- 6. 查询所有职位为“技术总监”或者“产品经理”的员工
-- 查询类型：集合比较
SELECT Name, Position
FROM Employee
WHERE Position IN ('技术总监', '产品经理');

-- 7. 查询所有缺勤记录的员工姓名和考勤日期
-- 查询类型：集合比较
SELECT e.Name, a.AttendanceDate
FROM Attendance a
JOIN Employee e ON a.EmployeeID = e.EmployeeID
WHERE a.AttendanceStatus = '缺勤';

-- 8. 查询所有2024年1月缺勤超过3天的员工姓名
-- 查询类型：集合比较
SELECT e.Name
FROM AttendanceSummary a
JOIN Employee e ON a.EmployeeID = e.EmployeeID
WHERE a.AbsentDays > 3 AND a.Month LIKE '2024-01%';

-- 9. 查询所有迟到超过5分钟的员工
-- 查询类型：比较条件
SELECT e.Name, a.AttendanceDate
FROM Attendance a
JOIN Employee e ON a.EmployeeID = e.EmployeeID
WHERE TIMESTAMPDIFF(MINUTE, a.CheckInTime, '09:00:00') > 5;

-- 10. 查询所有2024年5月1日至5月5日请假超过2天的员工
-- 查询类型：范围比较
SELECT e.Name, l.LeaveDays
FROM LeaveRequest l
JOIN Employee e ON l.EmployeeID = e.EmployeeID
WHERE l.StartDate BETWEEN '2024-05-01' AND '2024-05-05'
  AND l.LeaveDays > 2;

-- 11. 查询所有职位为“经理”或“主管”的员工及其入职日期
-- 查询类型：集合比较
SELECT Name, Position, HireDate
FROM Employee
WHERE Position IN ('经理', '主管');

-- 12. 查询所有2024年12月1日的考勤记录
-- 查询类型：范围比较
SELECT e.Name, a.AttendanceDate, a.AttendanceStatus
FROM Attendance a
JOIN Employee e ON a.EmployeeID = e.EmployeeID
WHERE a.AttendanceDate = '2024-12-01';

-- 13. 查询所有名字以“张”开头的员工
-- 查询类型：字符串相似比较
SELECT Name
FROM Employee
WHERE Name LIKE '张%';

-- 14. 查询所有部门是“研发部”且在2024年12月有请假记录的员工
-- 查询类型：多表连接
SELECT e.Name, l.LeaveType, l.StartDate, l.EndDate
FROM Employee e
JOIN Department d ON e.DepartmentID = d.DepartmentID
JOIN LeaveRequest l ON e.EmployeeID = l.EmployeeID
WHERE d.DepartmentName = '研发部' AND l.StartDate BETWEEN '2024-12-01' AND '2024-12-31';

-- 15. 查询所有部门为“人事部”的员工，并返回其主管姓名
-- 查询类型：多表连接
SELECT e.Name AS EmployeeName, m.Name AS ManagerName
FROM Employee e
JOIN Department d ON e.DepartmentID = d.DepartmentID
JOIN Employee m ON d.ManagerID = m.EmployeeID
WHERE d.DepartmentName = '人事部';

-- 16. 查询所有2024年7月未请假员工的姓名
-- 查询类型：多表连接
SELECT e.Name
FROM Employee e
LEFT JOIN LeaveRequest l ON e.EmployeeID = l.EmployeeID
WHERE l.LeaveType IS NULL OR l.StartDate NOT LIKE '2024-07%';

-- 17. 查询所有员工及其部门名称
-- 查询类型：多表连接
SELECT e.Name, d.DepartmentName
FROM Employee e
JOIN Department d ON e.DepartmentID = d.DepartmentID;

-- 18. 查询所有职位为“销售经理”的员工及其所在的部门名称
-- 查询类型：多表连接
SELECT e.Name, d.DepartmentName
FROM Employee e
JOIN Department d ON e.DepartmentID = d.DepartmentID
WHERE e.Position = '销售经理';

-- 19. 查询2024年上半年未请过假的员工姓名
-- 查询类型：嵌套查询
SELECT e.Name
FROM Employee e
WHERE e.EmployeeID NOT IN (
    SELECT DISTINCT EmployeeID
    FROM LeaveRequest
    WHERE LeaveStartDate BETWEEN '2024-01-01' AND '2024-06-30'
       OR LeaveEndDate BETWEEN '2024-01-01' AND '2024-06-30'
);

-- 20. 查询所有已经提交申请且状态为“已批准”的年假记录
-- 查询类型：EXISTS查询
SELECT e.Name, l.LeaveType, l.StartDate, l.EndDate
FROM Employee e
JOIN LeaveRequest l ON e.EmployeeID = l.EmployeeID
WHERE EXISTS (
    SELECT 1
    FROM LeaveRequest lr
    WHERE lr.EmployeeID = e.EmployeeID AND lr.RequestStatus = '已批准'
);
