SQL面试题

CREATE TABLE test(
NAME CHAR(20),
kecheng CHAR(20),
fenshu CHAR(20)
);

INSERT INTO test VALUES('张三','语文',81),
('张三','数学',75),
('李四','语文',76),
('李四','数学',90),
('王五','语文',81),
('王五','数学',82);

请用一条Sql语句查处分数大于80的学生

select distinct name from test where fenshu>80;
### SQL 面试题及答案 以下是几道经典的 SQL 面试题,涵盖从基础到高级的难度,适合不同层次的求职者准备面试时参考。 #### 1. 查询员工表中工资最高的前三名员工 假设有一个名为 `employees` 的表,包含以下字段:`id`, `name`, `salary`。需要查询出工资最高的前三名员工。 ```sql SELECT id, name, salary FROM employees ORDER BY salary DESC LIMIT 3; ``` 此查询使用了 `ORDER BY` 和 `LIMIT` 来限制结果集的大小[^1]。 #### 2. 查询部门平均工资高于公司整体平均工资的部门 假设有一个名为 `departments` 的表,包含字段 `department_id`, `department_name`,以及一个名为 `employees` 的表,包含字段 `employee_id`, `department_id`, `salary`。 ```sql SELECT d.department_name, AVG(e.salary) AS avg_salary FROM departments d JOIN employees e ON d.department_id = e.department_id GROUP BY d.department_name HAVING AVG(e.salary) > (SELECT AVG(salary) FROM employees); ``` 这里通过子查询计算公司的整体平均工资,并与每个部门的平均工资进行比较[^2]。 #### 3. 查询每个部门中工资最高的员工 假设同样的表结构,要求查询每个部门中工资最高的员工信息。 ```sql SELECT e1.department_id, e1.name, e1.salary FROM employees e1 WHERE e1.salary = ( SELECT MAX(e2.salary) FROM employees e2 WHERE e1.department_id = e2.department_id ); ``` 这段代码利用了子查询和 `MAX()` 函数来获取每个部门的最高工资,并匹配相应的员工记录。 #### 4. 使用窗口函数查询每个部门工资排名前两名的员工 在现代 SQL 中,可以使用窗口函数实现更复杂的排序需求。 ```sql SELECT department_id, name, salary FROM ( SELECT department_id, name, salary, RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) as rank_num FROM employees ) temp WHERE rank_num <= 2; ``` 这里使用了 `RANK()` 窗口函数对每个部门的员工按工资降序排列,并选取排名前两名的员工[^2]。 #### 5. 处理空值问题:查询所有员工及其对应的部门名称 假设有些员工没有分配到部门,即 `department_id` 为 `NULL`,需要显示这些员工的信息。 ```sql SELECT e.name AS employee_name, d.department_name FROM employees e LEFT JOIN departments d ON e.department_id = d.department_id; ``` 通过使用 `LEFT JOIN`,即使某些员工没有对应的部门信息,也可以正确显示他们的记录。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值