文档库 最新最全的文档下载
当前位置:文档库 › Oracle笔试题

Oracle笔试题

客户表a(id,name,address),登陆流水表b(id,time),购物流水表,c(id,time,productid productnum)

1.求每个客户的最新登陆时间time,姓名name,客户id?

SELECT a.id,name,b1.d

FROM a JOIN (SELECT id,MAX(time) AS d

FROM b

GROUP BY id) b1

ON a.id=b.id;

SELECT a.id,name,MAX(time)

FROM a JOIN b ON a.id=b.id

GROUP BY a.id,name

2.查最新登陆并且已经购买商品的客户id,name,登陆的时间time(一条sql语句)

SELECT a.id,name,b1.d

FROM a,(SELECT id,MAX(time) AS d

FROM b

GROUP BY id) b1

WHERE a.id=b1.id

AND EXISTS (SELECT ‘x’FROM c WHERE id=a.id);

SELECT a.id,name,b1.d

FROM a,(SELECT id,MAX(time) AS d

FROM b

GROUP BY id) b1,c

WHERE a.id=b1.id

AND a.id=c.id;

一个表student中有如下几列classid(班级), id(学号), grade(成绩)

1.计算各个班的平均成绩

SELECT classid,A VG(grade)

FROM student

GROUP BY classid

2.查找比该班平均成绩高的学生的班级classid,学号id,成绩grade

SELECT classid,id,grade

FROM student,(SELECT classid,A VG(grade) AS avg_grade

FROM student

GROUP BY classid) a

WHERE student.classid=a.classid AND student.grade>a. avg_grade;

SELECT classid,id,grade

FROM student s

WHERE grade>(SELECT A VG(grade) FROM student WHERE classid=s.classid)

人员情况表(employee)中字段包括,员工号(ID),姓名(name),年龄(age),文化程度(wh):包括四种情况(本科以上,大专,高中,初中以下),现在我要根据年龄字段查询统计出:表中文化程度为本科以上,大专,高中,初中以下,各有多少人,占总人数多少。结果如下:

学历年龄人数百分比

本科以上20 34 14%

大专20 33 13%

高中20 33 13%

初中以下20 100 40%

本科以上21 50 20%

create table emp1(id number,name varchar2(10),age int,wh varchar2(20));

insert into emp1

select 1,'tom',20,'本科以上' from dual

union all select 2,'rose',20,'本科以上' from dual

union all select 3,'aa',21,'本科以上' from dual

union all select 4,'bb',21,'大专' from dual

union all select 5,'cc',21,'大专' from dual

union all select 6,'dd',21,'高中' from dual

union all select 7,'ee',21,'初中以下' from dual;

SELECT wh,age,COUNT(id),ROUND(COUNT(id)/(SELECT COUNT(id) FROM emp1)*100)||'%' AS "百分比"

FROM emp1

GROUP BY wh,age

ORDER BY wh;

统计出每个教师每门课的及格人数和及格率。

create table rock (教师ID number,学生ID number,学科名称varchar2(40),成绩number); insert into rock values(1,1,'数学',80);

insert into rock values(2,3,'英语',61);

insert into rock values(2,4,'英语',59);

insert into rock values(3,5,'语文',62);

insert into rock values(3,6,'语文',58);

insert into rock values(1,7,'数学',81);

commit;

SELECT A.教师ID,A.学科名称,A.及格人数,ROUND(A.及格人数/B.人数*100)||'%' AS "及格率"

FROM (SELECT 教师ID,学科名称,COUNT(学生ID) AS 及格人数

FROM rock

WHERE 成绩>60

GROUP BY 教师ID,学科名称

) A,

(SELECT 教师ID,学科名称,COUNT(学生ID) AS 人数

FROM rock

GROUP BY 教师ID,学科名称

) B

WHERE A.教师ID=B.教师ID

AND A.学科名称=B.学科名称;

有一张表Test有字段:ColA,ColB,ColC,ColD ,怎么每次取数据都能把这表中数据最中间的一条数据取出来?

SELECT *

FROM (SELECT emp.*,rownum AS r FROM employees emp) e

WHERE r=ceil((SELECT COUNT(employee_id) FROM employees)/2);

为管理业务培训信息,建立3个表:

S(S#,SN,SD,SA)S#,SN,SD,SA分别代表学号,学员姓名,所属单位,学员年龄

C(C#,CN)C#,CN分别代表课程编号,课程名称

SC(S#,C#,G) S#,C#,G分别代表学号,所选的课程编号,学习成绩

1、使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名?

2、使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位?

3、使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位?

4、查询选修了课程的学员人数

5、查询选修课程超过5门的学员学号和所属单位?

S (SNO,SNAME) 学生关系。SNO 为学号,SNAME 为姓名

C (CNO,CNAME,CTEACHER) 课程关系。CNO 为课程号,CNAME 为课程名,CTEACHER 为任课教师

SC(SNO,CNO,SCGRADE) 选课关系。SCGRADE 为成绩

1. 找出没有选修过“李明”老师讲授课程的所有学生姓名

2. 列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩

3. 列出既学过“1”号课程,又学过“2”号课程的所有学生姓名

4. 列出“1”号课成绩比“2”号课成绩高的所有学生的学号

5. 列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩

相关文档