oracle習題帶答案

題目:已知公司的員工表EMP(EID, ENAME, BDATE, SEX, CITY),

部門表DEPT(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、 創建表EMP,DEPT,WORK,並定義表的主鍵和外鍵。

2、 向每個表中插入適當的數據。例如:插入三條部門的數據,分別爲每個部門插入兩條員工數據

3、 查詢“研發”部門的所有員工的基本信息

4、 查詢擁有最多的員工的部門的基本信息(要求只取出一個部門的信息),如果有多個部門人數一樣,那麼取出部門編號最小的那個部門的基本信息。

5、 顯示部門人數大於5的每個部門的編號,名稱,人數

6、 顯示部門人數大於5的每個部門的最高工資,最低工資

7、 列出員工編號以字母P至S開頭的所有員工的基本信息

8、 刪除年齡超過60歲的員工

9、 爲工齡超過10年的職工增加10%的工資

答案如下:

create table emp1(
eid number(6),
ename varchar2(20),
bdate date,
sex   char(2),
city varchar2(20)
);

create table dept1(
did number(6),
dname varchar2(20),
dcity varchar2(20)
);

create table work1(
eid number(6),
did number(6),
startdate date,
salary integer
);

1.
alter table emp1
add constraint emp1_eid_pk primary key(eid);

alter table dept1
add constraint dept1_did_pk primary key (did);

alter table work1
add constraint work1_eid_fk foreign key(eid) references emp1(eid);

alter table work1
add constraint work1_did_fk foreign key (did) references dept1(did);

2.
往emp1 表添加數據
insert into emp1 (eid,ename, bdate)
select empno, ename, hiredate
from emp;

update emp1
set (sex,city) =('男','北京'); ( 這種寫法是錯誤的,只有利用子查詢更新表,可以這樣)

update emp1
set sex='男' , city='北京';

往dept1表添加數據

insert into dept1(did,dname)
select deptno,dname
from dept;

update dept1
set dcity='北京';

/把其中的一個部門改成開發,爲了後面練習用
update dept1
set dname='developer'
where did=10;

往work1表添加數據

insert into work1 (eid,did,startdate,salary)
values(7369,10, '', 2500);

insert into work1 (eid,did,startdate,salary)
values(7499,10, '', 2501);

insert into work1 (eid,did,startdate,salary)
values(7521,10, '', 2500);

3.
select emp1.eid, emp1.ename,dept1.dname,work1.salary
from emp1,dept1,work1
where emp1.eid=work1.eid
and dept1.did=work1.did;

4.

select max(e.renshu), d.did 
from (select did,count(eid) renshu
              from work1 
              group by did)e,dept1 d
where d.did=e.did
group by d.did;

5.

select e.*, d.did, d.dname, d.dcity
from (select did,count(eid)
              from work1 
              group by did
              having count(eid)>5)e,dept1 d
where d.did=e.did;

6.

select max(salary), min(salary)
from work1
having count(eid)>2 
group by did;

7.

select ename

from emp1

where ename like 'S%'

or ename like 'P%' ;

8.

delete from emp1

where months_between( sysdate, bdate)/12>60;

9.

update work1

set salary= salary*1.1

where months_between( sysdate ,startdate)/12>10;

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