加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

Oracle相干操练

发布时间:2021-01-11 22:03:33 所属栏目:站长百科 来源:网络整理
导读:Oracle 操练 建表: 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),
副问题[/!--empirenews.page--]

Oracle操练

建表:

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‘,‘李四‘,‘男‘);

insert?into?student values?(‘s003‘,‘吴鹏‘,25,‘男‘);

insert?into?student values?(‘s004‘,‘琴沁‘,20,‘女‘);

insert?into?student values?(‘s005‘,‘王丽‘,‘女‘);

insert?into?student values?(‘s006‘,‘李波‘,21,‘男‘);

insert?into?student values?(‘s007‘,‘刘玉‘,‘男‘);

insert?into?student values?(‘s008‘,‘萧蓉‘,‘女‘);

insert?into?student values?(‘s009‘,‘陈萧晓‘,‘女‘);

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‘,80.9);

insert?into?sc values?(‘s003‘,81.9);

insert?into?sc values?(‘s004‘,60.9);

insert?into?sc values?(‘s001‘,‘c002‘,82.9);

insert?into?sc values?(‘s002‘,72.9);

insert?into?sc values?(‘s003‘,81.9);

insert?into?sc values?(‘s001‘,‘c003‘,‘59‘);

commit;

相干操练:

-- 1、查询“c001”课程比“c002”课程后果高的全部门生的学号;

select?a.*?from

(select?*?from?sc a where?a.cno=‘c001‘)?a,

(select?*?from?sc b where?b.cno=‘c002‘)?b

where?a.sno=b.sno and?a.score >?b.score;

*********************************

select?*?

from?sc a

where?a.cno=‘c001‘

and??exists(select?*?from?sc b where?b.cno=‘c002‘?and?a.score>b.score

and?a.sno =?b.sno);

-- 2、查询均匀后果大于60 分的同窗的学号僻静均后果;

select?sno,avg(score)?

from?sc ?

group?by?sno

having?avg(score)>60;

-- 3、查询全部同窗的学号、姓名、选课数、总后果;

select?a.*,s.sname

from?

(select?sno,sum(score),count(cno)?from?sc group?by?sno)?a,student s where?a.sno=s.sno;

-- 4、查询姓“刘”的先生的个数;

select?count(*)?

from?teacher

where?tname like?‘%刘%‘;

-- 5、查询没学过“谌燕”先生课的同窗的学号、姓名;

select?a.sno,a.sname

from?student a

where?a.sno

not?in

(select?distinct?s.sno

?from?sc s,

??????(select?c.*

???????from?course c,

???????????(select?tno

????????????from?teacher t

????????????where?tname=‘谌燕‘)t

???????where?c.tno=t.tno)?b

??where?s.cno =?b.cno )

*********************************

select?*?

from?student st

where?st.sno not?in

(select?distinct?sno from?sc s join?course c on?s.cno=c.cno

join?teacher t on?c.tno=t.tno where?tname=‘谌燕‘)

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

select?st.*?

from?sc a

join?sc b on?a.sno=b.sno

join?student st

on?st.sno=a.sno

where?a.cno=‘c001‘?and?b.cno=‘c002‘?and?st.sno=a.sno;

-- 7、查询学过“谌燕”先生所教的全部课的同窗的学号、姓名;

?

-- 8、查询课程编号“c002”的后果比课程编号“c001”课程低的全部同窗的学号、姓名;

select?*?

from?student st

join?sc a on?st.sno=a.sno

join?sc b on?st.sno=b.sno

where?a.cno=‘c002‘?and?b.cno=‘c001‘?and?a.score <?b.score

-- 9、查询课程后果都小于60 分的同窗的学号、姓名;

select?student.sno,student.sname from?student where?

student.sno in

(

select??sc.sno from?sc where?student.sno=sc.sno and?sc.score<60)

?

select?*?from?sc;

select?*?from?student;

select?*?from?teacher;

?

select?*?

from?student s

inner?join?sc

on?s.sno=sc.sno;

?

?

select?s.sno,s.sname

from?student s

join?sc c

on?s.sno=c.sno

where?c.sno not?in

?(select?distinct?sno from?sc where?score>60);

?

select?st.*,s.score

from?student st

join?sc s on?st.sno=s.sno

