经典SQL 面试题
经典SQL 面试题
1.用一条SQL 语句 查询出每门课都大于80分的学生姓名。
name kencheng fenshu
张三 语文 81
张三 数学 75
李四 语文 76
李四 数学 90
王五 语文 81
王五 数学 100
王五 英语 90
答案:
1 SELECT DISTINCT name FROM table_name WHERE name NOT IN (SELECT DISTINCT name FROM table_name WHERE fenshu<=80);
答题思路:
a.首先使用 子查询把小于或等于80分生的学生姓名查询出来,使用SELECT DISTINCT name剔除查询重复的学生姓名。
b.再使用 WHERE NOT IN name 排除子查询里面获取小于或等于80分我的学生姓名,从而获得每门课都大于80分我的学生姓名。 需要SELECT DISTINCT name剔除查询重复的学生姓名。
2.学生表 如下:
studID studNo studName studCourseCode studKencheng studFenshu
1 2005001 张三 0001 数学 69
2 2005002 李四 0001 数学 89
3 2005001 张三 0001 数学 69
删除除了自动编号不同,其他都相同的学生冗余信息。
答案:
DELETE table_name WHERE studID NOT IN (SELECT MIN(studId) FROM table_name GROUP BY studNo,studName,studCourseCode,studKecheng,studFenshu)
答题思路:
a.首先使用子查询和GROUP BY 根据studNo,studName,studCourseCode,studkecheng,studFenshu 例进行相同数据分组,GROUP BY 结合MIN()函数查询studID例中最小数据。
b.再使用DELETE table_name WHERE studID NOT IN结合上面的子查询,删除除了自动编号不同,其他相同的学生冗余信息。

浙公网安备 33010602011771号