數據庫原理—數據查詢

一.實驗目標

通過理論學習與實驗設計,使自己具備如下能力:

  1. 具備分析不同用戶的特性,設計用戶的數據需求方案並實施的能力。
  2. 選用合適的數據庫管理工具承擔數據庫系統的實施、運行、監控與維護工作的能力。

二.實驗項目

  1. 檢索dept中所有的記錄,並按部門名稱排序。
Select * from univ.dept order by dname; 
create view v1 as
select * from univ.dept order by dname;
  1. 列出工資(SAL)在15000到25000之間的所有員工的ENAME,SAL,並按ENAME排序。
select ename,sal from univ.emp where sal between 15000 and 25000 order by ename; 
create view v2 as 
select ename,sal from univ.emp where sal between 15000 and 25000 order by ename; 
  1. 顯示DEPT表中的部門編號和部門名稱,並按部門名稱排序。
select deptno,dname from univ.dept order by dname; 
create view v3 as select deptno,dname from univ.dept order by dname; 
  1. 顯示所有不同的工作類型,並降序排序。
select job from univ.emp order by job desc; 
create view v4 as 
select job from univ.emp order by job desc;
  1. 列出沒有提成(comm)的所有職工的姓名與工資,並按姓名排序。
    select ename,sal from univ.emp where(comm=0 or comm is null) order by ename;
    create view v5 as
    select ename,sal from univ.emp where(comm=0 or comm is null) order by ename;

  2. 列出部門編號是20,工作是“clerk”(辦事員)的職工信息,並按姓名排序。

select * from univ.emp where (job='clerk'and deptno=20)order by ename;
create view v6 as 
select * from univ.emp where (job='clerk'and deptno=20)order by ename;
  1. 顯示姓名中包含AR或IN的職工姓名,並按姓名排序。
select ename from univ.emp where (ename like'%AR%' or ename like'%IN%')order by ename;
create view v7 as 
select ename from univ.emp where (ename like'%AR%' or ename like'%IN%')order by ename;
  1. 顯示姓名中包含AR和IN的職工姓名,並按姓名排序。
select ename from univ.emp where (ename like'%AR%' and ename like'%IN%')order by ename;
create view v8 as 
select ename from univ.emp where (ename like'%AR%' and ename like'%IN%')order by ename;
  1. 顯示所有職工的姓名和各項收入總和(sal+comm),並按姓名排序。
 select ename,sum(sal)+sum(case when comm is null then 0 else comm end) from univ.emp group by ename order by ename;
create view v9 as 
select ename,(sum(sal)+sum(case when comm is null then 0 else comm end))as allsal from univ.emp group by ename order by ename;
  1. 查詢每個部門的平均工資(用round函數取整),並按部門編號排序。
select deptno ,(round(avg(sal)))as avgsal from univ.emp group by deptno;
create view v10 as 
select deptno ,(round(avg(sal)))as avgsal from univ.emp group by deptno;
  1. 查詢出每個部門中工資最高的職工,並按部門編號排序。若同一部門有多個最高工資者,再按職工號排序。
select deptno,max(sal)as maxsal from univ.emp group by deptno order by deptno;
create view v11 as 
select deptno,max(sal)as maxsal from univ.emp group by deptno order by deptno;
  1. 查詢出每個部門比本部門平均工資高的職工人數,並按部門編號排序。
select deptno,count(*)as count from univ.emp where sal>(select avg(sal) from univ.emp) group by deptno order by deptno;
create view v12 as 
select deptno,count(*)as count from univ.emp 
where sal>(select avg(sal) from univ.emp) group by deptno order by deptno;
  1. 列出至少有一個職工的所有部門,並按部門編號排序。
select deptno from univ.emp where(select count(*)from univ.emp)>1 order by deptno;
create view v13 as 
select deptno from univ.emp where(select count(*)from univ.emp)>1 order by deptno;
  1. 列出工資比“JONES”多的所有職工,並按職工編號排序。
select * from univ.emp where sal>(select sal from univ.emp where ename = 'JONES')order by empno;
create view v14 as 
select * from univ.emp where sal>(select sal from univ.emp where ename = 'JONES')order by empno;
  1. 列出所有職工的姓名及其直接上級的姓名,並按職工姓名排序。
