创建学生表,成绩表,教师表,课程表,分别添加数据信息

create table student(
sno varchar2(10) primary key,
sname varchar2(20),
sage number(2),
ssex varchar2(5)
);
create table teacher(
tno varchar2(10) primary key,
tname varchar2(20)
);
create table course(
cno varchar2(10),
cname varchar2(20),
tno varchar2(20),
constraint pk_course primary key (cno,tno)
);
create table sc(
sno varchar2(10),
cno varchar2(10),
score number(4,2),
constraint pk_sc primary key (sno,cno)
);
/*******初始化学生表的数据******/
insert into student values ('s001','张三',23,'男');
insert into student values ('s002','李四',23,'男');
insert into student values ('s003','吴鹏',25,'男');
insert into student values ('s004','琴沁',20,'女');
insert into student values ('s005','王丽',20,'女');
insert into student values ('s006','李波',21,'男');
insert into student values ('s007','刘玉',21,'男');
insert into student values ('s008','萧蓉',21,'女');
insert into student values ('s009','陈萧晓',23,'女');
insert into student values ('s010','陈美',22,'女');
commit;
/******************初始化教师表***********************/
insert into teacher values ('t001', '刘阳');
insert into teacher values ('t002', '谌燕');
insert into teacher values ('t003', '胡明星');
commit;
/***************初始化课程表****************************/
insert into course values ('c001','J2SE','t002');
insert into course values ('c002','Java Web','t002');
insert into course values ('c003','SSH','t001');
insert into course values ('c004','Oracle','t001');
insert into course values ('c005','SQL SERVER 2005','t003');
insert into course values ('c006','C#','t003');
insert into course values ('c007','JavaScript','t002');
insert into course values ('c008','DIV+CSS','t001');
insert into course values ('c009','PHP','t003');
insert into course values ('c010','EJB3.0','t002');
commit;
/***************初始化成绩表***********************/
insert into sc values ('s001','c001',78.9);
insert into sc values ('s002','c001',80.9);
insert into sc values ('s003','c001',81.9);
insert into sc values ('s004','c001',60.9);
insert into sc values ('s001','c002',82.9);
insert into sc values ('s002','c002',72.9);
insert into sc values ('s003','c002',81.9);
insert into sc values ('s001','c003','');
commit;

1、查询“c001”课程比“c002”课程成绩高的所有学生的学号;

select s.* from
(select * from sc s where cno='c001') s,
(select * from sc s1 where cno='c002')s1
where s.sno=s1.sno and s.score<s1.score;

2、查询平均成绩大于60 分的同学的学号和平均成绩;

select sno,avg(score)  from sc group by sno having  avg(score)>60 ;

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

select  sc.*,sname from
(select sc.sno,count(cno)as"选课数",sum(score)as"总成绩" from sc group by sno)
sc,student s where sc.sno=s.sno

4、查询姓“刘”的老师的个数;

select count(*)from teacher where tname like '刘%'

5、查询没学过“谌燕”老师课的同学的学号、姓名;

select * from student st1 where st1.sno not in(
select distinct st.sno from student st left join sc s on s.sno=st.sno
left join course c on s.cno=c.cno
where c.tno =(select tno from teacher where tname='谌燕'))

6、查询学过“c001”并且也学过编号“c002”课程的同学的学号、姓名;

select stu.sno,stu.sname,sc.cno from sc inner join student stu on sc.sno=stu.sno inner join sc s on s.sno=sc.sno where s.cno='c001' and sc.cno='c002'

7、查询学过“谌燕”老师所教的所有课的同学的学号、姓名;

select stu.sno,stu.sname from student stu join sc sc
on stu.sno=sc.sno join teacher te inner join course cou
on cou.tno=te.tno on sc.cno=cou.cno where tname='谌燕' group by stu.sname,stu.sno ;

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

select s.* from
(select * from sc s where cno='c001') s,
(select * from sc s1 where cno='c002')s1
where s.sno=s1.sno and s.score<s1.score;

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

select stu.sno,stu.sname,s.score from sc s inner join student  stu on stu.sno=s.sno where  score<60;

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

select stu.sno,stu.sname,count(cno) from student stu left join sc on stu.sno=sc.sno
group by stu.sno,stu.sname having count(cno)<(select count(distinct cno)from course)

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

select stu.sno,max(sname),max(sc.cno),max(sc.score)  from  sc sc inner join student stu on sc.sno=stu.sno where stu.sno <>'s001'and sc.cno in(
select cno from sc where sno='s001')group by stu.sno

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

select stu.sno,stu.sname from sc sc inner join student stu on sc.sno=stu.sno where sc.sno<>'s001' and sc.cno in(
select cno from sc where sno='s001')

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

update  sc  set score= (select avg(s.score) from  course co inner join teacher te
on co.tno=te.tno inner join sc s on s.cno=co.cno where co.tno=te.tno and te.tname='谌燕' ) where cno in(select cou.cno from course cou,teacher tea
where cou.tno=tea.tno and tea.tname='谌燕' group by cou.cno);

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

select * from
(select * from sc where sno='s001') sc, student st where sc.sno=st.sno;

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

