当前位置:首页 » 编程语言 » 功能测试面试sql
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

功能测试面试sql

发布时间: 2023-08-21 19:15:44

sql面试题

1.
select
s.title,
count(p.id)
from
书表
s
left
join
评论
p
on
s.id=p.书表中的id
group
by
s.title
(注意:左外连接的作用是将评价数为0的书显示出来.count(p.id)和count(*)的区别是count(p.id)不计入p.id为null的行)
2.
select
top
1
s.title,
count(p.id)
from
书表
s
left
join
评论
p
on
s.id=p.书表中的id
group
by
s.title
order
by
2
desc
(以第2列倒序排序,取第1行)

㈡ sql的几个面试题

--1.查询全部学生的姓名和所学的课程名称及成绩
select s.Sname,o.Cname,c.Grade from Student s,enrolls c,Courses o where s.Sno=c.Sno and c.Cno=o.Cno
--2.找出所有学生的平均成绩和所学课程门数
select Sno,avg(grade) as '平均成绩',count(*) as '所学课程门数' from enrolls group by Sno;
--3.找出各课程的平均成绩,按课程号分组,且只选择学生超过3人的课程的成绩
select enrolls.Cno,cname,avg(grade) as '平均成绩' from enrolls,Courses where enrolls.cno=Courses.cno group by enrolls.Cno,cname having count(*)>=3;
--4.找出选修了全部课程的学生的姓名
select Sname from student where sno in(select sno from enrolls group by Sno having count(sno)=(select count(cno) from Courses))

㈢ sql面试题 不会做 都进来看看吧

才两张表,随便写写就出来了 你是没见过该死的bom 那才伤脑筋

--先建立测试用例:
create table users(Id Int,Name varchar(20),regDate date);
alter table users add constraint users_pk primary key(Id);
create table UploadInfo(Id Int,UserId Int,FileName varchar(20),foreign key(UserId) references users(Id));
insert into users values(1,'A',sysdate-1);
insert into users values(2,'B',sysdate-2);
insert into users values(3,'C',sysdate-3);
insert into users values(4,'D',sysdate-4);
insert into users values(5,'E',sysdate-5);
select*from users;

--随机插入上传数据的存储过程
create or replace procere InsertUploadInfoData is
i int:=0;
begin
for i in 1..100 loop
insert into UploadInfo values(i,trunc(DBMS_RANDOM.value(1,5)),'FileName '||trunc(DBMS_RANDOM.value(1,1000)));
end loop;
commit;
end ;

begin
InsertUploadInfoData;
end;

select*from UploadInfo;

--开始了

--第一题
select UserUploadRecord.Id,UserUploadRecord.UploadCount
from
(
select users.Id,count(UploadInfo.Id) as UploadCount from users
inner join UploadInfo on users.Id=UploadInfo.UserId --内联结
where users.regDate>=sysdate-3 and users.regDate<=sysdate --三天内
group by users.Id
order by UploadCount desc
) UserUploadRecord
where rownum=1 --取第一条记录
;

--创建用户名重复的测试用例
insert into users values(6,'A',sysdate-4);

--由于有外键约束,所以需先删除子表记录
delete from UploadInfo where UploadInfo.Userid
in
(
select users.id from users where (users.name,users.regdate) in
(
select users.name,max(users.regdate) from users group by users.name having count(users.id)>1 --取重复用户名的最大注册时间
)
)

--再删除父表,做法差不多
delete from users where (users.name,users.regdate) in
(
select users.name,max(users.regdate) from users group by users.name having count(users.id)>1
)

————————————————————
建表语法 测试用例都写给你了 还说运行不了?直接复制进去就行了

㈣ 软件测试SQL面试题

数据库,无外乎增删改查:

增:

insert into A表 values (value1,value2,value3......)向A表中新增数据

删:

delete from A表 ( where id=1) 删除A表(删除A表id=1的数据)如果删除某个测试数据,记得加where条件,否则整张表的数据都被删除,防止误操作!不过,数据可以回滚找回。

truncate A表:清除表数据,数据无法回滚。

drop A表:整表结构删除,即,这张表不存在了。

改:

update A表 set name='test' where id=1 修改id为1的name值为test

查:

1:左关联和右关联的区别?