select ename,mgr from univ.emp order by ename;
create view v15 as 
select ename,mgr from univ.emp order by ename;
  1. 列出受僱日期早於其直接上級的所有職工,並按姓名排序。
select * from univ.emp a where a.hiredate<(select hiredate from univ.emp b where(b.empno=a.mgr));
create view v16 as 
select * from univ.emp a where a.hiredate<(select hiredate from univ.emp b where(b.empno=a.mgr));
  1. 列出部門名稱和這些部門職工的編號、姓名,要求同時列出那些沒有職工的部門,並按部門名稱和職工編號排序。
select b.dname,a.empno,a.ename from univ.dept b left outer join univ.emp a on a.deptno=b.deptno order by b.dname,a.empno;
create view v17 as 
select b.dname,a.empno,a.ename from univ.dept b left outer join univ.emp a on a.deptno=b.deptno order by b.dname,a.empno;
  1. 列出所有辦事員的姓名及其部門名稱,並按姓名排序。
select a.ename,b.dname from univ.emp a left outer join univ.dept b 
on a.deptno=b.deptno where job='clerk' order by a.ename;
create view v18 as 
select a.ename,b.dname from univ.emp a 
left outer join univ.dept b on a.deptno=b.deptno where job='clerk' order by a.ename;
  1. 列出最低工資大於35000的各種工作類型,並降序排序。
select job,sal from univ.emp where sal>35000 order by job desc;
create view v19 as
select job,sal from univ.emp where sal>35000 order by job desc;
  1. 列出在銷售部(“sales”)工作的職工的姓名,並按姓名排序。
select b.dname,a.empno,a.ename from univ.dept b left outer join univ.emp a on b.deptno=a.deptno where b.dname='SALES' order by ename;
create view v20 as
select b.dname,a.empno,a.ename from univ.dept b left outer join univ.emp a on b.deptno=a.deptno where b.dname='SALES' order by ename;
  1. 列出工資高於公司平均工資的所有職工,並按姓名排序。
select * from univ.emp where sal>(select avg(sal) from univ.emp) order by ename;
create view v21 as
select * from univ.emp where sal>(select avg(sal) from univ.emp) order by ename;
  1. 列出與“SCOTT”從事相同工作的所有職工,並按姓名排序。
select * from univ.emp where job=(select job from univ.emp where ename='SCOTT') order by ename;
create view v22 as
select * from univ.emp where job=(select job from univ.emp where ename='SCOTT') order by ename;
  1. 列出工資高於“30號部門的最高工資”的職工姓名和工資,並按姓名排序。
select * from univ.emp where sal>(select max(sal) from univ.emp where deptno=30) order by ename;
create view v23 as
select * from univ.emp where sal>(select max(sal) from univ.emp where deptno=30) order by ename;
  1. 列出工資高於在部門30工作的所有職工的工資的職工姓名和工資,並按姓名排序。
select * from univ.emp where sal>all(select sal from univ.emp where deptno=30) order by ename;
create view v24 as
select * from univ.emp where sal>all(select sal from univ.emp where deptno=30) order by ename;
  1. 列出在每個部門工作的職工數量、平均工資(用round函數取整),並按部門編號排序。
select dname 部門名稱,count(ename) 部門人數,round(avg(sal)) 平均工資 from univ.dept d left outer join univ.emp e on d.deptno=e.deptno group by d.dname order create view v25 as
select dname 部門名稱,count(ename) 部門人數,round(avg(sal)) 平均工資 from univ.dept d left outer join univ.emp e on d.deptno=e.deptno group by d.dname order by dname;
  1. 列出所有職工的姓名、部門名稱和工資,並按姓名排序。
select d.dname,e.ename,e.sal from univ.dept d left outer join univ.emp e on 
e.deptno=d.deptno order by ename;
create view v26 as
select d.dname,e.ename,e.sal from univ.dept d left outer join univ.emp e on 
e.deptno=d.deptno order by ename;
  1. 列出所有部門的詳細信息和部門人數,並按部門編號排序。
select d.dname,d.LOC,e.* from(select deptno,count(ename) emps,sum(sal)+sum(case when comm is null then 0 else comm end) incomm from univ.emp group by deptno) e,univ.dept d where e.deptno(+)=d.deptno;
create view v27 as
select d.dname,d.LOC,e.* from(select deptno,count(ename) emps,sum(sal)+sum(case when comm is null then 0 else comm end) incomm from univ.emp group by deptno) e,univ.dept d where e.deptno(+)=d.deptno;
  1. 列出職工中各種工作類型的最低工資,並按工作類型排序。
