员工和部门数据库 SQL 查询示例

本页面提供了一些基于员工和部门数据库的 SQL 查询示例,涵盖了查找最高工资员工、平均工资、员工数量、部门经理等操作。

数据库表结构

员工表 employees

CREATE TABLE `employees` (
  `employee_id` int(6) NOT NULL DEFAULT '0',
  `first_name` varchar(20) DEFAULT NULL,
  `last_name` varchar(25) NOT NULL,
  `email` varchar(25) NOT NULL,
  `phone_number` varchar(20) DEFAULT NULL,
  `hire_date` date NOT NULL,
  `job_id` varchar(10) NOT NULL,
  `salary` double(8,2) DEFAULT NULL,
  `commission_pct` double(2,2) DEFAULT NULL,
  `manager_id` int(6) DEFAULT NULL,
  `department_id` int(4) DEFAULT NULL
);

部门表 departments

CREATE TABLE `departments` (
  `department_id` int(4) NOT NULL DEFAULT '0',
  `department_name` varchar(30) NOT NULL,
  `manager_id` int(6) DEFAULT NULL,
  `location_id` int(4) DEFAULT NULL
);

查询示例

  1. 查询取得每个部门最高工资的人员信息
SELECT e.employee_id, e.first_name, e.last_name, e.salary, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id
WHERE e.salary = (
  SELECT MAX(salary)
  FROM employees
  WHERE department_id = e.department_id
);
  1. 查询员工的最高工资(不使用 max 函数)
SELECT e.employee_id, e.first_name, e.last_name, e.salary
FROM employees e
WHERE NOT EXISTS (
  SELECT 1
  FROM employees
  WHERE salary > e.salary
);
  1. 查询每个部门的平均工资和总工资
SELECT d.department_id, d.department_name, AVG(e.salary) as avg_salary, SUM(e.salary) as total_salary
FROM employees e
JOIN departments d ON e.department_id = d.department_id
GROUP BY d.department_id, d.department_name;
  1. 查询没有分配部门的员工信息
SELECT e.employee_id, e.first_name, e.last_name
FROM employees e
WHERE e.department_id IS NULL;
  1. 查询每个部门的员工数量
SELECT d.department_id, d.department_name, COUNT(e.employee_id) as employee_count
FROM employees e
JOIN departments d ON e.department_id = d.department_id
GROUP BY d.department_id, d.department_name;
  1. 查询每个部门的经理姓名和联系电话
SELECT d.department_id, d.department_name, e.first_name, e.last_name, e.phone_number
FROM departments d
JOIN employees e ON d.manager_id = e.employee_id;
  1. 查询每个部门的员工数量,并按照员工数量降序排序
SELECT d.department_id, d.department_name, COUNT(e.employee_id) as employee_count
FROM employees e
JOIN departments d ON e.department_id = d.department_id
GROUP BY d.department_id, d.department_name
ORDER BY employee_count DESC;
  1. 查询每个部门的平均工资,并按照平均工资升序排序
SELECT d.department_id, d.department_name, AVG(e.salary) as avg_salary
FROM employees e
JOIN departments d ON e.department_id = d.department_id
GROUP BY d.department_id, d.department_name
ORDER BY avg_salary ASC;

原文地址: https://www.cveoy.top/t/topic/o2YL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录