创建企业人事数据库,编写Python代码,完成下述嵌入式SQL的查询要求。 1. 列出至少有四个员工的所有部门信息。 2. 列出所有员工的姓名及其直接上级的姓名,没有领导的雇员也列出。 3. 列出受雇日期早于其直接上级的所有员工编号/姓名/部门名称。 4. 列出最低薪金大于1500的各种工作及此从事此工作的全部雇员人数。 5. 列出在部门sales工作的员工的姓名,假定不知道销售部的部门编号。
时间: 2023-11-28 11:47:10 浏览: 73
以下是Python代码实现:
```python
import sqlite3
# 连接数据库
conn = sqlite3.connect('company.db')
c = conn.cursor()
# 1. 列出至少有四个员工的所有部门信息
query1 = """
SELECT d.name, COUNT(*) as count
FROM employee e
JOIN department d ON e.dept_id = d.id
GROUP BY d.name
HAVING count >= 4
"""
result1 = c.execute(query1).fetchall()
print("部门名称\t\t员工数量")
for row in result1:
print(row[0] + "\t\t" + str(row[1]))
# 2. 列出所有员工的姓名及其直接上级的姓名,没有领导的雇员也列出。
query2 = """
SELECT e.name, IFNULL(m.name, '无') as manager_name
FROM employee e
LEFT JOIN employee m ON e.manager_id = m.id
"""
result2 = c.execute(query2).fetchall()
print("\n员工姓名\t直接上级姓名")
for row in result2:
print(row[0] + "\t\t" + row[1])
# 3. 列出受雇日期早于其直接上级的所有员工编号/姓名/部门名称
query3 = """
SELECT e.id, e.name, d.name
FROM employee e
JOIN department d ON e.dept_id = d.id
WHERE e.hire_date < (
SELECT hire_date
FROM employee
WHERE id = e.manager_id
)
"""
result3 = c.execute(query3).fetchall()
print("\n员工编号\t员工姓名\t部门名称")
for row in result3:
print(str(row[0]) + "\t\t" + row[1] + "\t\t" + row[2])
# 4. 列出最低薪金大于1500的各种工作及此从事此工作的全部雇员人数
query4 = """
SELECT job, COUNT(*) as count
FROM employee
WHERE salary >= (
SELECT MIN(salary)
FROM employee
WHERE job = employee.job
)
GROUP BY job
"""
result4 = c.execute(query4).fetchall()
print("\n工作\t\t员工人数")
for row in result4:
print(row[0] + "\t\t" + str(row[1]))
# 5. 列出在部门sales工作的员工的姓名,假定不知道销售部的部门编号
query5 = """
SELECT name
FROM employee
WHERE dept_id = (
SELECT id
FROM department
WHERE name = 'sales'
)
"""
result5 = c.execute(query5).fetchall()
print("\n销售部员工姓名")
for row in result5:
print(row[0])
# 关闭数据库连接
conn.close()
```
注意:以上代码是基于SQLite数据库编写的,如果使用其他数据库需要根据具体的SQL语法进行调整。
阅读全文