select job,min(sal) 最低工資 from univ.emp group by job order by job;
create view v28 as
select job,min(sal) 最低工資 from univ.emp group by job order by job;
  1. 列出各個部門的經理(“manager”)的最低工資。
select ename,sal,deptno from univ.emp where sal in(select min(sal) from univ.emp where job='manager' group by deptno);
create view v29 as
select ename,sal,deptno from univ.emp where sal in(select min(sal) from univ.emp where job='manager' group by deptno);
  1. 列出平均工資最高的部門的名稱。
select dname,deptno from univ.dept where deptno=(select deptno from univ.emp group by deptno having avg(sal)>=all(select avg(sal) from univ.emp group by deptno));
create view v30 as
select dname,deptno from univ.dept where deptno=(select deptno from univ.emp group by deptno having avg(sal)>=all(select avg(sal) from univ.emp group by deptno));
  1. 列出不在北美工作職工的姓名,並按姓名排序。
select e.ename from univ.dept d left outer join univ.countries c on (d.CID=c.CID)left join univ.emp e on(d.deptno=e.deptno) where c.REGION !='North America'order by ename;
create view v31 as 
select e.ename from univ.dept d left outer join univ.countries c on (d.CID=c.CID)left join univ.emp e on(d.deptno=e.deptno) 
where c.REGION !='North America'order by ename;
  1. 列出在亞洲工作且工資最高的職工的姓名,並按姓名排序。
(select e.ename from univ.dept d left outer join univ.countries c on (d.CID=c.CID)left join univ.emp e on(d.deptno=e.deptno)
where c.REGION='East Asia')
intersect
(select e.ename from univ.dept d left outer join univ.countries c on (d.CID=c.CID)left join univ.emp e on(d.deptno=e.deptno)
where e.sal>=all(select e.sal from univ.emp))order by ename;
create view v32 as
(select e.ename from univ.dept d left outer join univ.countries c on (d.CID=c.CID)left join univ.emp e on(d.deptno=e.deptno)
where c.REGION='East Asia')
intersect
(select e.ename from univ.dept d left outer join univ.countries c on (d.CID=c.CID)left join univ.emp e on(d.deptno=e.deptno)
where e.sal>=all(select e.sal from univ.emp))order by ename;
  1. 列出總裁(president)工作部門所在的國家。
select c.CID from univ.dept d left outer join univ.countries c on (d.CID=c.CID)left join univ.emp e on(d.deptno=e.deptno)
where e.job='president';
create view v33 as
select c.CID from univ.dept d left outer join univ.countries c on (d.CID=c.CID)left join univ.emp e on(d.deptno=e.deptno)
where e.job='president';
  1. 列出平均工資最高的國家。
select c.cname from univ.dept d left outer join univ.countries c on (d.CID=c.CID)left join univ.emp e on(d.deptno=e.deptno)
where avg(e.sal)>=all(select avg(e.sal) from univ.emp group by deptno);
create view v34 as
select c.cname from univ.dept d left outer join univ.countries c on (d.CID=c.CID)left join univ.emp e on(d.deptno=e.deptno)
where avg(e.sal)>=all(select avg(e.sal) from univ.emp group by deptno);
  1. 列出各部門名稱及其人數,含沒有職工的部門,並按部門名稱排序。
select dname 部門名稱,count(ename) 部門人數 from univ.dept d left outer join univ.emp e on d.deptno=e.deptno group by d.dname order by dname;
create view v35 as
select dname 部門名稱,count(ename) 部門人數 from univ.dept d left outer join univ.emp e on d.deptno=e.deptno group by d.dname order by dname;
  1. 查詢2016年考試成績不到20分的學生的學號,按學號排列。
(select s.ID,t.grade,s.name from univ.student s left outer join univ.takes t on(s.ID=t.ID)
where grade<20)
intersect 
(select s.ID,t.grade,s.name from univ.student s left outer join univ.takes t on(s.ID=t.ID)
where year=2016)order by ID;
create view v36 as
(select s.ID,t.grade,s.name from univ.student s left outer join univ.takes t on(s.ID=t.ID)
where grade<20)
intersect 
(select s.ID,t.grade,s.name from univ.student s left outer join univ.takes t on(s.ID=t.ID)
where year=2016)order by ID;
  1. 查詢到2018年1月該畢業卻沒有畢業的學生的學號,按學號排列。
