sql语句面试题
1.根据emp数据表编写SQL查出所有name重复的记录且按照age降序。
| emp_no | name | age |
|---|---|---|
| 1001 | 小明 | 18 |
| 1002 | 王强 | 20 |
| 1003 | 小雪 | 20 |
| 1004 | 小明 | 19 |
结果
| emp_no | name | age |
|---|---|---|
| 1004 | 小明 | 19 |
| 1001 | 小明 | 18 |
select emp_no , name ,age from emp where name in(
select t.name from(
select name ,count(name) from emp group by name having count(name)>1
) t
) order by age desc
2.用一条SQL 语句 查询出每门课都大于80 分的学生姓名
| name | subject | score |
|---|---|---|
| 张三 | 语文 | 81 |
| 张三 | 数学 | 75 |
| 李四 | 语文 | 76 |
| 李四 | 数学 | 90 |
| 王五 | 语文 | 81 |
| 王五 | 数学 | 100 |
| 王五 | 英语 | 90 |
-- 张三和李四英语课程没考,不应该查出来,只有王五符合
-- 1. 先查参加所有考试的学生
select name from student where name in (
select name from student group by name having count(name)=
select count(distinct(subject) from student
)
-- 2. 再过滤最小分数大于80的
结果
| name |
|---|
| 王五 |
select name from student where name in(
-- 首先找出参加过所有课程的题目的学生姓名(最后通过学生分组算最小分数大于80)
select name from student group by name having count(name)=(
-- 查询出科目的总数
select count(distinct(subject)) from student )
) GROUP BY name having min(score) >80

浙公网安备 33010602011771号