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','李四',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','59');
commit;
 
 
練習:
注意:以下練習中的數據是根據初始化到數據庫中的數據來寫的SQL 語句,請大家務必注意。


 
--1、查詢“c001”課程比“c002”課程成績高的所有學生的學號;
select a.sno
  from (select score aa, sno from sc where cno = 'c001') a,
       (select score bb, sno from sc where cno = 'c002') b
 where a.aa > b.bb
   and a.sno = b.sno
--2、查詢平均成績大於60 分的同學的學號和平均成績;
SELECT
    c.sno,
    c.score 
FROM
    sc c 
WHERE
    c.score > 60 
--3、查詢所有同學的學號、姓名、選課數、總成績;
select *
  from student s,
       (select sno, count(cno), sum(score) from sc group by sno) a
 where s.sno = a.sno
--4、查詢姓“劉”的老師的個數;
SELECT
    count( * ) 
FROM
    teacher 
WHERE
    tname LIKE '劉%' 
--5、查詢沒學過“諶燕”老師課的同學的學號、姓名;
select tno from teacher where tname='諶燕'
select * from sc
select * from course where tno=(select tno from teacher where tname='諶燕')

select z.sno 學號, z.sname 姓名
  from student z,
       (select distinct (a.sno) y
          from sc a,
               (select cno b
                  from course
                 where tno = (select tno from teacher where tname = '諶燕')) c
         where a.cno not in (c.b)) x
 where z.sno in x.y
--6、查詢學過“c001”並且也學過編號“c002”課程的同學的學號、姓名;

select distinct(s.sno),s.sname from student s,(select sno a from sc where cno in('c001','c002'))sss where sno in(sss.a) and s.sno=sss.a
--7、查詢學過“諶燕”老師所教的所有課的同學的學號、姓名;
select s.sno,s.sname,sss.cno from student s,(select cno c from course where tno=(select tno from teacher where tname='諶燕')) a,sc sss where sss.cno not in(a.c)
select sno a from sc where cno in(select tno from teacher where tname='諶燕')
select cno from course where tno=(select tno from teacher where tname='諶燕')
select distinct(a.sno) from sc a,(select cno b from course where tno=(select tno from teacher where tname='諶燕')) c where a.cno in(c.b)

select z.sno 學號, z.sname 姓名
  from student z,
       (select distinct (a.sno) y
          from sc a,
               (select cno b
                  from course
                 where tno = (select tno from teacher where tname = '諶燕')) c
         where a.cno in (c.b)) x
 where z.sno in x.y
--8、查詢課程編號“c002”的成績比課程編號“c001”課程低的所有同學的學號、姓名;
select sname, sno
  from student
 where sno = (select a.sno
                from (select score aa, sno from sc where cno = 'c001') a,
                     (select score bb, sno from sc where cno = 'c002') b
               where a.aa > b.bb
                 and a.sno = b.sno)
--9、查詢所有課程成績小於60 分的同學的學號、姓名;
select sno, sname
  from student s
 where sno in (select sno from sc where score < 60)
--10、查詢沒有學全所有課的同學的學號、姓名;
select * from sc
11、查詢至少有一門課與學號爲“s001”的同學所學相同的同學的學號和姓名;
12、查詢至少學過學號爲“s001”同學所有一門課的其他同學學號和姓名;
/13、把“SC”表中“諶燕”老師教的課的成績都更改爲此課程的平均成績;

--14、查詢和“s001”號的同學學習的課程完全相同的其他同學學號和姓名;
select s.sno, b.sname
  from sc s, (select * from sc where sno = 's001') a, student b
 where s.cno in (a.cno)
   and a.sno = s.sno
   and s.sno = b.sno
   and s.sno <> 's001'
/15、刪除學習“諶燕”老師課的SC 表記錄;
/16、向SC 表中插入一些記錄,這些記錄要求符合以下條件:沒有上過編號“c002”課程的同學學號、“c002”號課的平均成績;

--17、查詢各科成績最高和最低的分:以如下形式顯示:課程ID,最高分,最低分
select cno 課程ID, max(score) 最高分, min(score) 最低分
  from sc
 group by cno
--18、按各科平均成績從低到高和及格率的百分數從高到低順序
select avg(s.score) 平均成績, count(*) 及格率
  from sc s, (select count(*),cno from sc where score > 60 group by cno) a
 group by s.cno
 order by avg(s.score), count(a.*) / count(*) desc
--19、查詢不同老師所教不同課程平均分從高到低顯示
select a.t, cno, avg(score)
  from (select tno t from teacher) a, sc
 group by cno, a.t
 order by avg(score) desc
20、統計列印各科成績,各分數段人數:課程ID,課程名稱,[100-85],[85-70],[70-60],[ <60]
21、查詢各科成績前三名的記錄:(不考慮成績並列情況)

--22、查詢每門課程被選修的學生數
select cno,count(sno) from sc group by cno
--3、查詢出只選修了一門課程的全部學生的學號和姓名

select cno from sc group by cno having count(*)=1
select sno from (select cno from sc group by cno having count(*)=1)t1,sc where t1.cno=sc.cno

