一道SQL面試題~

設有一個關係數據庫,有三個基本表,表結構如下:
1)student
學號stu_num 姓名name 年齡age 性別gender 系號department_id
2) SC
學號stu_num 課程號curr_id 成績grade
3) Coutse
課程號curr_id 課程名curr_name 學時數class_hour
#建立表並插入數據
  1. create table student (stu_num varchar2(10),name varchar2(10),age int,gender char(4),department_id int); 
  2. create table sc (stu_num varchar2(10),curr_id int,grade int); 
  3. create table course (curr_id int,curr_name varchar2(10),class_hour int); 
  4. #================================================ 
  5. insert into student values ('A1','zs',21,'M',01); 
  6. insert into student values ('A2','wlm',20,'F',01); 
  7. insert into student values ('A3','ls',22,'M',06); 
  8. insert into student values ('B1','ww',21,'M',04); 
  9. insert into student values ('C1','ll',25,'F',06); 
  10. insert into student values ('S1','vv',20,'F',03); 
  11. insert into student values ('S2','yb',21,'M',06); 
  12. insert into student values ('S3','nm',22,'M',04); 
  13. #================================================ 
  14. insert into sc values ('A1',01,65); 
  15. insert into sc values ('A2',02,85); 
  16. insert into sc values ('A3',01,95); 
  17. insert into sc values ('B1',02,65); 
  18. insert into sc values ('C1',01,55); 
  19. insert into sc values ('S1',02,91); 
  20. insert into sc values ('S2',01,91); 
  21. insert into sc values ('S3',03,89); 
  22.   
  23. insert into sc values ('A1',02,77); 
  24. insert into sc values ('A2',01,59); 
  25. insert into sc values ('S1',01,31); 
  26. insert into sc values ('S2',02,96); 
  27. insert into sc values ('S3',01,69); 
  28.   
  29. insert into sc values ('A1',03,91); 
  30. insert into sc values ('A2',03,33); 
  31.   
  32. insert into sc values ('A1',04,73); 
  33.   
  34. insert into sc values ('C1',02,75); 
  35. insert into sc values ('C1',03,91); 
  36. #================================================ 
  37. insert into course values (01,'math',20); 
  38. insert into course values (02,'English',24); 
  39. insert into course values (03,'History',10); 
  40. insert into course values (04,'political',14); 
1.請用SQL語言檢索系號爲'06'的學生的學號、姓名、課程號和成績
2.請用SQL語言檢索比學號爲'S1'的學生大三歲的學生的學號、姓名和年齡
3.請用SQL語言創建一個視圖ST_VIEW,檢索選修課程在10(筆者沒有這麼多條目,先用3條代替了~)門以上的學生的系號、學號、姓名、最低分、最高分、平均分和選課門數,其結果要求按照系號,平均分降序排列。
4.請用SQL語言檢索至少選修了'學號爲S3的學生選修的全部課程'的學生的學號和姓名。
 
第一題答案
  1. select t1.stu_num,t1.name,t2.curr_id,t2.grade 
  2. from student t1,sc t2 
  3. where t1.stu_num = t2.stu_num 
  4. and 
  5. t1.department_id = 06; 

第二題答案
  1. select stu_num,name,age from student where 
  2. age > ( select age + 3 from student where stu_num = 'S1');   
第三題答案
  1. create view st_view as 
  2. with t1 as ( 
  3. select * from ( 
  4. select stu_num,count(curr_id) as sum_count,min(grade) as min_grade,max(grade) as max_grade,avg(grade) as avg_grade 
  5. from sc group by stu_num ) 
  6. where sum_count >= 3 ) 
  7. select t2.department_id,t2.stu_num,t2.name,t1.min_grade,t1.max_grade,t1.avg_grade,t1.sum_count
  8. from t1,student t2 
  9. where t1.stu_num = t2.stu_num 
  10. order by 1 desc,6 desc 
第四題答案
  1. with t1 as ( 
  2. select stu_num,count(curr_id) as count_curr 
  3. from sc 
  4. where curr_id in  
  5. (select curr_id from sc where stu_num = 'S3'
  6. group by stu_num 
  7. )select t1.stu_num,t2.name 
  8. from t1,student t2 
  9. where t1.stu_num=t2.stu_num 
  10. and 
  11. count_curr=(select count_curr from t1 where stu_num='S3');  
或者
 
  1. with t1 as ( 
  2. select stu_num,count(curr_id) from sc where curr_id in 
  3.  (select curr_id from sc where stu_num = 'S3'
  4.  group by stu_num 
  5.  having count(curr_id)=(select count(curr_id) from sc where stu_num = 'S3')) 
  6. select t1.stu_num,t2.name 
  7.  from t1,student t2 where t1.stu_num=t2.stu_num; 
 
也許像下面這個結構看起來會更明白一些?
 
  1. select stu_num,name from student where stu_num in ( 
  2. select stu_num from sc where curr_id in 
  3.  (select curr_id from sc where stu_num = 'S3'
  4.  group by stu_num 
  5.  having count(curr_id)=(select count(curr_id) from sc where stu_num = 'S3')); 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章