1. 程式人生 > >【sql語句】實驗一熟悉Oracle__SQL

【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;