经典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结合上面的子查询,删除除了自动编号不同,其他相同的学生冗余信息。

 

posted @ 2015-04-19 17:33  wangwulicnblogs  阅读(206)  评论(0)    收藏  举报