delete from sc where sc.cno in(
select co.cno from course co,sc sc,teacher t
where t.tno=co.tno and t.tname='谌燕' group by co.cno) ;

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

 insert into sc select student.sno,'c002',(select avg(score) from sc  where cno='c002')
from student where sno not in( select sno from sc where cno='c002' )

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

select cno, max(score),min(score) from sc group by cno

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

select sc.cno,max(co.cname), avg(score),sum(case when score>=60 then 1 else 0 end)/count(*)*100as"及格率"
from course co,sc sc where co.cno=sc.cno group by sc.cno order by avg(score) desc;

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

select sc.cno,max(t.tname),max(score),max(co.cname),avg(score)
from sc sc ,course co,teacher t where sc.cno=co.cno and co.tno=t.tno
group by sc.cno order by avg(score) desc;

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

select sc.cno,c.cname ,
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 "[70-85]",
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 inner join course c on sc.cno=c.cno where sc.cno=c.cno group by sc.cno,c.cname

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

select co.cname  from
(select cname,sc.score,sc.sno from sc sc inner join course c on c.cno=sc.cno order by score desc group by cname ) c,course co
group by co.cname

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

select cname, count(*)from course group by cname;

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

select sc.*,sname from(
select sno,count(cno)as"选课数量" from sc group by sno having count(cno)=1 )sc,student s where sc.sno=s.sno

24、查询男生、女生人数

select ssex, count(*) from student group by ssex; 

25、查询姓“张”的学生名单

select *from student where sname like '张%'

26、查询同名同性学生名单,并统计同名人数

select sname,count(*) from student group by sname  having count(*)>1

27、1981 年出生的学生名单(注:Student 表中Sage 列的类型是number)

select *from student where to_char(sysdate,'yyyy')-sage=1998

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

select cno,avg(score) from sc group by cno order by avg(score) asc ,cno desc

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

select sc.sno,sname,sc.cno,avg(score) from student inner join sc on student.sno=sc.sno
group by cno,sc.sno,sname having avg(score)>85

30、查询课程名称为“数据库”,且分数低于60 的学生姓名和分数

select * from sc  inner join course cou on cou.cno=sc.cno where cou.cname='oracle' and score<60

31、查询所有学生的选课情况;

select stu.sno,stu.sname,sc.cno,cou.cname from student
stu inner join sc on stu.sno=sc.sno inner join
course cou on cou.cno=cou.cno where sc.sno=stu.sno and sc.cno=cou.cno

32、查询任何一门课程成绩在70 分以上的姓名、课程名称和分数;

select stu.sno,stu.sname,sc.cno,cou.cname,sc.score from student stu inner join sc on stu.sno=sc.sno inner join course cou on cou.cno=cou.cno 

where sc.sno=stu.sno and sc.cno=cou.cno and sc.score>70

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

select cou.cno,cou.cname,sc.score from sc inner join course cou on sc.cno=cou.cno where score<60 order by score desc

34、查询课程编号为c001 且课程成绩在80 分以上的学生的学号和姓名;

select stu.sno,stu.sname,sc.cno,sc.score from  sc  inner join student stu on sc.sno=stu.sno where cno='c001' and score>80

35、求选了课程的学生人数

select count(distinct sno) from sc

36、查询选修“谌燕”老师所授课程的学生中,成绩最高的学生姓名及其成绩

select cou.cname,max(sc.score) from student stu
inner join sc on stu.sno=sc.sno inner join course cou on sc.cno=cou.cno
inner join teacher te on te.tno =cou.tno where te.tname='谌燕' group by cou.cname ;

37、查询各个课程及相应的选修人数

select sc.cno,cou.cname,count(cou.cname) from course cou inner join sc on cou.cno=sc.cno group by sc.cno,cou.cname

38、查询不同课程成绩相同的学生的学号、课程号、学生成绩

select a.* from sc a ,sc b where a.cno<>b.cno and a.score=b.score 

39、查询每门功课成绩最好的前两名

select s1.cno,s1.score from sc s1 
where (select count(cno) from sc s2 where s2.cno=s1.cno AND s1.score<s2.score)<2 order by cno asc,score desc;

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

select cno,count(sno)  from sc group by cno having count(cno)>10 order by count(sno) desc

41、检索至少选修两门课程的学生学号

select sno,count(cno) from sc group by sno having count(cno)>1

42、查询全部学生都选修的课程的课程号和课程名

select cou.cno,cou.cname from sc left join course cou on sc.cno=cou.cno group by cou.cno,cou.cname

43、查询没学过“谌燕”老师讲授的任一门课程的学生姓名

select stu.sno,stu.sname,cou.cname from teacher te inner join course cou on te.tno=cou.tno inner join sc on sc.cno=cou.cno inner join student stu on sc.sno=stu.sno  where  te.tname<>'谌燕'

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

select sc.sno,avg(score) from sc where sno in(
select sno from sc where score<60 group by sno having count(sno)>1)group by sc.sno

45、检索“c004”课程分数小于60,按分数降序排列的同学学号

select * from sc where cno='c001'and score>60  order by score desc ; 

