1把C2课程的任课教师改名为“ZHU”。
update c
set teacher='ZHU'
where c#='C2';
2.用Show命令显示当前用户(scott/tiger)。
show user
3.练习SQL命令:对Oracle数据库基本表EMP和DEPT操作
1)检索EMP中所有的记录。
select *from emp;
2)列出工资在1000到2000之间的所有员工的ENAME,DEPTNO,SAL。
select ename,deptno,sal
from emp
where sal between 1000 and 2000;
3)显示DEPT表中的部门号和部门名称,并按部门名称排序。
select deptno,dname
from dept
order by dname asc;
4)显示所有不同的工作类型。
select distinct job from emp;
5)列出部门号在10到20之间的所有员工,并按名字的字母排序。
select ename,deptno
from emp
where deptno between 10 and 20
order by ename;
1) 列出部门号是20,工作是职员的员工。
select *from emp
where deptno=20 and job='clerk';
2) 显示名字中包含TH和LL的员工名字。
select ename from emp
where ename like '%TH%' or ename like '%LL%';
3) 显示所有员工的名字(Ename)和报酬(Remuneration)。
select ename,sal from emp;
4) 显示在1983年中雇佣的员工。
select ename ,hiredate from emp
where to_char(hiredate,'yyyy') ='1983';
10)查询每个部门的平均工资。
select deptno,avg(sal)
from emp
group by deptno;
11)查询出每个部门中工资最高的职工。
//自己写法
select deptno,ename,sal
from emp x
where sal=(
select max(sal)
from emp y
where x.deptno=y.deptno
);
//网上看上去很厉害的做法
select deptno, ename, sal
from emp e1
where
(
select count(1)
from emp e2
where e2.deptno=e1.deptno and e2.sal>=e1.sal
) <=3 /*这里的数值表示你想取前几名*/
order by deptno, sal desc;
12)查询出每个部门比平均工资高的职工人数。
select x.deptno,count(*)
from emp x,(select deptno,avg(sal) avgsal from emp group by deptno) y
where x.deptno=y.deptno and x.sal>y.avgsal
group by x.deptno
order by x.deptno;
4.生成一个数据表PROJECTS,其字段定义如下,其中PROJID是主键并且要求P_END_DATE不能比P_START_DATE早。
字段名称 数据类型 长度
PROJID NUMBER 4
P_DESC VARCHAR2 20
P_START_DATE DATE
P_END_DATE DATE
BUDGET_AMOUNT NUMBER 7,2
MAX_NO_STAFF NUMBER 2
create table projects(
projid number(4),
p_desc varchar2(20),
p_start_date date,
p_end_date date,
budget_amount number(7,2),
max_no_staff number(2),
primary key(projid),
check (p_start_date<p_end_date)
);
5.生成一个数据表ASSIGNMENTS,其字段定义如下,其中PROJID是外键引自PROJECTS数据表,EMPNO是数据表EMP的外键,并且要求PROJID和EMPNO不能为NULL。
字段名称 数据类型 长度
PROJID NUMBER 4
EMPNO NUMBER 4
A_START_DATE DATE
A_END_DATE DATE
BILL_RATE NUMBER 4,2
ASSIGN_TYPE VARCHAR2 2
create table assignments(
projid number(4) not null,
empno number(4) not null,
a_start_date date,
a_end_date date,
bill_rate number(4,2),
assign_type varchar2(2),
foreign key (projid) references projects(projid),
foreign key(empno) references emp(empno)
);
6.用DESCRIBE命令查看4和5题定义的字段。
desc assignments;
describe assignments;
7.给4题中的PROJECTS数据表增加一个COMMENTS字段,其类型为LONG。给5题中的ASSIGNMENTS数据表增加一个HOURS字段,其类型为NUMBER。
alter table projects
add comments long;
alter table assignments
add hours number;
8.在PROJECTS数据库表中增加下列记录:
PROJID 1 2
P_DESC WRITE C030 COURSE PROOF READ NOTES
P_START_DATE 02-JAN-88 01-JAN-89
P_END_DATE 07-JAN-88 10-JAN-89
BUDGET_AMOUNT 500 600
MAX_NO_STAFF 1 1
COMMENTS BR CREATIVE YOUR CHOICE
insert into projects
(projid,p_desc,p_start_date,p_end_date,budget_amount,max_no_staff,comments)
values(1,'WRITE C030 COURSE','02-1月-88','07-1月-88',500,1,'BR CREATIVE');
insert into projects
values(2,'PROOF READ NOTES','01-1月-89','10-1月-89',600,1,'YOUR CHOICE');
9.在ASSIGNMENTS数据库表中增加下列记录:
PROJID 1 1 2
EMPNO 7369 7902 7844
A_START_DATE 01-JAN-88 04-JAN-88 01-JAN-89
A_END_DATE 03-JAN-88 07-JAN-88 10-JAN-89
BILL_RATE 50.00 55.00 45.50
ASSIGN_TYPE WR WR PF
HOURS 15 20 30
insert into assignments
values(1,7369,'01-1月-88','03-1月-88',50.00,'WR',15);
insert into assignments
values(1,7902,'04-1月-88','03-1月-88',55.00,'WR',20);
insert into assignments
values(1,7844,'01-1月-89','10-1月-89',45.50,'PF',30);
10.把ASSIGMENTS表中ASSIGNMENT TYPE的WR改为WT,其他的值不变。
update assignments
set assign_type='WT'
where assign_type='WR';
11.在PROJECTS 和ASSIGNMENTS插入更多的记录。
insert into projects
values(33,'WELL DOWN','01-1月-99','10-1月-99',600,1,'GOOD JOB');
12.删除自己随意插入的记录。
delete from projects
where projid=33;