根据对人事管理信息系统功能的理解,设计基于多表的连接查询,写出每个查询的描述、对应的sql语句及查询结果
时间: 2024-05-07 16:23:51 浏览: 74
假设我们有以下三个表:员工信息表(employee)、部门信息表(department)、工资信息表(salary),它们的结构如下:
员工信息表(employee)
| 字段名 | 类型 | 说明 |
| :----: | :--: | :--: |
| id | int | 员工编号 |
| name | varchar(50) | 员工姓名 |
| age | int | 员工年龄 |
| gender | varchar(10) | 员工性别 |
| department_id | int | 所属部门编号 |
部门信息表(department)
| 字段名 | 类型 | 说明 |
| :----: | :--: | :--: |
| id | int | 部门编号 |
| name | varchar(50) | 部门名称 |
| manager_id | int | 部门经理编号 |
工资信息表(salary)
| 字段名 | 类型 | 说明 |
| :----: | :--: | :--: |
| id | int | 工资编号 |
| employee_id | int | 员工编号 |
| salary_month | varchar(7) | 工资月份 |
| salary_amount | decimal(10,2) | 工资金额 |
现在我们需要设计以下三个查询:
1. 查询某个部门的所有员工信息及其工资情况。
描述:查询部门名称为“销售部”的所有员工的姓名、年龄、性别、工资月份以及工资金额。
SQL语句:
```
SELECT e.name, e.age, e.gender, s.salary_month, s.salary_amount
FROM employee e
JOIN salary s ON e.id = s.employee_id
WHERE e.department_id = (SELECT id FROM department WHERE name = '销售部');
```
查询结果:
| name | age | gender | salary_month | salary_amount |
| :--: | :-: | :----: | :---------: | :-----------: |
| 张三 | 25 | 男 | 2022-01 | 5000.00 |
| 李四 | 30 | 女 | 2022-01 | 6000.00 |
| 王五 | 35 | 男 | 2022-01 | 7000.00 |
2. 查询某个员工的所在部门名称及其部门经理姓名。
描述:查询员工姓名为“张三”的所在部门名称以及该部门的经理姓名。
SQL语句:
```
SELECT d.name AS department_name, e2.name AS manager_name
FROM employee e1
JOIN department d ON e1.department_id = d.id
JOIN employee e2 ON d.manager_id = e2.id
WHERE e1.name = '张三';
```
查询结果:
| department_name | manager_name |
| :-------------: | :----------: |
| 销售部 | 王小明 |
3. 查询某个月份的所有员工的姓名、年龄、性别及其工资情况。
描述:查询工资月份为“2022-01”的所有员工的姓名、年龄、性别以及工资金额。
SQL语句:
```
SELECT e.name, e.age, e.gender, s.salary_amount
FROM employee e
JOIN salary s ON e.id = s.employee_id
WHERE s.salary_month = '2022-01';
```
查询结果:
| name | age | gender | salary_amount |
| :--: | :-: | :----: | :-----------: |
| 张三 | 25 | 男 | 5000.00 |
| 李四 | 30 | 女 | 6000.00 |
| 王五 | 35 | 男 | 7000.00 |
阅读全文