Mysql编程题示例
这里为你提供100个MySQL编程题目,以及相应的测试数据创建SQL和参考答案。由于篇幅限制,我会分几次提供,首先是前10题。
1. 查询所有员工的姓名和工号
题目:查询表employees中所有员工的姓名(name)和工号(emp_id)。
测试数据创建SQL:
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100)
);
INSERT INTO employees (emp_id, name) VALUES
(1, 'John Doe'),
(2, 'Jane Smith'),
(3, 'Mark Johnson'),
(4, 'Alice Brown');
答案:
SELECT emp_id, name FROM employees;
2. 查询所有工资大于5000的员工信息
题目:查询表employees中所有工资大于5000的员工信息。
测试数据创建SQL:
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2)
);
INSERT INTO employees (emp_id, name, salary) VALUES
(1, 'John Doe', 6000),
(2, 'Jane Smith', 4500),
(3, 'Mark Johnson', 7000),
(4, 'Alice Brown', 4800);
答案:
SELECT * FROM employees WHERE salary > 5000;
3. 查询工资最高的员工
题目:查询表employees中工资最高的员工信息。
测试数据创建SQL:
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2)
);
INSERT INTO employees (emp_id, name, salary) VALUES
(1, 'John Doe', 6000),
(2, 'Jane Smith', 7500),
(3, 'Mark Johnson', 7000),
(4, 'Alice Brown', 4800);
答案:
SELECT * FROM employees WHERE salary = (SELECT MAX(salary) FROM employees);
4. 查询每个员工的姓名及其所在部门的部门名称
题目:查询表employees中每个员工的姓名以及其所在的部门名称。假设employees表中有一个dept_id字段,departments表中有dept_id和dept_name字段。
测试数据创建SQL:
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
INSERT INTO departments (dept_id, dept_name) VALUES
(1, 'HR'),
(2, 'Finance'),
(3, 'IT');
INSERT INTO employees (emp_id, name, dept_id) VALUES
(1, 'John Doe', 1),
(2, 'Jane Smith', 2),
(3, 'Mark Johnson', 3),
(4, 'Alice Brown', 1);
答案:
SELECT e.name, d.dept_name
FROM employees e
JOIN departments d ON e.dept_id = d.dept_id;
5. 查询部门名称及该部门的员工人数
题目:查询每个部门的名称以及该部门的员工人数。
测试数据创建SQL:
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
INSERT INTO departments (dept_id, dept_name) VALUES
(1, 'HR'),
(2, 'Finance'),
(3, 'IT');
INSERT INTO employees (emp_id, name, dept_id) VALUES
(1, 'John Doe', 1),
(2, 'Jane Smith', 1),
(3, 'Mark Johnson', 2),
(4, 'Alice Brown', 3),
(5, 'Tom White', 3);
答案:
SELECT d.dept_name, COUNT(e.emp_id) AS employee_count
FROM departments d
LEFT JOIN employees e ON d.dept_id = e.dept_id
GROUP BY d.dept_name;
6. 查询每个部门的最高工资
题目:查询每个部门的最高工资。
测试数据创建SQL:
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
INSERT INTO departments (dept_id, dept_name) VALUES
(1, 'HR'),
(2, 'Finance'),
(3, 'IT');
INSERT INTO employees (emp_id, name, salary, dept_id) VALUES
(1, 'John Doe', 5000, 1),
(2, 'Jane Smith', 7500, 2),
(3, 'Mark Johnson', 6000, 3),
(4, 'Alice Brown', 7000, 1),
(5, 'Tom White', 8000, 2);
答案:
SELECT d.dept_name, MAX(e.salary) AS highest_salary
FROM departments d
JOIN employees e ON d.dept_id = e.dept_id
GROUP BY d.dept_name;
7. 查询每个部门工资的平均值
题目:查询每个部门工资的平均值。
测试数据创建SQL:
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
INSERT INTO departments (dept_id, dept_name) VALUES
(1, 'HR'),
(2, 'Finance'),
(3, 'IT');
INSERT INTO employees (emp_id, name, salary, dept_id) VALUES
(1, 'John Doe', 5000, 1),
(2, 'Jane Smith', 7500, 2),
(3, 'Mark Johnson', 6000, 3),
(4, 'Alice Brown', 7000, 1),
(5, 'Tom White', 8000, 2);
答案:
SELECT d.dept_name, AVG(e.salary) AS avg_salary
FROM departments d
JOIN employees e ON d.dept_id = e.dept_id
GROUP BY d.dept_name;
8. 查询在employees表中工资大于等于5000的员工信息,并按工资从高到低排序
题目:查询employees表中所有工资大于等于5000的员工信息,并按工资从高到低排序。
测试数据创建SQL:
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2)
);
INSERT INTO employees (emp_id, name, salary) VALUES
(1, 'John Doe', 5000),
(2, 'Jane Smith', 7500),
(3, 'Mark Johnson', 6000),
(4, 'Alice Brown', 4800);
答案:
SELECT * FROM employees WHERE salary >= 5000
ORDER BY salary DESC;
9. 查询员工姓名以及他们的上级的姓名(假设有一个manager_id字段指向上级)
题目:查询每个员工的姓名及其上级的姓名。
测试数据创建SQL:
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
manager_id INT
);
INSERT INTO employees (emp_id, name, manager_id) VALUES
(1, 'John Doe', NULL),
(2, 'Jane Smith', 1),
(3, 'Mark Johnson', 1),
(4, 'Alice Brown', 2);
答案:
SELECT e1.name AS employee_name, e2.name AS manager_name
FROM employees e1
LEFT JOIN employees e2 ON e1.manager_id = e2.emp_id;
10. 查询所有部门没有员工的部门名称
题目:查询没有任何员工的部门名称。
测试数据创建SQL:
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
INSERT INTO departments (dept_id, dept_name) VALUES
(1, 'HR'),
(2, 'Finance'),
(3, 'IT');
INSERT INTO employees (emp_id, name, dept_id) VALUES
(1, 'John Doe', 1),
(2, 'Jane Smith', 1);
答案:
SELECT dept_name
FROM departments
WHERE dept_id NOT IN (SELECT
由于篇幅的限制,我会继续提供接下来的30个题目和答案。剩余的70个题目我会分几次提供。如果你需要更多题目,请告诉我。
11. 查询所有员工姓名以及所在部门的部门名称(考虑某些员工没有部门)
题目:查询所有员工姓名和部门名称,即使某些员工没有部门。
测试数据创建SQL:
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
INSERT INTO departments (dept_id, dept_name) VALUES
(1, 'HR'),
(2, 'Finance'),
(3, 'IT');
INSERT INTO employees (emp_id, name, dept_id) VALUES
(1, 'John Doe', 1),
(2, 'Jane Smith', 2),
(3, 'Mark Johnson', NULL);
答案:
SELECT e.name, d.dept_name
FROM employees e
LEFT JOIN departments d ON e.dept_id = d.dept_id;
12. 查询所有部门的员工人数和平均工资
题目:查询每个部门的员工人数及其平均工资。
测试数据创建SQL:
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
INSERT INTO departments (dept_id, dept_name) VALUES
(1, 'HR'),
(2, 'Finance'),
(3, 'IT');
INSERT INTO employees (emp_id, name, salary, dept_id) VALUES
(1, 'John Doe', 5000, 1),
(2, 'Jane Smith', 7000, 2),
(3, 'Mark Johnson', 8000, 3),
(4, 'Alice Brown', 7500, 1);
答案:
SELECT d.dept_name, COUNT(e.emp_id) AS employee_count, AVG(e.salary) AS avg_salary
FROM departments d
JOIN employees e ON d.dept_id = e.dept_id
GROUP BY d.dept_name;
13. 查询工资排名第2的员工姓名
题目:查询表employees中工资排名第2的员工姓名。
测试数据创建SQL:
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2)
);
INSERT INTO employees (emp_id, name, salary) VALUES
(1, 'John Doe', 6000),
(2, 'Jane Smith', 7500),
(3, 'Mark Johnson', 7000),
(4, 'Alice Brown', 5000);
答案:
SELECT name FROM employees
ORDER BY salary DESC
LIMIT 1 OFFSET 1;
14. 查询薪资大于5000的员工姓名、工号和部门名称(考虑某些员工没有部门)
题目:查询薪资大于5000的员工姓名、工号和部门名称,考虑某些员工没有部门。
测试数据创建SQL:
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
INSERT INTO departments (dept_id, dept_name) VALUES
(1, 'HR'),
(2, 'Finance'),
(3, 'IT');
INSERT INTO employees (emp_id, name, salary, dept_id) VALUES
(1, 'John Doe', 6000, 1),
(2, 'Jane Smith', 4500, 2),
(3, 'Mark Johnson', 8000, 3),
(4, 'Alice Brown', 4000, NULL);
答案:
SELECT e.name, e.emp_id, d.dept_name
FROM employees e
LEFT JOIN departments d ON e.dept_id = d.dept_id
WHERE e.salary > 5000;
15. 查询每个员工的工资,和他们的上级姓名
题目:查询每个员工的姓名、工资和他们的上级姓名。
测试数据创建SQL:
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2),
manager_id INT
);
INSERT INTO employees (emp_id, name, salary, manager_id) VALUES
(1, 'John Doe', 6000, NULL),
(2, 'Jane Smith', 7000, 1),
(3, 'Mark Johnson', 7500, 1),
(4, 'Alice Brown', 5000, 2);
答案:
SELECT e.name AS employee_name, e.salary, m.name AS manager_name
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.emp_id;
16. 查询没有经理的员工姓名和工号
题目:查询没有经理的员工姓名和工号。
测试数据创建SQL:
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
manager_id INT
);
INSERT INTO employees (emp_id, name, manager_id) VALUES
(1, 'John Doe', NULL),
(2, 'Jane Smith', 1),
(3, 'Mark Johnson', 1),
(4, 'Alice Brown', 2);
答案:
SELECT emp_id, name
FROM employees
WHERE manager_id IS NULL;
17. 查询每个部门员工的最高工资
题目:查询每个部门员工的最高工资。
测试数据创建SQL:
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
INSERT INTO departments (dept_id, dept_name) VALUES
(1, 'HR'),
(2, 'Finance'),
(3, 'IT');
INSERT INTO employees (emp_id, name, salary, dept_id) VALUES
(1, 'John Doe', 6000, 1),
(2, 'Jane Smith', 7500, 2),
(3, 'Mark Johnson', 8000, 3),
(4, 'Alice Brown', 7000, 1);
答案:
SELECT d.dept_name, MAX(e.salary) AS highest_salary
FROM departments d
JOIN employees e ON d.dept_id = e.dept_id
GROUP BY d.dept_name;
18. 查询工资大于平均工资的员工信息
题目:查询所有工资大于部门平均工资的员工信息。
测试数据创建SQL:
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2),
dept_id INT
);
INSERT INTO employees (emp_id, name, salary, dept_id) VALUES
(1, 'John Doe', 6000, 1),
(2, 'Jane Smith', 5000, 1),
(3, 'Mark Johnson', 7000, 2),
(4, 'Alice Brown', 4000, 2);
答案:
SELECT e.name, e.salary
FROM employees e
WHERE e.salary > (SELECT AVG(salary) FROM employees WHERE dept_id = e.dept_id);
19. 查询在employees表中工资大于5000的员工工号和姓名,并按工资降序排序
题目:查询employees表中所有工资大于5000的员工工号和姓名,并按工资降序排序。
测试数据创建SQL:
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2)
);
INSERT INTO employees (emp_id, name, salary) VALUES
(1, 'John Doe', 6000),
(2, 'Jane Smith', 4500),
(3, 'Mark Johnson', 7000),
(4, 'Alice Brown', 4800);
答案:
SELECT emp_id, name
FROM employees
WHERE salary > 5000
ORDER BY salary DESC;
20. 查询工资在3000到7000之间的员工姓名及工资
题目:查询工资在3000到7000之间的员工姓名和工资。
测试数据创建SQL:
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2)
);
INSERT INTO employees (emp_id, name, salary) VALUES
(1, 'John Doe', 6000),
(2, 'Jane Smith', 4500),
(3, 'Mark Johnson', 7500),
(4, 'Alice Brown', 3000);
答案:
SELECT name, salary
FROM employees
WHERE salary BETWEEN 3000 AND 7000;
为了避免篇幅过长,我将会继续分批次提供剩余的题目及答案。以下是接下来的题目(21 - 40)。
21. 查询所有员工的姓名和他们的上级姓名,如果有上级的话
题目:查询每个员工的姓名及其上级的姓名,如果有上级的话。
测试数据创建SQL:
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
manager_id INT
);
INSERT INTO employees (emp_id, name, manager_id) VALUES
(1, 'John Doe', NULL),
(2, 'Jane Smith', 1),
(3, 'Mark Johnson', 1),
(4, 'Alice Brown', 2);
答案:
SELECT e.name AS employee_name, m.name AS manager_name
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.emp_id;
22. 查询员工的姓名、部门名称及所在部门的员工人数
题目:查询每个员工的姓名、部门名称及其所在部门的员工人数。
测试数据创建SQL:
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
INSERT INTO departments (dept_id, dept_name) VALUES
(1, 'HR'),
(2, 'Finance'),
(3, 'IT');
INSERT INTO employees (emp_id, name, dept_id) VALUES
(1, 'John Doe', 1),
(2, 'Jane Smith', 1),
(3, 'Mark Johnson', 2),
(4, 'Alice Brown', 3),
(5, 'Tom White', 3);
答案:
SELECT e.name, d.dept_name, COUNT(e2.emp_id) AS employee_count
FROM employees e
JOIN departments d ON e.dept_id = d.dept_id
JOIN employees e2 ON e2.dept_id = e.dept_id
GROUP BY e.emp_id;
23. 查询部门中工资最高的员工姓名和工资
题目:查询每个部门中工资最高的员工的姓名和工资。
测试数据创建SQL:
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
INSERT INTO departments (dept_id, dept_name) VALUES
(1, 'HR'),
(2, 'Finance'),
(3, 'IT');
INSERT INTO employees (emp_id, name, salary, dept_id) VALUES
(1, 'John Doe', 6000, 1),
(2, 'Jane Smith', 7000, 2),
(3, 'Mark Johnson', 8000, 3),
(4, 'Alice Brown', 7000, 1),
(5, 'Tom White', 7500, 2);
答案:
SELECT e.name, e.salary, d.dept_name
FROM employees e
JOIN departments d ON e.dept_id = d.dept_id
WHERE (e.salary, e.dept_id) IN (
SELECT MAX(salary), dept_id
FROM employees
GROUP BY dept_id
);
24. 查询每个部门的最低工资
题目:查询每个部门的最低工资。
测试数据创建SQL:
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
INSERT INTO departments (dept_id, dept_name) VALUES
(1, 'HR'),
(2, 'Finance'),
(3, 'IT');
INSERT INTO employees (emp_id, name, salary, dept_id) VALUES
(1, 'John Doe', 6000, 1),
(2, 'Jane Smith', 4500, 2),
(3, 'Mark Johnson', 7000, 3),
(4, 'Alice Brown', 5000, 1),
(5, 'Tom White', 3500, 2);
答案:
SELECT d.dept_name, MIN(e.salary) AS lowest_salary
FROM employees e
JOIN departments d ON e.dept_id = d.dept_id
GROUP BY d.dept_name;
25. 查询薪资在指定范围内的员工姓名和工号
题目:查询薪资在4000到7000之间的员工姓名和工号。
测试数据创建SQL:
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2)
);
INSERT INTO employees (emp_id, name, salary) VALUES
(1, 'John Doe', 6000),
(2, 'Jane Smith', 4500),
(3, 'Mark Johnson', 7500),
(4, 'Alice Brown', 5000);
答案:
SELECT emp_id, name
FROM employees
WHERE salary BETWEEN 4000 AND 7000;
26. 查询员工姓名和薪资,以及是否为最高薪资的员工(TRUE/FALSE)
题目:查询所有员工的姓名和薪资,以及是否为部门中最高薪资的员工(TRUE/FALSE)。
测试数据创建SQL:
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
INSERT INTO departments (dept_id, dept_name) VALUES
(1, 'HR'),
(2, 'Finance'),
(3, 'IT');
INSERT INTO employees (emp_id, name, salary, dept_id) VALUES
(1, 'John Doe', 6000, 1),
(2, 'Jane Smith', 7500, 2),
(3, 'Mark Johnson', 8000, 3),
(4, 'Alice Brown', 7000, 1);
答案:
SELECT e.name, e.salary,
IF(e.salary = (SELECT MAX(salary) FROM employees WHERE dept_id = e.dept_id), 'TRUE', 'FALSE') AS is_highest_salary
FROM employees e;
27. 查询每个员工的姓名和他们所在的部门名称,使用子查询
题目:查询每个员工的姓名和他们所在的部门名称,使用子查询。
测试数据创建SQL:
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
INSERT INTO departments (dept_id, dept_name) VALUES
(1, 'HR'),
(2, 'Finance'),
(3, 'IT');
INSERT INTO employees (emp_id, name, dept_id) VALUES
(1, 'John Doe', 1),
(2, 'Jane Smith', 2),
(3, 'Mark Johnson', 3);
答案:
SELECT e.name,
(SELECT dept_name FROM departments WHERE dept_id = e.dept_id) AS dept_name
FROM employees e;
28. 查询所有工资大于平均工资的员工信息
题目:查询所有工资大于平均工资的员工信息。
测试数据创建SQL:
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2)
);
INSERT INTO employees (emp_id, name, salary) VALUES
(1, 'John Doe', 6000),
(2, 'Jane Smith', 7000),
(3, 'Mark Johnson', 4000),
(4, 'Alice Brown', 5000);
答案:
SELECT *
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
29. 查询部门中工资大于5000的员工
题目:查询每个部门中工资大于5000的员工姓名和工资。
测试数据创建SQL:
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
INSERT INTO departments (dept_id, dept_name) VALUES
(1, 'HR'),
(2, 'Finance'),
(3, 'IT');
INSERT INTO employees (emp_id, name, salary, dept_id) VALUES
(1, 'John Doe', 6000, 1),
(2, 'Jane Smith', 4500, 2),
(3, 'Mark Johnson', 7000, 3),
(4, 'Alice Brown', 8000, 1);
答案:
SELECT e.name, e.salary, d.dept_name
FROM employees e
JOIN departments d ON e.dept_id = d.dept_id
WHERE e.salary > 5000;
30. 查询员工姓名、工号和工资,并按工资从高到低排序
题目:查询员工姓名、工号和工资,并按工资从高到低排序。
测试数据创建SQL:
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2)
);
INSERT INTO employees (emp_id, name, salary) VALUES
(1, 'John Doe', 6000),
(2, 'Jane Smith', 7000),
(3, 'Mark Johnson', 8000),
(4, 'Alice Brown', 5000);
答案:
SELECT emp_id, name, salary
FROM employees
ORDER BY salary DESC;
继续为你提供剩余的题目(31 - 60)。
31. 查询每个部门的平均工资和员工人数
题目:查询每个部门的平均工资和员工人数。
测试数据创建SQL:
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
INSERT INTO departments (dept_id, dept_name) VALUES
(1, 'HR'),
(2, 'Finance'),
(3, 'IT');
INSERT INTO employees (emp_id, name, salary, dept_id) VALUES
(1, 'John Doe', 6000, 1),
(2, 'Jane Smith', 7000, 2),
(3, 'Mark Johnson', 8000, 3),
(4, 'Alice Brown', 5000, 1),
(5, 'Tom White', 7500, 2);
答案:
SELECT d.dept_name, AVG(e.salary) AS avg_salary, COUNT(e.emp_id) AS employee_count
FROM employees e
JOIN departments d ON e.dept_id = d.dept_id
GROUP BY d.dept_name;
32. 查询每个部门的最低工资、最高工资和平均工资
题目:查询每个部门的最低工资、最高工资和平均工资。
测试数据创建SQL:
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
INSERT INTO departments (dept_id, dept_name) VALUES
(1, 'HR'),
(2, 'Finance'),
(3, 'IT');
INSERT INTO employees (emp_id, name, salary, dept_id) VALUES
(1, 'John Doe', 6000, 1),
(2, 'Jane Smith', 4500, 1),
(3, 'Mark Johnson', 8000, 2),
(4, 'Alice Brown', 7000, 2),
(5, 'Tom White', 3000, 3);
答案:
SELECT d.dept_name, MIN(e.salary) AS min_salary, MAX(e.salary) AS max_salary, AVG(e.salary) AS avg_salary
FROM employees e
JOIN departments d ON e.dept_id = d.dept_id
GROUP BY d.dept_name;
33. 查询每个部门的员工姓名、工资和工资等级(分为"高"、"中"、"低")
题目:查询每个员工的姓名、工资以及工资等级(高:> 7000,中:3000到7000,低:< 3000)。
测试数据创建SQL:
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
INSERT INTO departments (dept_id, dept_name) VALUES
(1, 'HR'),
(2, 'Finance'),
(3, 'IT');
INSERT INTO employees (emp_id, name, salary, dept_id) VALUES
(1, 'John Doe', 8000, 1),
(2, 'Jane Smith', 6500, 2),
(3, 'Mark Johnson', 9000, 3),
(4, 'Alice Brown', 2000, 1);
答案:
SELECT e.name, e.salary,
CASE
WHEN e.salary > 7000 THEN 'High'
WHEN e.salary BETWEEN 3000 AND 7000 THEN 'Medium'
ELSE 'Low'
END AS salary_grade
FROM employees e
JOIN departments d ON e.dept_id = d.dept_id;
34. 查询所有员工的姓名和工号,按工资升序排序
题目:查询所有员工的姓名和工号,并按工资升序排序。
测试数据创建SQL:
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2)
);
INSERT INTO employees (emp_id, name, salary) VALUES
(1, 'John Doe', 6000),
(2, 'Jane Smith', 4500),
(3, 'Mark Johnson', 7000),
(4, 'Alice Brown', 5000);
答案:
SELECT emp_id, name
FROM employees
ORDER BY salary ASC;
35. 查询每个部门的工资总和,并按工资总和降序排列
题目:查询每个部门的工资总和,并按工资总和降序排列。
测试数据创建SQL:
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
INSERT INTO departments (dept_id, dept_name) VALUES
(1, 'HR'),
(2, 'Finance'),
(3, 'IT');
INSERT INTO employees (emp_id, name, salary, dept_id) VALUES
(1, 'John Doe', 6000, 1),
(2, 'Jane Smith', 4500, 1),
(3, 'Mark Johnson', 8000, 2),
(4, 'Alice Brown', 7000, 3);
答案:
SELECT d.dept_name, SUM(e.salary) AS total_salary
FROM employees e
JOIN departments d ON e.dept_id = d.dept_id
GROUP BY d.dept_name
ORDER BY total_salary DESC;
36. 查询工资大于部门平均工资的员工信息,并显示部门名
题目:查询工资大于部门平均工资的员工信息,并显示部门名称。
测试数据创建SQL:
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
INSERT INTO departments (dept_id, dept_name) VALUES
(1, 'HR'),
(2, 'Finance'),
(3, 'IT');
INSERT INTO employees (emp_id, name, salary, dept_id) VALUES
(1, 'John Doe', 6000, 1),
(2, 'Jane Smith', 5000, 2),
(3, 'Mark Johnson', 8000, 3),
(4, 'Alice Brown', 7000, 1);
答案:
SELECT e.name, e.salary, d.dept_name
FROM employees e
JOIN departments d ON e.dept_id = d.dept_id
WHERE e.salary > (SELECT AVG(salary) FROM employees WHERE dept_id = e.dept_id);
37. 查询各部门中工资最低的员工的姓名和工号
题目:查询每个部门中工资最低的员工的姓名和工号。
测试数据创建SQL:
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
INSERT INTO departments (dept_id, dept_name) VALUES
(1, 'HR'),
(2, 'Finance'),
(3, 'IT');
INSERT INTO employees (emp_id, name, salary, dept_id) VALUES
(1, 'John Doe', 6000, 1),
(2, 'Jane Smith', 4500, 1),
(3, 'Mark Johnson', 8000, 2),
(4, 'Alice Brown', 7000, 3),
(5, 'Tom White', 3000, 2);
答案:
SELECT e.name, e.emp_id, d.dept_name
FROM employees e
JOIN departments d ON e.dept_id = d.dept_id
WHERE (e.salary, e.dept_id) IN (
SELECT MIN(salary), dept_id
FROM employees
GROUP BY dept_id
);
38. 查询没有上级的员工姓名及工号
题目:查询没有上级的员工姓名及工号。
测试数据创建SQL:
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
manager_id INT
);
INSERT INTO employees (emp_id, name, manager_id) VALUES
(1, 'John Doe', NULL),
(2, 'Jane Smith', 1),
(3, 'Mark Johnson', 1),
(4, 'Alice Brown', 2);
答案:
SELECT emp_id, name
FROM employees
WHERE manager_id IS NULL;
39. 查询工资大于所有员工平均工资的员工姓名及工号
题目:查询所有工资大于员工平均工资的员工姓名及工号。
测试数据创建SQL:
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2)
);
INSERT INTO employees (emp_id, name, salary) VALUES
(1, 'John Doe', 6000),
(2, 'Jane Smith', 4500),
(3, 'Mark Johnson', 7000),
(4, 'Alice Brown', 5000);
答案:
SELECT emp_id, name
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
40. 查询员工姓名、工号,及他们的上级姓名
题目:查询员工的姓名、工号及他们的上级姓名。
测试数据创建SQL:
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
manager_id INT
);
INSERT INTO employees (emp_id, name, manager_id) VALUES
(1, 'John Doe', NULL),
(2, 'Jane Smith', 1),
(3, 'Mark Johnson', 1),
(4, 'Alice Brown', 2);
答案:
SELECT e.name AS employee_name, e.emp_id, m.name AS manager_name
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.emp_id;
继续提供剩余的题目(41 - 60)。
41. 查询每个员工的姓名及其上级姓名,如果没有上级则显示为“无”
题目:查询每个员工的姓名以及他们的上级姓名,如果没有上级,则显示为“无”。
测试数据创建SQL:
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
manager_id INT
);
INSERT INTO employees (emp_id, name, manager_id) VALUES
(1, 'John Doe', NULL),
(2, 'Jane Smith', 1),
(3, 'Mark Johnson', 1),
(4, 'Alice Brown', 2);
答案:
SELECT e.name AS employee_name,
IF(m.name IS NULL, '无', m.name) AS manager_name
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.emp_id;
42. 查询薪资低于部门平均薪资的员工姓名和薪资
题目:查询薪资低于其所在部门的平均薪资的员工姓名和薪资。
测试数据创建SQL:
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
INSERT INTO departments (dept_id, dept_name) VALUES
(1, 'HR'),
(2, 'Finance'),
(3, 'IT');
INSERT INTO employees (emp_id, name, salary, dept_id) VALUES
(1, 'John Doe', 6000, 1),
(2, 'Jane Smith', 4500, 1),
(3, 'Mark Johnson', 8000, 2),
(4, 'Alice Brown', 7000, 3);
答案:
SELECT e.name, e.salary
FROM employees e
WHERE e.salary < (
SELECT AVG(salary)
FROM employees
WHERE dept_id = e.dept_id
);
43. 查询每个部门的工资总和,且工资总和大于20000的部门
题目:查询每个部门的工资总和,并显示工资总和大于20000的部门。
测试数据创建SQL:
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
INSERT INTO departments (dept_id, dept_name) VALUES
(1, 'HR'),
(2, 'Finance'),
(3, 'IT');
INSERT INTO employees (emp_id, name, salary, dept_id) VALUES
(1, 'John Doe', 6000, 1),
(2, 'Jane Smith', 7500, 2),
(3, 'Mark Johnson', 8500, 3),
(4, 'Alice Brown', 7000, 1);
答案:
SELECT d.dept_name, SUM(e.salary) AS total_salary
FROM employees e
JOIN departments d ON e.dept_id = d.dept_id
GROUP BY d.dept_name
HAVING total_salary > 20000;
44. 查询每个部门的最大工资和最小工资
题目:查询每个部门的最大工资和最小工资。
测试数据创建SQL:
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
INSERT INTO departments (dept_id, dept_name) VALUES
(1, 'HR'),
(2, 'Finance'),
(3, 'IT');
INSERT INTO employees (emp_id, name, salary, dept_id) VALUES
(1, 'John Doe', 6000, 1),
(2, 'Jane Smith', 7500, 1),
(3, 'Mark Johnson', 8500, 2),
(4, 'Alice Brown', 7000, 2),
(5, 'Tom White', 10000, 3);
答案:
SELECT d.dept_name, MAX(e.salary) AS max_salary, MIN(e.salary) AS min_salary
FROM employees e
JOIN departments d ON e.dept_id = d.dept_id
GROUP BY d.dept_name;
45. 查询员工姓名和工资,并显示其工资等级(高于8000为"高",6000到8000为"中",低于6000为"低")
题目:查询每个员工的姓名、工资,并显示其工资等级(高于8000为"高",6000到8000为"中",低于6000为"低")。
测试数据创建SQL:
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2)
);
INSERT INTO employees (emp_id, name, salary) VALUES
(1, 'John Doe', 6000),
(2, 'Jane Smith', 7500),
(3, 'Mark Johnson', 8500),
(4, 'Alice Brown', 5500);
答案:
SELECT name, salary,
CASE
WHEN salary > 8000 THEN 'High'
WHEN salary BETWEEN 6000 AND 8000 THEN 'Medium'
ELSE 'Low'
END AS salary_grade
FROM employees;
46. 查询没有上级的员工姓名
题目:查询没有上级的员工姓名。
测试数据创建SQL:
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
manager_id INT
);
INSERT INTO employees (emp_id, name, manager_id) VALUES
(1, 'John Doe', NULL),
(2, 'Jane Smith', 1),
(3, 'Mark Johnson', NULL);
答案:
SELECT name
FROM employees
WHERE manager_id IS NULL;
47. 查询每个部门的工资平均值,且只显示平均工资大于5000的部门
题目:查询每个部门的工资平均值,并只显示平均工资大于5000的部门。
测试数据创建SQL:
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
INSERT INTO departments (dept_id, dept_name) VALUES
(1, 'HR'),
(2, 'Finance'),
(3, 'IT');
INSERT INTO employees (emp_id, name, salary, dept_id) VALUES
(1, 'John Doe', 6000, 1),
(2, 'Jane Smith', 7500, 1),
(3, 'Mark Johnson', 8000, 2),
(4, 'Alice Brown', 7000, 2),
(5, 'Tom White', 3000, 3);
答案:
SELECT d.dept_name, AVG(e.salary) AS avg_salary
FROM employees e
JOIN departments d ON e.dept_id = d.dept_id
GROUP BY d.dept_name
HAVING avg_salary > 5000;
48. 查询员工的姓名、工号及他们的上级姓名,显示“无”如果没有上级
题目:查询员工的姓名、工号以及他们的上级姓名,如果没有上级,显示为“无”。
测试数据创建SQL:
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
manager_id INT
);
INSERT INTO employees (emp_id, name, manager_id) VALUES
(1, 'John Doe', NULL),
(2, 'Jane Smith', 1),
(3, 'Mark Johnson', NULL);
答案:
SELECT e.name AS employee_name,
e.emp_id,
IFNULL(m.name, '无') AS manager_name
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.emp_id;
49. 查询工资大于等于6000的所有员工姓名及薪资
题目:查询所有工资大于等于6000的员工姓名及薪资。
测试数据创建SQL:
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2)
);
INSERT INTO employees (emp_id, name, salary) VALUES
(1, 'John Doe', 6000),
(2, 'Jane Smith', 5500),
(3, 'Mark Johnson', 7000),
(4, 'Alice Brown', 4500);
答案:
SELECT name, salary
FROM employees
WHERE salary >= 6000;
50. 查询每个部门中薪资最高的员工姓名和工资
题目:查询每个部门中薪资最高的员工姓名和工资。
测试数据创建SQL:
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
INSERT INTO departments (dept_id, dept_name) VALUES
(1, 'HR'),
(2, 'Finance'),
(3, 'IT');
INSERT INTO employees (emp_id, name,
评论(0)