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
posted @ 2022-03-14 16:31  初夏那片海  阅读(70)  评论(0)    收藏  举报