SQL内容及常见面试题如下:

以下为具体的面试题内容和答案
一、简单查询题目
查询姓“猴”的学生名单

查询姓名中最后一个字是“猴”的学生名单

查询姓名中带“猴”的学生名单

查询姓“孟”老师的个数

二、汇总分析题目
查询课程号为“0002”的总成绩

查询选了课程的学生人数

查询各科成绩最高和最低的分

查询每门课程被选修的人数

查询男生、女生人数

查询平均成绩大于60分学生的学号和平均成绩

查询至少选修两门课程的学生学号

查询同名同姓学生名单并统计同名人数

查询成绩小于90分的课程并按课程号从大到小排列

查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排列

检索课程编号为“0003”且分数小于90的学生学号,结果按按分数降序排列

统计每门课程的学生选修人数(超过2人的课程才统计),要求输出课程号和选修人数,查询结果按人数降序排序,若人数相同,按课程号升序排序

查询两门以上不及格课程的同学的学号及其不及格课程的平均成绩

查询两门以上不及格课程的同学的学号及其所有课程的平均成绩

三、复杂查询:
查询所有课程成绩小于90分学生的学号、姓名

查询没有学全所有课的学生的学号、姓名

查询出只选修了两门课程的全部学生的学号和姓名

1990年出生的学生名单

topN问题:
按课程号分组取成绩最大值所在行的数据

按课程号分组取成绩最小值所在行的数据

查询各科成绩前两名的记录

四、多表查询
找出所有从不订购任何东西的客户

查询所有学生的学号、姓名、选课数、总成绩

查询平均成绩大于85的所有学生的学号、姓名和平均成绩

查询学生的选课情况:学号,姓名,课程号,课程名称

五、Case 表达式
查询出每门课程的及格人数和不及格人数

使用分段[100-85],[85-70],[70-60],[‹60]来统计各科成绩,分别统计:各分数段人数,课程号和课程名称

下面是学生的成绩表(表名score,列名:学号、课程号、成绩)

用SQL实现将上表转换成下表:

用case表达式将成绩表行列转换

或者使用关联子查询:

六、如何提高SQL查询效率
- select子句中尽量避免使用*,需要哪些列的数据,就提取哪些列的数据。
- where子句比较符号左侧避免函数或加减乘除运算,应当将其移到比较符号的右侧。
- 尽量避免使用in和not in,如果条件值是连续的,可以使用between代替。比如 in(8,9)换成between 8 and 9 。
- 尽量避免使用or,可以将查询语句按条件拆分成多个语句并用union相加。
- 使用limit子句限制返回的数据行数。