select student.sno 學號,student.sname 姓名
  from student,
       (select sno
          from (select cno from sc group by cno having count(*) = 1) t1, sc
         where t1.cno = sc.cno) t2
 where t2.sno = student.sno
--24、查詢男生、女生人數
select ssex,count(*)from student where ssex in ('男','女') group by ssex
--25、查詢姓“張”的學生名單
select * from student where sname like '張%'
26、查詢同名同性學生名單,並統計同名人數
27、1981 年出生的學生名單(注:Student 表中Sage 列的類型是number)
--28、查詢每門課程的平均成績,結果按平均成績升序排列,平均成績相同時,按課程號降序排列
SELECT
    cno,
    avg( score ) 
FROM
    sc 
GROUP BY
    cno 
ORDER BY
    avg( score ),
    cno DESC 29、查詢平均成績大於85 的所有學生的學號、姓名和平均成績
--30、查詢課程名稱爲“數據庫”,且分數低於60 的學生姓名和分數
SELECT
    a.*,
    cname 
FROM
    course,
    ( SELECT sno, cno, score FROM sc WHERE score < 60 ) a 
WHERE
    cname = '數據庫' --31、查詢所有學生的選課情況;
SELECT DISTINCT
    ( t1.sname ),
    t2.cno 
FROM
    student t1,
    sc t2 
WHERE
    t1.sno = t2.sno (
    +)
--32、查詢任何一門課程成績在70 分以上的姓名、課程名稱和分數;
select * from sc where score>70

SELECT t1.sname 姓名, t2.score 分數 FROM student t1, ( SELECT * FROM sc WHERE score > 70 
) t2 
WHERE
    t1.sno = t2.sno
select t4.cname 課程名稱, t3.sname 姓名, t3.score 分數
  from (select *
          from student t1, (select * from sc where score > 70) t2
         where t1.sno = t2.sno) t3,
       course t4
 where t3.cno = t4.cno
--33、查詢不及格的課程,並按課程號從大到小排列
select cno from sc where score<60 group by cno order by cno desc
--34、查詢課程編號爲c001 且課程成績在80 分以上的學生的學號和姓名;
select  * from sc where cno='coo1' and score>80 

select t1.sno 學號, t1.sname 姓名
  from student t1,
       (select *
          from sc
         where cno = 'coo1'
           and score > 80) t2
 where t1.sno = t2.sno
--35、求選了課程的學生人數
select count(s.sno)
  from sc s, (select sno from sc group by sno) a
 where s.sno in (a.sno)
--36、查詢選修“諶燕”老師所授課程的學生中,成績最高的學生姓名及其成績

select * from course t,(select tno from teacher where tname='諶燕') t1 where t.tno=t1.tno
select t3.sname, sc.score
  from sc,
       (select *
          from course t, (select tno from teacher where tname = '諶燕') t1
         where t.tno = t1.tno) t2,
       (select * from student) t3
 where sc.cno in (t2.cno)
   and sc.sno = t3.sno
 order by score desc
 select *
   from (select t3.sname, sc.score
           from sc,
                (select *
                   from course t,
                        (select tno from teacher where tname = '諶燕') t1
                  where t.tno = t1.tno) t2,
                (select * from student) t3
          where sc.cno in (t2.cno)
            and sc.sno = t3.sno
          order by score desc)
  where rownum = 1
--37、查詢各個課程及相應的選修人數
select cno 課程, count(*) 人數 from sc group by cno
38、查詢不同課程成績相同的學生的學號、課程號、學生成績
select * from sc
39、查詢每門功課成績最好的前兩名
select cno from sc group by cno
select * from sc,(select cno from sc group by cno 
) t1 where sc.cno in(t1.cselect cno from sc group by cno order by score desc
no) order by score desc
--40、統計每門課程的學生選修人數(超過10 人的課程才統計)。要求輸出課程號和選修人數,查詢結果按人數降序排列,若人數相同,按課程號升序排列
select cno 課程號, count(sno) 選修人數
  from sc
 group by cno
having count(sno) > 10
--41、檢索至少選修兩門課程的學生學號
select sno, count(cno) fr order by count(sno) desc, cno
om sc group by sno having count(cno) > 2
--42、查詢全部學生都選修的課程的課程號和課程名
select distinct(cno) from sc
select course.cno 課程號,course.cname 課程名 from course,(select distinct(cno) from sc) t1 where course.cno=t1.cno
--43、查詢沒學過“諶燕”老師講授的任一門課程的學生姓名
select student.sname
  from student,
       (select sc.*
          from sc,
               (select *
                  from course t,
                       (select tno from teacher where tname = '諶燕') t1
                 where t.tno = t1.tno) t2
         where sc.cno = (t2.cno)
           and sc.cno = t2.cno) t3
 where student.sno = t3.sno
   and student.sno not in (t3.sno)
--44、查詢兩門以上不及格課程的同學的學號及其平均成績
select sno,avg(score) from sc  where score<60 group by sno having count(cno)>2
--45、檢索“c004”課程分數小於60,按分數降序排列的同學學號
select sno
  from sc
 where cno = 'c004'
   and score < 60
 order by score
/46、刪除“s002”同學的“c001”課程的成績
 
 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章