設有一個關係數據庫,有三個基本表,表結構如下:
1)student
學號stu_num 姓名name 年齡age 性別gender 系號department_id
2) SC
學號stu_num 課程號curr_id 成績grade
3) Coutse
課程號curr_id 課程名curr_name 學時數class_hour
#建立表並插入數據
- create table student (stu_num varchar2(10),name varchar2(10),age int,gender char(4),department_id int);
- create table sc (stu_num varchar2(10),curr_id int,grade int);
- create table course (curr_id int,curr_name varchar2(10),class_hour int);
- #================================================
- insert into student values ('A1','zs',21,'M',01);
- insert into student values ('A2','wlm',20,'F',01);
- insert into student values ('A3','ls',22,'M',06);
- insert into student values ('B1','ww',21,'M',04);
- insert into student values ('C1','ll',25,'F',06);
- insert into student values ('S1','vv',20,'F',03);
- insert into student values ('S2','yb',21,'M',06);
- insert into student values ('S3','nm',22,'M',04);
- #================================================
- insert into sc values ('A1',01,65);
- insert into sc values ('A2',02,85);
- insert into sc values ('A3',01,95);
- insert into sc values ('B1',02,65);
- insert into sc values ('C1',01,55);
- insert into sc values ('S1',02,91);
- insert into sc values ('S2',01,91);
- insert into sc values ('S3',03,89);
- insert into sc values ('A1',02,77);
- insert into sc values ('A2',01,59);
- insert into sc values ('S1',01,31);
- insert into sc values ('S2',02,96);
- insert into sc values ('S3',01,69);
- insert into sc values ('A1',03,91);
- insert into sc values ('A2',03,33);
- insert into sc values ('A1',04,73);
- insert into sc values ('C1',02,75);
- insert into sc values ('C1',03,91);
- #================================================
- insert into course values (01,'math',20);
- insert into course values (02,'English',24);
- insert into course values (03,'History',10);
- insert into course values (04,'political',14);
1.請用SQL語言檢索系號爲'06'的學生的學號、姓名、課程號和成績
2.請用SQL語言檢索比學號爲'S1'的學生大三歲的學生的學號、姓名和年齡
3.請用SQL語言創建一個視圖ST_VIEW,檢索選修課程在10(筆者沒有這麼多條目,先用3條代替了~)門以上的學生的系號、學號、姓名、最低分、最高分、平均分和選課門數,其結果要求按照系號,平均分降序排列。
4.請用SQL語言檢索至少選修了'學號爲S3的學生選修的全部課程'的學生的學號和姓名。
第一題答案
- select t1.stu_num,t1.name,t2.curr_id,t2.grade
- from student t1,sc t2
- where t1.stu_num = t2.stu_num
- and
- t1.department_id = 06;
第二題答案
- select stu_num,name,age from student where
- age > ( select age + 3 from student where stu_num = 'S1');
第三題答案
- create view st_view as
- with t1 as (
- select * from (
- select stu_num,count(curr_id) as sum_count,min(grade) as min_grade,max(grade) as max_grade,avg(grade) as avg_grade
- from sc group by stu_num )
- where sum_count >= 3 )
- select t2.department_id,t2.stu_num,t2.name,t1.min_grade,t1.max_grade,t1.avg_grade,t1.sum_count
- from t1,student t2
- where t1.stu_num = t2.stu_num
- order by 1 desc,6 desc;
第四題答案
- with t1 as (
- select stu_num,count(curr_id) as count_curr
- from sc
- where curr_id in
- (select curr_id from sc where stu_num = 'S3')
- group by stu_num
- )select t1.stu_num,t2.name
- from t1,student t2
- where t1.stu_num=t2.stu_num
- and
- count_curr=(select count_curr from t1 where stu_num='S3');
或者
- with t1 as (
- select stu_num,count(curr_id) from sc where curr_id in
- (select curr_id from sc where stu_num = 'S3')
- group by stu_num
- having count(curr_id)=(select count(curr_id) from sc where stu_num = 'S3'))
- select t1.stu_num,t2.name
- from t1,student t2 where t1.stu_num=t2.stu_num;
也許像下面這個結構看起來會更明白一些?
- select stu_num,name from student where stu_num in (
- select stu_num from sc where curr_id in
- (select curr_id from sc where stu_num = 'S3')
- group by stu_num
- having count(curr_id)=(select count(curr_id) from sc where stu_num = 'S3'));