join?course c on?s.cno=c.cno

where?s.score <60

-- 10、查询没有学全全部课的同窗的学号、姓名;

select?stu.sno,stu.sname,count(sc.cno)?

from?student stu

left?join?sc on?stu.sno=sc.sno

group?by?stu.sno,stu.sname

having?count(sc.cno)<(select?count(distinct?cno)from?course)

?

select?*?from?course;

?

===================================

select?*?from?student where?sno in

(select?sno from

????????(select?stu.sno,c.cno from?student stu

????????cross?join?course c

????????minus

????????select?sno,cno from?sc)

)

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

SELECT?s.sno,s.sname

FROM?student s

WHERE?s.sno<>‘s001‘?AND?s.sno IN

(SELECT?distinct?sc.sno FROM?sc WHERE?sc.cno IN(SELECT?cno FROM?sc WHERE?sno =?‘s001‘));

?

?

select?st.*?from?student st,

(select?distinct?a.sno from

(select?*?from?sc)?a,

(select?*?from?sc where?sc.sno=‘s001‘)?b

where?a.cno=b.cno)?h

where?st.sno=h.sno and?st.sno<>‘s001‘

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

select?*?from?sc

left?join?student st

on?st.sno=sc.sno

where?sc.sno<>‘s001‘

and?sc.cno in

(select?cno from?sc

where?sno=‘s001‘)

-- 13、把“SC”表中“谌燕”先生教的课的后果都变动为此课程的均匀后果;

select?*?from?sc;

update?sc c set?score=(select?avg(c.score)??from?course a,teacher b

????????????????????????????where?a.tno=b.tno

????????????????????????????and?b.tname=‘谌燕‘

????????????????????????????and?a.cno=c.cno

????????????????????????????group?by?c.cno)

where?cno in(

select?cno from?course a,teacher b

where?a.tno=b.tno

and?b.tname=‘谌燕‘)

-- 14、查询和“s001”号的同窗进修的课程完全沟通的其他同窗学号和姓名;

select*?from?sc where?sno<>‘s001‘

minus

(

select*?from?sc

minus

select?*?from?sc where?sno=‘s001‘

)

-- 15、删除进修“谌燕”先生课的SC 表记录;

delete?from?sc

where?sc.cno in

(

select?cno from?course c

left?join?teacher t on??c.tno=t.tno

where?t.tname=‘谌燕‘

)

-- 16、向SC 表中插入一些记录,这些记录要求切合以下前提:没有上过编号“c002”课程的同窗学号、“c002”号课的均匀后果;

insert?into?sc (sno,cno,score)

select?distinct?st.sno,sc.cno,(select?avg(score)from?sc where?cno=‘c002‘)

from?student st,sc

where?not?exists

(select?*?from?sc where?cno=‘c002‘?and?sc.sno=st.sno)?and?sc.cno=‘c002‘;

-- 17、查询各科后果最高和最低的分:以如下情势表现:课程ID,最高分,最低分

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

-- 18、按各科均匀后果从低到高和合格率的百分数从高到低次序

select?cno,avg(score),sum(case?when?score>=60?then?1?else?0?end)/count(*)

as?合格率

from?sc group?by?cno

order?by?avg(score)?,?合格率 desc

-- 19、查询差异先生所教差异课程均匀分从高到低表现

select?t.tno,t.tname,c.cno,c.cname,avg(score)?from?sc,?course c,teacher t

where?sc.cno=c.cno and?c.tno=t.tno

group?by?c.cno,t.tno,c.cname

order?by?avg(score)?desc

?

select?max(t.tno),max(t.tname),max(c.cno),max(c.cname),avg(score)?

from?sc,teacher t

where?sc.cno=c.cno and?c.tno=t.tno

group?by?c.cno

order?by?avg(score)?desc

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

select?sc.cno,

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 c

where??sc.cno=c.cno

group?by?sc.cno,c.cname;

-- 21、查询各科后果前三名的记录:(不思量后果并列环境)

select?*?from

(select?sno,score,row_number()over(partition?by?cno order?by?score desc)?rn from?sc)

where?rn<4

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

select?cno,count(sno)

from?sc

group?by?cno;

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

select?sc.sno,st.sname,count(cno)?from?student st

left?join?sc

