创建企业人事数据库,编写Python代码,完成下述嵌入式SQL的查询要求。 1. 列出至少有四个员工的所有部门信息。 2. 列出所有员工的姓名及其直接上级的姓名,没有领导的雇员也列出。 3. 列出受雇日期早于其直接上级的所有员工编号/姓名/部门名称。 4. 列出最低薪金大于1500的各种工作及此从事此工作的全部雇员人数。 5. 列出在部门sales工作的员工的姓名,假定不知道销售部的部门编号。
时间: 2023-11-28 08:48:10 浏览: 57
以下是Python代码实现以上查询要求:
```python
import sqlite3
# 连接企业人事数据库
conn = sqlite3.connect('enterprise.db')
c = conn.cursor()
# 1. 列出至少有四个员工的所有部门信息。
query1 = """
SELECT d.dept_no, d.dept_name, COUNT(*) AS num_employees
FROM departments d
JOIN dept_emp de ON d.dept_no = de.dept_no
GROUP BY d.dept_no, d.dept_name
HAVING COUNT(*) >= 4
"""
result1 = c.execute(query1).fetchall()
print("Query 1 Results:")
print(result1)
# 2. 列出所有员工的姓名及其直接上级的姓名,没有领导的雇员也列出。
query2 = """
SELECT e1.emp_no, e1.first_name || ' ' || e1.last_name AS employee_name,
CASE WHEN e2.first_name IS NULL THEN 'None' ELSE e2.first_name || ' ' || e2.last_name END AS manager_name
FROM employees e1
LEFT JOIN dept_manager dm ON e1.emp_no = dm.emp_no
LEFT JOIN employees e2 ON dm.manager_emp_no = e2.emp_no
"""
result2 = c.execute(query2).fetchall()
print("\nQuery 2 Results:")
print(result2)
# 3. 列出受雇日期早于其直接上级的所有员工编号/姓名/部门名称。
query3 = """
SELECT e.emp_no, e.first_name || ' ' || e.last_name AS employee_name, d.dept_name
FROM employees e
JOIN dept_emp de ON e.emp_no = de.emp_no
JOIN departments d ON de.dept_no = d.dept_no
WHERE e.hire_date < (SELECT hire_date FROM employees WHERE emp_no = de.manager_emp_no)
"""
result3 = c.execute(query3).fetchall()
print("\nQuery 3 Results:")
print(result3)
# 4. 列出最低薪金大于1500的各种工作及此从事此工作的全部雇员人数。
query4 = """
SELECT j.title, COUNT(*) AS num_employees
FROM employees e
JOIN salaries s ON e.emp_no = s.emp_no
JOIN titles j ON e.emp_no = j.emp_no
WHERE s.salary >= 1500
GROUP BY j.title
"""
result4 = c.execute(query4).fetchall()
print("\nQuery 4 Results:")
print(result4)
# 5. 列出在部门sales工作的员工的姓名,假定不知道销售部的部门编号。
query5 = """
SELECT e.first_name || ' ' || e.last_name AS employee_name
FROM employees e
JOIN dept_emp de ON e.emp_no = de.emp_no
JOIN departments d ON de.dept_no = d.dept_no
WHERE d.dept_name = 'Sales'
"""
result5 = c.execute(query5).fetchall()
print("\nQuery 5 Results:")
print(result5)
# 关闭数据库连接
conn.close()
```
需要注意的是,以上代码中的 SQL 查询语句是基于一个名为 enterprise.db 的企业人事数据库进行的。如果需要运行以上代码,需要先创建这个数据库并填充数据。
阅读全文