【sql語句】實驗四 SQL綜合練習
(一)、假設已經建立S、C、SC表,並插入下列資料:
學生表S (S#,SNAME,AGE,SEX):(S#)
課程表C (C#, CNAME, TEACHER):(C#)
選課關係表SC (S#, C#, GRADE):(S#,C#)
1、 檢索選修課程名為MATHS的學生學號和姓名;
select x.s#,x.sname
from s x, sc y, c z
where x.s#=y.s# and y.c#=z.c# and z.cname='MATHS';
2、 檢索選修課程號為C2或C4的學生學號(區分大小寫);
select distinct x.s# from s x,sc y where x.s#=y.s# and y.c#='C2' or y.c#='C4';
3、 檢索LIU老師教的課程號和課程名;
select c#,cname
from c
where teacher='LIU';
4、 檢索不學C2的學生姓名與年齡;
select distinct x.sname, x.age
from s x, sc y
where y.c# not in('C2');
5、 為SC表按學號降序和課程號降序建唯一索引;
create index ind_sc on sc(s# desc, c# desc);
6、 修改S表,增加SDEPT列(SDEPT表示學生所在的系);
alter table sc add sdept char(30);
7、 建立關於學生學號和平均成績的檢視;
create view s_avg
as select s# sno, avg(grade) avg
from sc
group by s#;
(二)已知公司的三個表資訊,向每個表中插入適當的資料。
員工表EMP1(EID, ENAME, BDATE, SEX, CITY),
部門表DEPT1(DID, DNAME, DCITY),
工作表WORK(EID,DID,STARTDATE,SALARY)。各個欄位說明如下:
注:EID——員工編號,最多6個字元。例如A00001(主鍵)
ENAME——員工姓名,最多10個字元。例如SMITH
BDATE——出生日期,日期型
SEX——員工性別,單個字元。F或者M
CITY——員工居住的城市,最多20個字元。例如:上海
DID——部門編號,最多3個字元。例如 A01 (主鍵)
DNAME——部門名稱,最多20個字元。例如:研發部門
DCITY——部門所在的城市,最多20個字元。例如:上海
STARTDATE——員工到部門上班的日期,日期型
SALARY——員工的工資。整型。
請使用ORACLE的sql*plus 完成下列的操作
1、 列出員工編號以字母P至S開頭的所有員工的基本資訊。
select * from emp1
where eid like 'P%' or eid like 'Q%' or eid like 'R%' or eid like 'S%';
2、 刪除年齡超過60歲的員工。
delete from emp1
where months_between( sysdate, bdate)/12>60;
3、 為工齡超過10年的職工增加10%的工資。
update work
set salary=salary*1.1
where months_between(sysdate,startdate)/12>10;
4、 查詢擁有最多的員工的部門的基本資訊(要求只取出一個部門的資訊),如果有多個部門人數一樣,那麼取出部門編號最小的那個部門的基本資訊。
① create view vw_maxemp(did,empno)
as select did,count(*)
from work
group by did;
② select * from dept1
where did in( select min(did)
from vw_maxemp
where empno=(select max(empno) from vw_maxemp));
5、 查詢部門人數大於5的每個部門的編號,名稱,人數。
select * from dept1
where did in( select did
from vw_maxemp
where empno>5);
6、 查詢部門人數大於5的每個部門的最高工資,最低工資。
① create view vw_maxemp2(did,empno)
as select did,count(*)
from work
group by did
having count(*)>5;
② select did,min(salary),max(salary)
from work
group by did
having did in(select did from vw_maxemp2);