答:左关联( left join )左表为主,左表数据全部显示,右表显示关联数据,无关联显示null,右关联( right join )相反。

2:模糊查询?

select * from A表 where name like ' %a% ' (name包含a字母)

查询结果: a , a bc,b a c,bc a

select * from A表 where name like ' a% ' (name值以a字母开头)

查询结果: a , a bc

select * from A表 where name like ' %a ' (name值以a字母结尾)

查询结果: a ,bc a

3:统计:count和sum

count统计表的 记录数 ,sum统计某列数值 总和 。

select count(*) from A表

select count(1) from A表

select count(列名) from A表

区别:

count( * ): 所有记录,包括null值

count( 1 ):所有记录,包括null值

count( 列名 ):列名有值得记录, 不包括null值

执行效率:

以前是count(1)比count(*)快,但现在count(*)底层算法优化,查询更快,所以推荐count(*)

统计有效数据的记录,count(列名)

select sum(列名) from A表 计算列名数值总和。

举例:

查询A表中,姓王的用户量

select count(*) from A where name like '王%'

Plus版

1:去重distinct,查询不重复记录的数据

必须放开头

select distinct 列名 from 表名(查询所有列名数据,去掉重复数据)

举例:

表A,查询考核等级grade,有哪些值

select distinct grade from A

2:分组group by,根据某个字段分组

select 列名 from 表名 group by 列名,一般会配合聚合函数一起使用

举例:

表A中,查询考核等级grade字段,不同值各多少人

select grade,count(*) from A group by grade

3:limit,查询结果返回的数量,多用于分页查询

select * from 表名 limit i,n i代表查询结果的索引值,默认从0开始,n返回查询的结果数。

举例:

订单表A,查询第21条到30条数据

select * from A limit 20,10

可能会问为什么不能直接用id查询?因为id不准确,可能存在id不连续的情况。如果某条数据被物理删除了呢?

何为物理删除和逻辑删除?

物理 删除 ,直接将某条数据,从表中删除。

逻辑 删除,仅通过某个字段标记删除,实际表中还存在。(比如:is_delete=1代表已删除,is_delete=0未删除)

4:排序order by 列名 asc(列名值升序排列)和order by 列名 desc(列名值降序排列)

举例:

用户表A,按照用户id升序(select查询默认根据主键升序,所以升序,不加order by也可以)

select * from A order by id asc同select *from A

用户表A,按照新建时间倒序

select * from A order by create_time desc

5:in和between查询某个范围的数值

举例:

in:查询指定数值的数据

between:查询某个范围内的数据

举例:

查询表A中,id=1和id=10的数据

select * from A where id in(1,10)

查询表A中,1月份新增的数据

select * from A where create_time between '2022-01-01' and '2022-01-31 23:59:59'

已知有如下4张表:

学生表:student(学号,学生姓名,出生年月,性别)

成绩表:score(学号,课程号,成绩)

课程表:course(课程号,课程名称,教师号)

教师表:teacher(教师号,教师姓名)

准备练习数据

1)创建学生表(student)

2)创建成绩表(score)

3)创建课程表(course)

4)教师表(teacher)

1)学生表添加数据

2)成绩表添加数据

3)课程表添加数据

4)教师表添加数据

简单查询

查询姓“猴”的学生名单

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

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

查询姓“孟”老师的个数

汇总分析

1.汇总分析

查询课程编号为“0002”的总成绩

查询选了课程的学生人数

2.分组

查询各科成绩的最高分和最低分, 以如下的形式显示:课程号,最高分,最低分

查询每门课程选修的学生数

3.分组结果的条件

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

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

分析:条件:怎么算姓名相同?按姓名分组后人数大于等于2,因为同名的人数大于等于2,分析出这一点很重要

查询不及格的课程并按课程号从大到小排列

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

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

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

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

第2步:再加上限制条件:

1)不及格课程

2)两门以上[不及格课程]

4.查询结构排序,分组的指定条件

查询学生的总成绩并进行排名

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

复杂查询

查询课程成绩小于60分学生的学号、姓名

【知识点】子查询

1.翻译成大白话

1)查询结果:学生学号,姓名

2)查询条件:所有课程成绩 < 60 的学生,需要从成绩表里查找,用到子查询