create view v37 as
select ID,name from univ.student where status_date=2013 and status=0 order by ID;
38. 列出英語系與數學系的教師的姓名與 工資,並按姓名排序。(三種方式)
(select name,salary,dept_name from univ.instructor where dept_name='英語')
union
(select name,salary,dept_name from univ.instructor where dept_name='數學')order by name;
create view v38_1 as
(select name,salary from univ.instructor where dept_name='英語')
union
(select name,salary from univ.instructor where dept_name='數學')order by name;

select name,salary from univ.instructor where dept_name='英語' or dept_name='數學'order by name;
create view v38_2 as
select name,salary from univ.instructor where dept_name='英語' or dept_name='數學'order by name;

(select name,salary,dept_name from univ.instructor where dept_name='英語')
union all
(select name,salary,dept_name from univ.instructor where dept_name='數學')order by name;
create view v38_3 as
(select name,salary,dept_name from univ.instructor where dept_name='英語')
union all
(select name,salary,dept_name from univ.instructor where dept_name='數學')order by name;
  1. 列出英語系與數學系外其他系的姓“李”的教師姓名與工資,並按姓名排序。
select name,salary,dept_name from univ.instructor where(dept_name !='英語' and dept_name !='數學' and name like '李%' )order by name;
create view v39 as
select name,salary,dept_name from univ.instructor where(dept_name !='英語' and dept_name !='數學' and name like '李%' )order by name;
  1. 列出名稱中含有"計算機"的課程的名稱與學分,並按課程名排序
    列出名稱中含有"計算機"的課程的名稱與學分,並按課程名排序
select title,credits from univ.course where title like '%計算機%' order by title;
create view v40 as
select title,credits from univ.course where title like '%計算機%' order by title;
  1. 列出所有姓名以"武"開頭且只有3個字的學生的學號、姓名與所在班級,並按姓名排序
select ID,name,CLASS_NAME from univ.student where (name like '武%' and length(name)=3)order by name;
create view v41 as
select ID,name,CLASS_NAME from univ.student where (name like '武%' and length(name)=3)order by name;
  1. 列出所有姓名以"李"開頭、以"軍"結束且只有3個字的學生的學號、姓名,並按姓名排序
(select ID,name,class_name from univ.student where (name like '武%' or name like '%軍'))
intersect 
(select ID,name,class_name from univ.student where length(name)=3)
order by name;
create view v42 as
(select ID,name,class_name from univ.student where (name like '武%' or name like '%軍'))
intersect 
(select ID,name,class_name from univ.student where length(name)=3)
order by name;
  1. 查詢所有姓名中第2個字爲"日"的學生的姓名與所在班級,並按姓名排序。
select name,class_name from univ.student where name like '_日%' order by name; 
create view v43 as
select name,class_name from univ.student where name like '_日%' order by name; 
  1. 列出2017年下學期選修了CS013號課程卻沒有及格的學生的學號及其成績,並按學號排序。
select ID,grade from univ.takes where(course_id ='CS013' and grade < 60) order by ID;
create view v44 as
select ID,grade from univ.takes where(course_id ='CS013' and grade < 60) order by ID;
  1. 給出有5個學分的課程的名稱,並按名稱排序。
select * from univ.course where credits=5 order by title;
create view v45 as
select * from univ.course where credits=5 order by title;
  1. 給出有學生的系的系名,按升序排列
select dept_name from univ.department where(select count(*) from univ.student)>0 
order by dept_name desc;
create view v46 as
select dept_name from univ.department where(select count(*) from univ.student)>0 
order by dept_name desc;
  1. 查詢軟件工程專業2016年畢業的學生的學號,並按學號排序。
select * from univ.student where (class_name like '2012級軟件工程%' and CCREDIT=99)order by ID;
create view v47 as
select * from univ.student where (class_name like '2012級軟件工程%' and CCREDIT=99) order by ID;
  1. 查詢2017級軟件工程1班是哪個系的,給出系名。
create or replace view v48 as
	select dept_name
	from univ.class,univ.major
	where class_name='2017級軟件工程1班'
	and univ.class.major_name=univ.major.major_name;
  1. 查詢2015年選修了CS013號課程且姓“李”的學生的學號與姓名,並按學號排序。
