SQL语法多变,不敢保证唯一,也不敢保证全对,如果错误欢迎指出,即刻修改。
一、现有表结构如下图
TABLENAME:afinfo
Id
name
age
birth
sex
memo
徐洪国
37
高中
王芳
26
本科
李达康
24
硕士
侯亮平
30
博士
徐夫子
27
大专
……
……
……
……
……
1)请编写sql语句对年龄进行升序排列
2)请编写sql语句查询对“徐”姓开头的人员名单
3)请编写sql语句修改“李达康”的年龄为“45”
4)请编写sql删除王芳这表数据记录。
二、现有以下学生表和考试信息表
学生信息表(student)
姓名name
学号code
张三
001
李四
002
马五
003
甲六
004
考试信息表(exam)
学号code
学科subject
成绩score
001
数学
80
002
数学
75
001
语文
90
002
语文
80
001
英语
90
002
英语
85
003
英语
80
004
英语
70
1)查询出所有学生信息,SQL怎么编写?
2)新学生小明,学号为005,需要将信息写入学生信息表,SQL语句怎么编写?
3)李四语文成绩被登记错误,成绩实际为85分,更新到考试信息表中,SQL语句怎么编写?
4)查询出各科成绩的平均成绩,显示字段为:学科、平均分,SQL怎么编写?
5)查询出所有学生各科成绩,显示字段为:姓名、学号、学科、成绩,并以学号与学科排序,没有成绩的学生也需要列出,SQL怎么编写?
6)查询出单科成绩最高的,显示字段为:姓名、学号、学科、成绩,SQL怎么编写?
7)列出每位学生的各科成绩,要求输出格式:姓名、学号、语文成绩、数学成绩、英语成绩,SQL怎么编写?
三、根据要求写出SQL语句
表结构:
student(s_no,s_name,s_age,sex) 学生表
teacher(t_no,t_name) 教师表
course(c_no,c_name,t_no) 课程表
sc(s_no,c_no,score) 成绩表
基础表数据(个人铺的):根据题目需要自行再铺入数据
1、查询“001”课程比“002”课程成绩高的所有学生的学号。
2、查询平均成绩大于60分的同学的学号和平均成绩。
3、查询所有同学的学号、姓名、选课数、总成绩。
4、查询姓李的老师的个数。
5、查询没学过“叶平”老师课的同学的学号、姓名
6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名。
7、查询学过“叶平”老师所教的所有课的同学的学号、姓名。
8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名。
9、查询所有课程成绩小于60分的同学的学号、姓名。
10、查询没有学全所有课的同学的学号、姓名。
11、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名。
12、查询至少学过学号为“1001”同学所有一门课的其他同学学号和姓名。
13、把“sc”表中“叶平”老师叫的课的成绩都更改为此课程的平均成绩。
14、查询和“1002”号同学学习的课程完全相同的其他同学学号和姓名。
15、删除学习“叶平”老师课的sc表记录。
16、向sc表中插入一些记录,这些记录要求符合一下条件:没有上过编号“003”课程的同学学号
17、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分。
18、按照平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“马克思”三门的课程成绩,按如下形式显示:学生ID,数据库,企业管理,马克思,有效课程数,有效平均分。
19、查询不同老师所教不同课程平均分从高到低显示。
20、查询如下课程成绩第3名到第6名的学生成绩单:企业管理(001)、马克思(002),UML(003),数据库(004)
21、统计各科成绩,各分数段人数:课程ID,课程名称,【100-85】,【85-70】,【70-60】,【<60】
22、查询每门课程被选修的学生数
23、查询出只选修了一门课程的全部学生的学号和姓名
24、查询同名同性学生名单,并统计同名人数。
25、查询1994年出生的学生名单(注:student表中sage列的类型是datatime)
26、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列。
27、查询平均成绩都大于85的所有学生的学号,姓名和平均成绩
28、查询课程名称为“数据库”且分数低于60的学生姓名和分数
29、查询所有学生的选课情况
30、查询任何一门课程成绩在90分以上的姓名、课程名称和分数。
31、查询不及格的课程,并按课程号从大到小排序。
32、求选修了课程的学生人数。
33、查询选修了“冯老师”所授课程的学生中,成绩最高的学生姓名及其成绩。
34、查询各个课程及相应的选修人数。
35、查询不同课程成绩相同的学生的学号、课程号、学生成绩。
36、查询每门课程最好的前两名。
37、检索至少选修两门课程的学生学号。
38、查询全部学生都选修的课程的课程号和课程名。
39、查询没有学过“叶平”老师讲授的任一门课程的学号姓名。
40、查询两门以上不及格课程的同学的学号及其平均成绩。
四、根据表1和表2的信息写出SQL
表1:books书表b
主码
列标题
列名
数据类型
宽度
小数位数
是否空值
书号
TNO
char
15
no
书名
TNAME
varchar
50
no
作者姓名
TAUTHOR
varchar
no
出版社编号
CNO
char
yes
书类
TCATEGORY
varchar
20
yes
价格
TPRICE
numeric
yes
表2:book_concern出版社表C
主码
列标题
列名
数据类型
宽度
小数位数
是否空值
出版社编号
CNO
char
NO
出版社名称
CNAME
varchar
20
NO
CPHONE
varchar
15
YES
出版社城市
CCITY
varchar
20
YES
1、查询出版过“计算机”类图书的出版社编号(若一个出版社出版过多部“计算机”类图书,则在查询结果中该出版社编号只显示一次)
2、查询南开大学出版社的“经济”类或“数学”类图书的信息。
3、查询编号为“20001”的出版社出版图书的平均价格。
4、查询至少出版过20套图书的出版社,在查询结果中按出版社编号的升序顺序显示满足条件的出版社编号、出版社名称和每个出版社出版的图书套数。
5、查询比编号为“20001”的出版社出版图书套数多的出版社编号。
五、一道关于group by的经典面试题:
有一张shop表如下,有三个字段article、author、price,选出每个author的price最高的记录(要包含所有字段)。
3、使用left join语句(毕竟子查询在有些时候,效率会很低)
六、用一条SQL语句查询出每门课都大于80分的学生
name
kecheng
fenshu
张三
语文
81
张三
数学
75
李四
语文
76
李四
数学
90
王五
语文
81
王五
数学
100
王五
英语
90
七、怎么把这样一个表
Year
month
amount
1991
1.1
1991
1.2
1991
1.3
1991
1.4
1992
2.1
1992
2.2
1992
2.3
1992
2.4
查成这样一个结果
year
M1
M2
M3
M4
1991
1.1
1.2
1.3
1.4
1992
2.1
2.2
2.3
2.4
八、已知表A =login_ftp记录着登录FTP服务器的计算机IP、时间等字段信息