on?sc.sno=st.sno

group?by?st.sname,sc.sno

having?count(cno)=1;

-- 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)

--时刻函数sysdate:to_char(sysdate,‘yyyy‘)获取当前电脑体系时刻年份

select?to_char(sysdate,‘yyyy‘)?

from?dual;?--2019

?

select?sno,sname,sage,ssex

from?student t

where?to_char(sysdate,‘yyyy‘)-sage =1988

-- 28、查询每门课程的均匀后果,功效按均匀后果升序分列,均匀后果沟通时,按课程号降序分列

select?cno,avg(score)?

from?sc

group?by?cno

order?by?avg(score)asc,cno desc;

-- 29、查询均匀后果大于85 的全部门生的学号、姓名僻静均后果

select?st.sno,avg(score)?

from?student st

left?join?sc

on?sc.sno=st.sno

group?by?st.sno,st.sname

having?avg(score)>85;

-- 30、查询课程名称为“Oracle”,且分数低于60 的门生姓名和分数

select?*?from?course;

select?sname,score

from?student st,sc,course c

where?st.sno=sc.sno and?sc.cno=c.cno and?c.cname=‘Oracle‘?and?sc.score<60

-- 31、查询全部门生的选课环境;

select?st.sno,c.cname

from?student st,course c

where?sc.sno=st.sno and?sc.cno=c.cno;

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

select?st.sname,sc.score

from?student st,course c

where?sc.sno=st.sno and?sc.cno=c.cno and?sc.score>70

-- 33、查询不合格的课程,并按课程号从大到小分列

select?sc.sno,sc.score

from?sc,course c

where?sc.cno=c.cno and?sc.score<60?

order?by?sc.cno desc;

-- 34、查询课程编号为c001 且课程后果在80 分以上的门生的学号和姓名;

select?st.sno,student st

where?sc.sno=st.sno and?cno=‘c001‘?and?score>80;

-- 35、求选了课程的门生人数

select?count(distinct?sno)?

from?sc;

-- 36、查询选修“谌燕”先生所讲课程的门生中,后果最高的门生姓名及厥后果

select?st.sname,course c,teacher t

where

st.sno=sc.sno and?sc.cno=c.cno and?c.tno=t.tno

and?t.tname=‘谌燕‘?and?sc.score=

(select?max(score)from?sc where?sc.cno=c.cno)

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

select?cno,count(sno)?

from?sc

group?by?cno;

-- 38、查询差异课程后果沟通的门生的学号、课程号、门生后果

select?a.*?

from?sc a,sc b

where?a.score=b.score and?a.cno<>b.cno

-- 39、查询每门作业后果最好的前两名

select?*?from?(

select?sno,row_number()over(partition?by?cno order?by?score desc)?my_rn from?sc t

)

where?my_rn<=2

-- 40、统计每门课程的门生选修人数(高出10 人的课程才统计)。要求输出课程号和选修人数,查询功效按人数降序分列,若人数沟通,按课程号升序分列

select?cno,count(sno)?

from?sc group?by?cno

having?count(sno)>10

order?by?count(sno)?desc,cno asc;

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

select?sno

from?sc

group?by?sno having?count(cno)>1;

||

select?sno

from?sc

group?by?sno

having?count(sno)>1;

-- 42、查询所有门生都选修的课程的课程号和课程名

select?distinct(c.cno),c.cname

from?course c,sc

where?sc.cno=c.cno

||

select?cno,cname

from?course c

where?c.cno in

(select?cno from?sc group?by?cno)

?

-- 43、查询没学过“谌燕”先生教学的任一门课程的门生姓名

select?st.sname

from?student st

where?st.sno not?in

(select?distinct?sc.sno from?sc,teacher t

where?sc.cno=c.cno and?c.tno=t.tno and?t.tname=‘谌燕‘)

-- 44、查询两门以上不合格课程的同窗的学号及其均匀后果

select?sno,avg(score)

from?sc

where?sno in

(select?sno from?sc where?sc.score<60

group?by?sno having?count(sno)>1

)?group?by?sno

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

select?sno

from?sc

where?cno=‘c004‘?and?score<90?

order?by?score desc;

-- 46、删除“s002”同窗的“c001”课程的后果

delete?

from?sc

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读