46、删除“s002”同学的“c001”课程的成绩

delete from sc where sno='s002' and cno='c001'; 

orale数据库的SQL查询的更多相关文章

  1. oracle数据库元数据SQL查询

    oracle数据库经典SQL查询 .查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size from ...

  2. erlang mnesia 数据库实现SQL查询

    Mnesia是一个分布式数据库管理系统,适合于电信和其它需要持续运行和具备软实时特性的Erlang应用,越来越受关注和使用,但是目前Mnesia资料却不多,很多都只有官方的用户指南.下面的内容将着重说 ...

  3. Python全栈 MySQL 数据库 (SQL查询、备份、恢复、授权)

    ParisGabriel              每天坚持手写  一天一篇  决定坚持几年 为了梦想为了信仰    开局一张图   今天接着昨天的说   索引有4种:      普通 索引 :ind ...

  4. Android adb使用sqlite3对一个数据库进行sql查询

    sqlite是Android下集成的一个轻量级数据库,我们可以通过adb程序进入数据库命令行,对数据进行查询,具体操作如下: ①打开windows的cmd ②输入adb shell.此时进入了该安卓系 ...

  5. 在数据库中sql查询很快,但在程序中查询较慢的解决方法

    在写java的时候,有一个方法查询速度比其他方法慢很多,但在数据库查询很快,原来是因为程序中使用参数化查询时参数类型错误的原因 select * from TransactionNo, fmis_Ac ...

  6. [转载]Oracle数据库基础--SQL查询经典例题

    Oracle基础练习题,采用Oracle数据库自带的表,适合初学者,其中包括了一些简单的查询,已经具有Oracle自身特点的单行函数的应用 本文使用的实例表结构与表的数据如下: emp员工表结构如下: ...

  7. Oracle数据库基础--SQL查询经典例题

    Oracle基础练习题,采用Oracle数据库自带的表,适合初学者,其中包括了一些简单的查询,已经具有Oracle自身特点的单行函数的应用 本文使用的实例表结构与表的数据如下: emp员工表结构如下: ...

  8. Oracle数据库提高sql查询效率总结

    我们要做到不但会写SQL,还要做到写出性能优良的SQL语句. (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句 ...

  9. 解决用 VB 中用 ADO 访问 数据库时 SQL 查询处理 Null 值的问题( 使用 iff(isNull(字段), 为空时的值,不为空时的值) 来处理)

    程序的环境是 VB6 + ADO + Access,在用 SQL 语句查询时,希望把两个字段合并成一个字段,但其中一个字段 Null 值直接导致两个字段合并后也变成了 Null 值.之前只能用 VB ...

随机推荐

  1. java中成员变量和局部变量在内存中的分配

    对于成员变量和局部变量:成员变量就是方法外部,类的内部定义的变量:局部变量就是方法或语句块内部定义的变量.局部变量必须初始化. 形式参数是局部变量,局部变量中基础数据类型的引用和值都存储在栈中,对象引 ...

  2. 利用Cmake 将最新版本OBS编译成windows版本。

    准备工作: 1. VS2013 的最新更新版或者VS2015 2. QT Creater 5.7   https://www.qt.io/ 3.  CMake (cmake-gui) 4. obs 依 ...

  3. mqtt协议实现 java服务端推送功能(二)java demo测试

    上一篇写了安装mosQuitto和测试,但是用cmd命令很麻烦,有没有一个可视化软件呢? 有,需要在google浏览器下载一个叫MQTTLens的插件 打开MQTTLens后界面如下: 打开conne ...

  4. pyquery 库的使用

    from pyquery import PyQuery as pq # 文件勿命名为 pyquery.py,会发生冲突 # 字符串初始化 html = ''' <div id="pag ...

  5. ScrollView 滚动视图

    ScrollView 种类: 1.HorizontalScrollView:水平滚动视图 2.ScrollView:垂直滚动视图(常用类) public class MainActivity exte ...

  6. KMP算法查找字符串

    假设长字符串为t,短字符串为p.为了进行KMP匹配,首先需要计算字符串p的next数组,后面实现了计算该数组的函数void KmpGenNext(char* p, int* next).对于”abca ...

  7. php一些常用单词(供初学者背)

    > property         性质 特性 财产 所有权> oriented         导向> summarize     概括 总结> register      ...

  8. 布隆算法(BloomFilter)

          BloomFilter算法,是一种大数据排重算法.在一个数据量很大的集合里,能准确断定一个对象不在集合里:判断一个对象有可能在集合里,而且占用的空间不大.它不适合那种要求准确率很高的情况, ...

  9. 一次使用自定义 Http Header 引发的血案

    一次使用自定义 Http Header 引发的血案 HttpClient Http Header 自定义 nginx 不转发  起因 最近在整理我们产品的 OpenAPI Demo (Python.C ...

  10. vue组件,vue补充和总结,JS循环遍历和加减运算、类型转换补充

    目录 一.vue中的组件 1. 组件的概念 2. 组件分类 3. 组件的特点 4. 组件的定义 5. 组件化 (1)用法和注意 (2)数据组件化实例 6. 组件传参--父传子 (1)用法和注意 (2) ...