第1步,写子查询(所有课程成绩 < 60 的学生)

第2步,查询结果:学生学号,姓名,条件是前面1步查到的学号

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

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

查找1990年出生的学生名单

查询本月过生日的学生

工作中会经常遇到这样的业务问题:

如何找到每个类别下用户最喜欢的产品是哪个?

如果找到每个类别下用户点击最多的5个商品是什么?

这类问题其实就是常见的:分组取每组最大值、最小值,每组最大的N条(top N)记录。

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

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

每组最大的N条记录,查询各科成绩前两名的记录

第1步,查出有哪些组

我们可以按课程号分组,查询出有哪些组,对应这个问题里就是有哪些课程号

第2步:先使用order by子句按成绩降序排序(desc),然后使用limt子句返回topN(对应这个问题返回的成绩前两名)

第3步,使用union all 将每组选出的数据合并到一起

多表查询

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

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

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

㈤ 应届生在软件测试的面试

软件测试面试题大全-最真实的面试题

以下为童鞋去面试整理的面试问题。--真实软件测试面试题、真实公司所问的

适合人群:零基础学习软件测试、多年跳槽的人员

面试过程中也会有深挖的,这些就不在多写。还有些待整理的,慢慢补上、完善。

希望对各位有所帮助!来源--Dotest

1:个人介绍

2:友碰项目介绍

3:流程逻辑介绍

4:职责介绍

5:项目人数,分别负责的是什么

6:每日工作介绍

7:接口如何测试的?用例如何设计?

8:一个项目中大概有多少个接口

9:getpost的区别

10:常见的状态码是什么

11:postman、Jmetersoapui的区别

12:公司流程

13:需求评审是怎么进行的

14:测试计划怎么写的?重点是什么?

15:测试用例的思路?

16:如果我们没有原型图、需求的话,你怎么写用例

17:给你个appweb你能快速说下用例的设计思路吗?

18:app与web的不同点是什么?

19:测试报告的重点

20:什么是灰度测试

21:上线后的跟踪如何做的?

22:为什么要做上线后的回归测试

23:上线后发现的问题如何处理

24:什么是UAT测试,为什要做UAT测试

25:bug怎么描述的

26:用例怎么描述的

27:优先级和严重程度如何划分

28:如果和开发有歧义的话怎么办

29:你映像bug是什么?

30:你发现一个bug如何定位的

31:自动化测试如何进行的?用的什么框架

32:常用的定位方法是什么?

33:功能测试与自动化的区别

34:什么样的项目适合自动化

35:自动化的好处是什么

36:自动冲肢化的劣处是什么

37:你感觉你写的用例覆盖全面吗

38:上线后发现的问题如何处理

39:linux常用的命令

40:linux常用的文件

41:linux环境搭建的步骤

42:常用sql语句

43:你们公司用sql吗,怎么用的

44:兼容测试你怎么做的

45:手机是如何考虑的

46:兼容测试的重点是什么

47:如果手机不够的话你怎么解决

48:真机和模拟器的区别是什么

49:你如何保证兼容的覆盖率

50:怎么抓手机的数据包的?如何设置

51:通过抓取数据包主要测试什么

52:性能测试做吗?怎么做的

53:python的遍历是什么

54:随意丢个软件说下具体的用例

55:你们公司多长时间迭代一次

56:迭代测试需要注意什么

57:你映像最深的bug是什么

58:你的期望薪资

59:你看比预期低2k,你能接受吗

60:我们公司加班多,能接受吗

61:能接受出差吗?

62:路程有点远

63:你为什么要离职

64:你感觉你的优势在哪?

65:你未来的规划是什么

66:你对下一个工作岗位有什么期望或要求吗

67:对你的领导有什么要求吗

68:你感觉你上家公司怎么样;能说下优缺点吗?好判谈

69:你感觉你上家领导怎么样;能说下优缺点吗?

70:有女朋友男朋友吗?

71:打算什么时候要孩子

72:你看你有什么想问的吗

73:你大概什么时候能入职

74:最近面试多吗?

75:手上有offer吗?

76:你是什么时候开始找工作的?

77:你从上家公司离职已经有好几天了,是刚开始找工作吗?为什么一直没找工作

㈥ SQL语句问题 面试题