select s.ID,s.name,year,t.course_id from univ.takes t left outer join univ.student s on(t.ID=s.ID)
where(t.course_id='CS013' and s.name like '李%' and year =2015)order by s.ID;
create view v49 as
select s.ID,s.name,year,t.course_id from univ.takes t left outer join univ.student s on(t.ID=s.ID)
where(t.course_id='CS013' and s.name like '李%' and year =2015)order by s.ID;
  1. 查詢2017年選修了CS001號課程且學號最後兩位爲“27”的學生的學號、姓名,以及課程名稱及成績,按學號排序。
select s.ID,s.name,year,t.course_id,t.course_id,t.grade from univ.takes t left outer join univ.student s on(t.ID=s.ID)
where(t.course_id='CS001' and s.ID like '%27' and year =2017)order by s.ID;
create view v50 as
select t.ID,s.name,year,t.course_id,t.grade from univ.takes t left outer join univ.student s on(t.ID=s.ID)
where(t.course_id='CS001' and s.ID like '%27' and year =2017)order by s.ID;
  1. 查詢2016年選修課程名爲"C Programming"且學號最後一位爲“9”的學生的學號、成績以及該門課獲得的學分,按學號排序。
select t.ID,c.title,t.course_id,t.grade,c.credits from univ.takes t left outer join univ.course c on(t.course_id=c.course_id)
where(c.title='C Programming' and t.ID like '%9' and year =2016)order by t.ID; 
create view v51 as
select t.ID,c.title,t.course_id,t.grade,c.credits from univ.takes t left outer join univ.course c on(t.course_id=c.course_id)
where(c.title='C Programming' and t.ID like '%9' and year =2016)order by t.ID; 
  1. 查詢軟件工程專業2017級還沒有獲得SE002號課程學分的學生的學號與姓名,按學號排序。
select t.ID,s.name,year,t.course_id,t.grade 
from univ.takes t left outer join univ.student s on(t.ID=s.ID)
where(t.course_id='SE002' and grade<60 and class_name like '2017級軟件工程%')order by s.ID;
create view v52 as
select t.ID,s.name,year,t.course_id,t.grade 
from univ.takes t left outer join univ.student s on(t.ID=s.ID)
where(t.course_id='SE002' and grade<60 and class_name like '2017級軟件工程%')order by s.ID;
  1. 查詢2018年上學期PH001號課程考試成績不及格的學生的學號與姓名,按學號排序。
select t.ID,s.name,year,t.course_id,t.grade 
from univ.takes t left outer join univ.student s on(t.ID=s.ID)
where(t.course_id='PH001' and grade<60 and year =2018 and semester='上')order by s.ID;
create view v53 as
select t.ID,s.name,year,t.course_id,t.grade 
from univ.takes t left outer join univ.student s on(t.ID=s.ID)
where(t.course_id='PH001' and grade<60 and year =2018 and semester='上')order by s.ID;
  1. 查詢2018年上學期“數據結構”課程的任課教師名單,按姓名排序。
select i.ID,i.name,year,t.course_id,c.title
from univ.teaches t left outer join univ.instructor i on(t.ID=i.ID)
left outer join univ.course c on(t.course_id=c.course_id)
where(c.title='數據結構' and year =2018 and semester='上')order by i.ID;
create view v54 as
select i.ID,i.name,year,t.course_id,c.title
from univ.teaches t left outer join univ.instructor i on(t.ID=i.ID)
left outer join univ.course c on(t.course_id=c.course_id)
where(c.title='數據結構' and year =2018 and semester='上')order by i.ID;
  1. 查詢2018年上學期葉映嵐老師所授的課程,按課程名排序。
select i.ID,i.name,year,t.course_id,c.title
from univ.teaches t left outer join univ.instructor i on(t.ID=i.ID)
left outer join univ.course c on(t.course_id=c.course_id)
where(i.name='葉映嵐' and year =2018 and semester='上')order by c.title;
create view v55 as
select i.ID,i.name,year,t.course_id,c.title
from univ.teaches t left outer join univ.instructor i on(t.ID=i.ID)
left outer join univ.course c on(t.course_id=c.course_id)
where(i.name='葉映嵐' and year =2018 and semester='上')order by c.title;
  1. 查詢2018年上學期計算機系沒有上課的教師名單,按姓名排序。
