題目:已知公司的員工表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;