【sql語句】實驗一熟悉Oracle__SQL
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;