(select distinct i.ID,i.name,year
from univ.teaches t left outer join univ.instructor i on(t.ID=i.ID)
left outer join univ.course c on(t.course_id=c.course_id)
minus
(select distinct i.ID,i.name,year
from univ.teaches t left outer join univ.instructor i on(t.ID=i.ID)
left outer join univ.course c on(t.course_id=c.course_id)
where(i.dept_name='計算機' and year =2018 and semester='上'))) order by name;
create view v56 as
(select distinct i.ID,i.name,year
from univ.teaches t left outer join univ.instructor i on(t.ID=i.ID)
left outer join univ.course c on(t.course_id=c.course_id)
where(i.dept_name='計算機' and year =2018 and semester='上')) order by i.ID;
  1. 查詢選修了CS013號課程但沒有選修CS021號兩門課程的學生的姓名,按姓名排序。
(select t.ID,s.name,t.course_id
from univ.takes t join univ.student s on(t.ID=s.ID)
where t.course_id='CS013')
minus
(select t.ID,s.name,t.course_id
from univ.takes t join univ.student s on(t.ID=s.ID)
where t.course_id='CS021')
order by name;
create view v57 as
(select t.ID,s.name,t.course_id
from univ.takes t join univ.student s on(t.ID=s.ID)
where t.course_id='CS013')
minus
(select t.ID,s.name,t.course_id
from univ.takes t join univ.student s on(t.ID=s.ID)
where t.course_id='CS021')
order by name;
  1. 查詢2018年上學期選修了G0001號課程的學生的學號和班級,按學號排序。
select t.ID,s.name,s.class_name,year,t.course_id,t.grade 
from univ.takes t left outer join univ.student s on(t.ID=s.ID)
where(t.course_id='G0001' and year =2018 and semester='上')order by s.ID;
create view v58 as
select t.ID,s.name,s.class_name,year,t.course_id,t.grade 
from univ.takes t left outer join univ.student s on(t.ID=s.ID)
where(t.course_id='G0001' and year =2018 and semester='上')order by s.ID;
create or replace view v59 as
	select  distinct id,class_name
	from univ.student natural join univ.takes
	where course_id='G0001'
	and  id in (select id
	from univ.takes 
	where course_id='PH001')
	and year=2018
	and semester ='上'
	order by id;
  1. 查詢選修了化學專業所開設的全部課程、2017年已經畢業的姓陳的學生的學號、姓名與班級,按學號排序。
select distinct t.ID,s.name,s.class_name
from univ.takes t left outer join univ.student s on(t.ID=s.ID) 
left outer join univ.course c on(t.course_id=c.course_id)
where(c.MAJOR_NAME='化學' and s.class_name like '2013級%' and s.name like '陳%')order by ID;
create view v60 as
select distinct t.ID,s.name,s.class_name
from univ.takes t left outer join univ.student s on(t.ID=s.ID) 
left outer join univ.course c on(t.course_id=c.course_id)
where(c.MAJOR_NAME='化學' and s.class_name like '2013級%' and s.name like '陳%')order by ID;
  1. 查詢學號最後兩位爲09且至少選修了2015020101(學號)選修的全部課程的學生的學號與姓名,按學號排序。
(select distinct t.ID,s.name,s.class_name
from univ.takes t left outer join univ.student s on(t.ID=s.ID) 
left outer join univ.course c on(t.course_id=c.course_id)
where(t.ID like '%09'and class_name like '%計算機%'))
intersect
(select distinct t.ID,s.name,s.class_name
from univ.takes t left outer join univ.student s on(t.ID=s.ID) 
left outer join univ.course c on(t.course_id=c.course_id)
where t.course_id in(select t.course_id from univ.takes where t.ID =2015020101));
create view v61 as
select distinct t.ID,s.name,s.class_name
from univ.takes t left outer join univ.student s on(t.ID=s.ID) 
left outer join univ.course c on(t.course_id=c.course_id)
where(t.ID like '%09'and class_name like '%計算機%');
  1. 查詢學生總人數。
select count(name)from univ.student;
create view v62 as
select count(name) 學生總數 from univ.student;
  1. 查詢選修了G0001號課程的學生人數。