select * from Voucher where 发生额>(select 发生额 from Voucher where 科目代码=101)

㈦ 一道软件测试面试题中的sql题目,求解

1、select class.c_name,count(student.sex) as '女生人数',avg(student.score) as '女生平均分' from student,class,student_class where student.s_id=student_class.c_id and class.c_id=student_class.s_id and student.sex='女' group by class.c_name ;
2、select class.c_name,count(case when student.sex='女' then student.sex end) as '女生人数',avg(case when student.sex='女' then student.score else 0 end) as '女生平均分' from student,class,student_class where student.s_id=student_class.c_id and class.c_id=student_class.s_id group by class.c_name ;

㈧ SQL面试题

推荐的学习Java的学习顺序如下: 学习Java SE部分的内容,这部分是基础内容。掌握的越扎实,后面的内容学习起来就越容易。学习SQL和数据库的内容 ,这个也是非常基础的内容,举个例子:程序员的面试题中一定会有SQL部分的考试。学习HTML、css、JavaScript的内容。学习,JSP、Servlet、JavaBean、标记库、JSTL、MVC、JSP EL等Web编程的部分学习Struts 或者Spring MVC。二者取其一即可,推荐选Struts 学习Java与XML ,重点掌握使用Java技术对XML文件的解析学习Java EE的核心技术 ,例如:JNDI、EJB3等,同时还需要学习使用与配置应用服务器,例如:webLogic Server,Websphere,JBoss 学习Hibernate 等持久层的技术学习Spring 学习AJAX 学习ANT、Subversion等开发工具,熟悉常见的软件开发模型,例如:rup、XP 学习OOA与OOD,uml,设计模式学习Web Services、SOA的原理与应用开发 最后,现在很多公司都使用Linux系统做为服务器系统,并且使用Linux系统进行程序的开发(都是出于使用正版的考虑),所以Linux系统的安装、使用和简单管与配置,也是需要学习,这部分内容,跟其他内容没有关联,可以在任何时候学。推荐学习完SQL与数据库之后进行学习。 你要想找到一份不错的Java程序员工作,最基本的也要把1-12都学习了,当然有的内容需要深入掌握,有的内容可以慢慢的深入掌握的。

㈨ sql面试题

1、首先,将三个表建立一个视图,可以直接在企业管理器里面建,也可以将下面的代码直接复制到查询分析器里面执行:
SELECT dbo.students.studentname, dbo.class.classname, dbo.score.course,
dbo.score.score
FROM dbo.class INNER JOIN
dbo.students ON dbo.class.classid = dbo.students.classid INNER JOIN
dbo.score ON dbo.students.studentid = dbo.score.studentid

2、然后,求 各科 班分数 最高的同学的名字,班级名称,课程名称,分数 ,代码如下:

select classname as 班级,course as 学科,max(score) as 最高分,(select top 1 studentname from scoreview where classname=x.classname and course=x.course order by score desc) as 最好成绩的学生 from scoreview x group by classname,course
------------
已经经过测试,你自己可以试试

㈩ SQL查询面试题与答案

SQL查询面试题与答案

SQL语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。下面是我搜集的SQL查询面试题与答案,欢迎大家阅读。

SQL查询面试题与答案一

1.一道SQL语句面试题,关于group by表内容:

2005-05-09 胜

2005-05-09 胜

2005-05-09 负

2005-05-09 负

2005-05-10 胜

2005-05-10 负

2005-05-10 负

如果要生成下列结果, 该如何写sql语句?

胜 负

2005-05-09 2 2

2005-05-10 1 2

------------------------------------------

create table #tmp(rq varchar(10),shengfu nchar(1))

insert into #tmp values('2005-05-09','胜')

insert into #tmp values('2005-05-09','胜')

insert into #tmp values('2005-05-09','负')

insert into #tmp values('2005-05-09','负')

insert into #tmp values('2005-05-10','胜')

insert into #tmp values('2005-05-10','负')

insert into #tmp values('2005-05-10','负')

1)select rq, sum(case when shengfu='胜' then 1 else 0 end)'胜',sum(case when shengfu='负' then 1 else 0 end)'负' from #tmp group by rq