select count(ID) G學生人數 from univ.takes where course_id='G0001'
create view v63 as
select count(ID) G學生人數 from univ.takes where course_id='G0001';
  1. 統計選課人數最多的課程有多少人
select max(count(ID)) 最多選課人數 from univ.takes group by ID ; 
create view v62 as
select max(count(course_id)) 最多選課人數 from univ.takes group by course_id ; 
  1. 查詢平均成績大於84的學生學號與姓名,按學號排序。
select * from univ.student
where ID in (select ID from univ.takes group by ID having avg(grade)>85) order by ID;
create view v65 as
select * from univ.student
where ID in (select ID from univ.takes group by ID having avg(grade)>85) order by ID;
  1. 查詢到目前爲止學號爲2017010101的學生已經獲得的學分數。
select sum(credits) 已獲學分 from univ.course 
       where course_id in(
       select course_id from univ.takes where ID=2017010101);
create view v66 as
select sum(credits) 已獲學分 from univ.course 
       where course_id in(
       select course_id from univ.takes where ID=2017010101);
  1. 查詢2017年CS001號課程成績超過該課程平均成績20分的學生的學號與姓名,按學號排序。
select year 年份,count(*) 選修CS013人數 from univ.takes where course_id='CS013' group by year order by year desc;
create view v69 as
select year 年份,count(*) 選修CS013人數 from univ.takes where course_id='CS013' group by year order by year desc;
  1. 查詢每年選修了課程的學生人數,列出年份與人數,按年份升序排列。
select year 年份,count(*) 選修人數 from univ.takes group by year order by year desc;
create view v68 as
select year 年份,count(*) 選修人數 from univ.takes group by year order by year desc;
  1. 查詢每年選修了CS013號課程的學生人數,列出年份與人數,按年份升序排列。

  2. 查詢2010年5月以來的招生情況,列出年份與人數,按年份升序排列。學號的前4位爲入學年份。

drop view v71;
create or replace view v71 as
select year,semester,count(distinct id) as rs
from univ.takes 
where year>2015
group by year,semester;
  1. 查詢從2016年開始,各個學期選修了課程的學生人數,按年份與學期排序。
select year 年份,semester,count(*) 選修人數 from univ.takes where year> 2015  group by year,semester order by year,semester desc;
create view v71 as
select year 年份,semester,count(*) 選修人數 from univ.takes where year> 2015  group by year,semester order by year,semester desc;
  1. 查詢2008年計算機系各位教師的姓名(含沒有授課任務的教師)及其授課門數,按姓名排序。
select name 姓名,count(i.ID) 授課門數
from univ.teaches t left join univ.instructor i on (i.ID=t.ID)
where(year=2008 and dept_name='計算機')group by name order by name;
create view v72 as
select name 姓名,count(i.ID) 授課門數
from univ.teaches t left join univ.instructor i on (i.ID=t.ID)
where(year=2008 and dept_name='計算機')group by name order by name;
  1. 查詢2015年-2018年選修“人工智能”課程的學生人數,按年份排序。
select name 姓名,count(i.ID) 學生人數
from univ.teaches t left join univ.instructor i on (i.ID=t.ID)
where(year>2014 and dept_name='計算機')group by name order by name;
  1. 查詢2018年"大學物理"課程每個班及其平均成績(用round函數取整),按班名排序。
select class_name 班級,count(t.ID) 班級人數
from univ.takes t left join univ.student s on (t.ID=s.ID)
left join univ.course c on(t.course_id=c.course_id)
where (t.year=2018 and title like '大學物理%') group by class_name order by class_name;
create view v74 as
select class_name 班級,count(t.ID) 班級人數
from univ.takes t left join univ.student s on (t.ID=s.ID)
left join univ.course c on(t.course_id=c.course_id)
where (t.year=2018 and title like '大學物理%') group by class_name order by class_name;
  1. 查詢2017年全校性通識課程G0001各專業的選課情況,列出專業名與選修學生人數,按專業名稱排序。
select class_name 班級,count(t.ID) 班級人數
from univ.takes t left join univ.student s on (t.ID=s.ID)
where (t.year=2017 and course_id='G0001') group by class_name order by class_name;
create view v75 as
select class_name 班級,count(t.ID) 班級人數
from univ.takes t left join univ.student s on (t.ID=s.ID)
where (t.year=2017 and course_id='G0001') group by class_name order by class_name;

三.實驗錯誤解決方案

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