2) select N.rq,N.胜,M.负 from (

select rq,胜=count(*) from #tmp where shengfu='胜'group by rq)N inner join

(select rq,负=count(*) from #tmp where shengfu='负'group by rq)M on N.rq=M.rq

3)select a.col001,a.a1 胜,b.b1 负 from

(select col001,count(col001) a1 from temp1 where col002='胜' group by col001) a,

(select col001,count(col001) b1 from temp1 where col002='负' group by col001) b

where a.col001=b.col001

2.请教一个面试中遇到的SQL语句的查询问题

表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。

------------------------------------------

select (case when a>b then a else b end ),

(case when b>c then b esle c end)

from table_name

3.面试题:一个日期判断的sql语句?

请取出tb_send表中日期(SendTime字段)为当天的所有记录?(SendTime字段为datetime型,包含日期与时间)

------------------------------------------

select * from tb where datediff(dd,SendTime,getdate())=0

4.有一张表,里面有3个字段:语文,数学,英语。其中有3条记录分别表示语文70分,数学80分,英语58分,请用一条sql语句查询出这三条记录并按以下条件显示出来(并写出您的思路):

大于或等于80表示优秀,大于或等于60表示及格,小于60分表示不及格。

显示格式:

语文 数学 英语

及格 优秀 不及格

------------------------------------------

select

(case when 语文>=80 then '优秀'

when 语文>=60 then '及格'

else '不及格') as 语文,

(case when 数学>=80 then '优秀'

when 数学>=60 then '及格'

else '不及格') as 数学,

(case when 英语>=80 then '优秀'

when 英语>=60 then '及格'

else '不及格') as 英语,

from table

5.在sqlserver2000中请用sql创建一张用户临时表和系统临时表,里面包含两个字段ID和IDValues,类型都是int型,并解释下两者的区别?

------------------------------------------

用户临时表:create table #xx(ID int, IDValues int)

系统临时表:create table ##xx(ID int, IDValues int)

区别:

用户临时表只对创建这个表的用户的Session可见,对其他进程是不可见的.

当创建它的进程消失时这个临时表就自动删除.

全局临时表对整个SQL Server实例都可见,但是所有访问它的Session都消失的时候,它也自动删除.

6.sqlserver2000是一种大型数据库,他的`存储容量只受存储介质的限制,请问它是通过什么方式实现这种无限容量机制的。

------------------------------------------

它的所有数据都存储在数据文件中(*.dbf),所以只要文件够大,SQL Server的存储容量是可以扩大的.

SQL Server 2000 数据库有三种类型的文件:

主要数据文件

主要数据文件是数据库的起点,指向数据库中文件的其它部分。每个数据库都有一个主要数据文件。主要数据文件的推荐文件扩展名是 .mdf。

次要数据文件

次要数据文件包含除主要数据文件外的所有数据文件。有些数据库可能没有次要数据文件,而有些数据库则有多个次要数据文件。次要数据文件的推荐文件扩展名是 .ndf。

日志文件

日志文件包含恢复数据库所需的所有日志信息。每个数据库必须至少有一个日志文件,但可以不止一个。日志文件的推荐文件扩展名是 .ldf。

7.请用一个sql语句得出结果

从table1,table2中取出如table3所列格式数据,注意提供的数据及结果不准确,只是作为一个格式向大家请教。

如使用存储过程也可以。

table1

月份mon 部门dep 业绩yj

-------------------------------

一月份 01 10

一月份 02 10

一月份 03 5

二月份 02 8

二月份 04 9

三月份 03 8

table2

部门dep 部门名称dname

--------------------------------

01 国内业务一部

02 国内业务二部

03 国内业务三部

04 国际业务部

table3 (result)

部门dep 一月份 二月份 三月份

--------------------------------------

01 10 null null

02 10 8 null

03 null 5 8

04 null null 9

------------------------------------------

1)

select a.部门名称dname,b.业绩yj as '一月份',c.业绩yj as '二月份',d.业绩yj as '三月份'

from table1 a,table2 b,table2 c,table2 d

where a.部门dep = b.部门dep and b.月份mon = '一月份' and

a.部门dep = c.部门dep and c.月份mon = '二月份' and

a.部门dep = d.部门dep and d.月份mon = '三月份' and

2)

select a.dep,

sum(case when b.mon=1 then b.yj else 0 end) as '一月份',

sum(case when b.mon=2 then b.yj else 0 end) as '二月份',

sum(case when b.mon=3 then b.yj else 0 end) as '三月份',

sum(case when b.mon=4 then b.yj else 0 end) as '四月份',

sum(case when b.mon=5 then b.yj else 0 end) as '五月份',

sum(case when b.mon=6 then b.yj else 0 end) as '六月份',

sum(case when b.mon=7 then b.yj else 0 end) as '七月份',

sum(case when b.mon=8 then b.yj else 0 end) as '八月份',

sum(case when b.mon=9 then b.yj else 0 end) as '九月份',

sum(case when b.mon=10 then b.yj else 0 end) as '十月份',

sum(case when b.mon=11 then b.yj else 0 end) as '十一月份',

sum(case when b.mon=12 then b.yj else 0 end) as '十二月份',

from table2 a left join table1 b on a.dep=b.dep

8.华为一道面试题

一个表中的Id有多个记录,把所有这个id的记录查出来,并显示共有多少条记录数。

------------------------------------------

select id, Count(*) from tb group by id having count(*)>1

select * from(select count(ID) as count from table group by ID)T where T.count>1

SQL查询面试题与答案二

1、查询不同老师所教不同课程平均分从高到低显示

SELECT max(Z.T#) AS 教师ID,MAX(Z.Tname) AS 教师姓名,C.C# AS 课程ID,MAX(C.Cname) AS 课程名称,AVG(Score) AS 平均成绩

FROM SC AS T,Course AS C ,Teacher AS Z

where T.C#=C.C# and C.T#=Z.T#

GROUP BY C.C#

ORDER BY AVG(Score) DESC

2、查询如下课程成绩第 3 名到第 6 名的学生成绩单:企业管理(001),马克思(002),UML (003),数据库(004)

[学生ID],[学生姓名],企业管理,马克思,UML,数据库,平均成绩

SELECT DISTINCT top 3

SC.S# As 学生学号,

Student.Sname AS 学生姓名 ,

T1.score AS 企业管理,

T2.score AS 马克思,

T3.score AS UML,

T4.score AS 数据库,

ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) as 总分

FROM Student,SC LEFT JOIN SC AS T1

ON SC.S# = T1.S# AND T1.C# = '001'

LEFT JOIN SC AS T2

ON SC.S# = T2.S# AND T2.C# = '002'

LEFT JOIN SC AS T3

ON SC.S# = T3.S# AND T3.C# = '003'

LEFT JOIN SC AS T4

ON SC.S# = T4.S# AND T4.C# = '004'

WHERE student.S#=SC.S# and

ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)

NOT IN

(SELECT

DISTINCT

TOP 15 WITH TIES

ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)

FROM sc

LEFT JOIN sc AS T1

ON sc.S# = T1.S# AND T1.C# = 'k1'

LEFT JOIN sc AS T2

ON sc.S# = T2.S# AND T2.C# = 'k2'

LEFT JOIN sc AS T3

ON sc.S# = T3.S# AND T3.C# = 'k3'

LEFT JOIN sc AS T4

ON sc.S# = T4.S# AND T4.C# = 'k4'

ORDER BY ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) DESC);

3、统计打印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]

SELECT SC.C# as 课程ID, Cname as 课程名称

,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85]

,SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 - 70]

,SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 - 60]

,SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS [60 -]

FROM SC,Course

where SC.C#=Course.C#

GROUP BY SC.C#,Cname;

4、查询学生平均成绩及其名次

SELECT 1+(SELECT COUNT( distinct 平均成绩)

FROM (SELECT S#,AVG(score) AS 平均成绩

FROM SC

GROUP BY S#

) AS T1

WHERE 平均成绩 > T2.平均成绩) as 名次,

S# as 学生学号,平均成绩

FROM (SELECT S#,AVG(score) 平均成绩

FROM SC

GROUP BY S#

) AS T2

ORDER BY 平均成绩 desc;

5、查询各科成绩前三名的记录:(不考虑成绩并列情况)

SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数

FROM SC t1

WHERE score IN (SELECT TOP 3 score

FROM SC

WHERE t1.C#= C#

ORDER BY score DESC

)

ORDER BY t1.C#;

6、查询每门课程被选修的学生数

select c#,count(S#) from sc group by C#;

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

select SC.S#,Student.Sname,count(C#) AS 选课数

from SC ,Student

where SC.S#=Student.S# group by SC.S# ,Student.Sname having count(C#)=1;

8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;

Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') score2

from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2

9、查询所有课程成绩小于60分的同学的学号、姓名;

select S#,Sname

from Student

where S# not in (select Student.S# from Student,SC where S.S#=SC.S# and score>60);

10、查询没有学全所有课的同学的学号、姓名;

select Student.S#,Student.Sname

from Student,SC

where Student.S#=SC.S# group by Student.S#,Student.Sname having count(C#) <(select count(C#) from Course);

11、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;

select S#,Sname from Student,SC where Student.S#=SC.S# and C# in select C# from SC where S#='1001';

12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名;

select distinct SC.S#,Sname

from Student,SC

where Student.S#=SC.S# and C# in (select C# from SC where S#='001');

13、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;

update SC set score=(select avg(SC_2.score)

from SC SC_2

where SC_2.C#=SC.C# ) from Course,Teacher where Course.C#=SC.C# and Course.T#=Teacher.T# and Teacher.Tname='叶平');

14、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名;

select S# from SC where C# in (select C# from SC where S#='1002')

group by S# having count(*)=(select count(*) from SC where S#='1002');

15、删除学习“叶平”老师课的SC表记录;

Delect SC

from course ,Teacher

where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='叶平';

16、向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“003”课程的同学学号、2、

号课的平均成绩;

Insert SC select S#,'002',(Select avg(score)

from SC where C#='002') from Student where S# not in (Select S# from SC where C#='002');

17、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示: 学生ID,,数据库,企业管理,英语,有效课程数,有效平均分

SELECT S# as 学生ID

,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='004') AS 数据库

,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='001') AS 企业管理

,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='006') AS 英语

,COUNT(*) AS 有效课程数, AVG(t.score) AS 平均成绩

FROM SC AS t

GROUP BY S#

ORDER BY avg(t.score)

18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分

SELECT L.C# As 课程ID,L.score AS 最高分,R.score AS 最低分

FROM SC L ,SC AS R

WHERE L.C# = R.C# and

L.score = (SELECT MAX(IL.score)

FROM SC AS IL,Student AS IM

WHERE L.C# = IL.C# and IM.S#=IL.S#

GROUP BY IL.C#)

AND

R.Score = (SELECT MIN(IR.score)

FROM SC AS IR

WHERE R.C# = IR.C#

GROUP BY IR.C#

);

19、按各科平均成绩从低到高和及格率的百分数从高到低顺序

SELECT t.C# AS 课程号,max(course.Cname)AS 课程名,isnull(AVG(score),0) AS 平均成绩

,100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分数

FROM SC T,Course

where t.C#=course.C#

GROUP BY t.C#

ORDER BY 100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) DESC

20、查询如下课程平均成绩和及格率的百分数(用"1行"显示): 企业管理(001),马克思(002),OO&UML (003),数据库(004)

SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0 END)/SUM(CASE C# WHEN '001' THEN 1 ELSE 0 END) AS 企业管理平均分

,100 * SUM(CASE WHEN C# = '001' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '001' THEN 1 ELSE 0 END) AS 企业管理及格百分数

,SUM(CASE WHEN C# = '002' THEN score ELSE 0 END)/SUM(CASE C# WHEN '002' THEN 1 ELSE 0 END) AS 马克思平均分

,100 * SUM(CASE WHEN C# = '002' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '002' THEN 1 ELSE 0 END) AS 马克思及格百分数

,SUM(CASE WHEN C# = '003' THEN score ELSE 0 END)/SUM(CASE C# WHEN '003' THEN 1 ELSE 0 END) AS UML平均分

,100 * SUM(CASE WHEN C# = '003' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '003' THEN 1 ELSE 0 END) AS UML及格百分数

,SUM(CASE WHEN C# = '004' THEN score ELSE 0 END)/SUM(CASE C# WHEN '004' THEN 1 ELSE 0 END) AS 数据库平均分

,100 * SUM(CASE WHEN C# = '004' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '004' THEN 1 ELSE 0 END) AS 数据库及格百分数

FROM SC

;