sql语句的编程手册(1)

一、SQL PLUS 
1 引言 

SQL命令 
以下17个是作为语句开头的关键字: 
alter  drop  revoke 
audit  grant  rollback* 
commit*  insert  select 
comment  lock  update 
create  noaudit  validate 
delete  rename 
这些命令必须以“;”结尾 
带*命令句尾不必加分号,并且不存入SQL缓存区。 

SQL中没有的SQL*PLUS命令 
这些命令不存入SQL缓存区 
@  define  pause 
#  del  quit 
$  describe  remark 
/  disconnect  run 
accept  document  save 
append  edit  set 
break  exit  show 
btitle  get  spool 
change  help  sqlplus 
clear  host  start 
column  input  timing 
compute  list  ttitle 
connect  newpage  undefine 
copy 

--------- 
2 数据库查询 

数据字典 
TAB 用户创建的所有基表、视图和同义词清单 

DTAB 构成数据字典的所有表 

COL 用户创建的基表的所有列定义的清单 

CATALOG 用户可存取的所有基表清单 

select * from tab; 

describe命令 描述基表的结构信息 
describe dept 

select * 
from emp; 

select empno,ename,job 
from emp; 

select * from dept 
order by deptno desc; 

逻辑运算符 
= !=或<> > >= < <= 
in 
between value1 and value2 
like 


in null 
not 
no in,is not null 

谓词in和not in 
有哪些职员和分析员 
select ename,job 
from emp 
where job in ('clerk','analyst'); 

select ename,job 
from emp 
where job not in ('clerk','analyst'); 

谓词between和not between 
哪些雇员的工资在2000和3000之间 
select ename,job,sal from emp 
where sal between 2000 and 3000; 

select ename,job,sal from emp 
where sal not between 2000 and 3000; 

谓词like,not like 
select ename,deptno from emp 
where ename like 'S%'; 
(以字母S开头) 
select ename,deptno from emp 
where ename like '%K'; 
(以K结尾) 
select ename,deptno from emp 
where ename like 'W___'; 
(以W开头,后面仅有三个字母) 
select ename,job from emp 
where job not like 'sales%'; 
(哪些雇员的工种名不以sales开头) 

谓词is null,is not null 
没有奖金的雇员(即commision为null) 
select ename,job from emp 
where comm is null; 

select ename,job from emp 
where comm is not null; 

多条件查询 
select ename,job 
from emp 
where deptno=20 
and job!='clerk'; 

表达式 
+ - * / 

算术表达式 
选择奖金高于其工资的5%的雇员 
select ename,sal,comm,comm/sal from emp 
where comm>.05*sal 
  order by comm/sal desc; 

日期型数据的运算 
add two days to 6-Mar-87 
6-Mar-87 + 2 = 8-Mar-87 
add two hours to 6-Mar-87 
6-Mar-87 + 2/24 = 6-Mar-87 and 2hrs 
add 15 seconds to 6-Mar-87 
6-Mar-87 + 15/(24*60*60) = 6-Mar-87 and 15 secs 

列名的别名 
select ename employee from emp 
  where deptno=10; 
(别名:employee) 
select ename,sal,comm,comm/sal "C/S RATIO" from emp 
  where comm>.05*sal 
  order by comm/sal desc; 

SQL命令的编辑 
list or l 显示缓冲区的内容 
list 4 显示当前SQL命令的第4行,并把第4行作为当前行,在该行号后面有个*。 
change or c 用新的内容替换原来在一行中第一次出现内容 
SQL>c/(...)/('analyst')/ 
input or i 增加一行或多行 
append or a 在一行后追加内容 
del  删除当前行 删除SQL缓冲区中的当前行 
run  显示并运行SQL缓冲区中的命令 
/  运行SQL缓冲区中的命令 
edit  把SQL缓冲区中的命令写到操作系统下的文本文件, 
并调用操作系统提供的编辑器执行修改。 

------------- 
22 数据操纵 
数据的插入 
insert into dept 
  values (10,'accounting','new york'); 

insert into dept (dname,deptno) 
  values ('accounting',10); 

从其它表中选择插入数据 
insert into emp (empno,ename,deptno) 
select id,name,department 
from old_emp 
where department in(10,20,30,40); 

使用参数 
insert into dept 
  values(&deptno,&dname,&loc); 
执行时,SQL/PLUS对每个参数将有提示用户输入 

参数对应日期型或字符型数据时,可在参数上加引号,输入时就可不用引号 
insert into dept 
  values(&deptno,'&dname','&loc'); 

插入空值(NULL) 
insert into dept 
  values(50,'education',null); 

插入日期型数据 
日期型数据缺省格式:DD-MON-YY 
insert into emp 
(empno,ename,hiredate) 
values(7963,'stone','07-APR-87'); 

系统时间:SYSDATE 
insert into emp 
(empno,ename,hiredate) 
values(7600,'kohn',SYSDATE); 

数据更新 
update emp 
set job='manager' 
where ename='martin'; 

update emp 
set job='market rep' 
where ename='salesman'; 

update emp 
set deptno=40,job='market rep' 
where job='salesman'; 

数据删除 
delete emp 
where empno=765; 

更新的提交 
commit 

自动提交方式 
set autocommit on 
如果状态设为开,则使用inesrt,update,delete会立即提交。 

更新取消 
rollback 

两次连续成功的commit之间的操作,称为一个事务 

--------------- 
4  创建基表、视图 
创建基表 
create table dept 
(deptno number(2), 
dname char(14), 
loc char(13)); 

数据字典会自动更新。 
一个基表最多254列。 

表名列名命名规则: 
限制 
第一个字符必须是字母,后面可任意(包括 $ # _ 但不能是逗号)。 
名字不得超过30个字符。 

唯一 
某一用户的基表名必须唯一,不能是ORACLE的保留字,同一基表的列名互不相同。 

使用双引号 
如果表名用双引号括起来,则可不满足上述规则; 
只有使用双引号,才能区别大、小写; 
命名时使用了双引号,在以后的操作也必须使用双引号。 

数据类型: 
char(n)    (不得超过240字符) 
number(n,d) 
date 
long    (最多65536字符) 
raw    (二进制原始数据) 

空值处理 
有时要求列值不能为空 
create table dept 
(deptno number(2) not null, 
dname char(14), 
loc char(13)); 

在基表中增加一列 
alter table dept 
add (headcnt number(3)); 

修改已有列属性 
alter table dept 
modify dname char(20); 
注:只有当某列所有值都为空时,才能减小其列值宽度。 
只有当某列所有值都为空时,才能改变其列值类型。 
只有当某列所有值都为不空时,才能定义该列为not null。 
例: 
alter table dept modify (loc char(12)); 
alter table dept modify loc char(12); 
alter table dept modify (dname char(13),loc char(12)); 

创建视图 
create view managers as 
select ename,job,sal 
from emp 
where job='manager'; 

为视图列名取别名 
create view mydept 
(person,title,salary) 
as select ename,job,sal 
from emp 
where deptno=10; 

with check option选项 
使用with check option,保证当对视图插入或更新数据时, 
该数据必须满足视图定义中select命令所指定的条件。 
create view dept20 as 
select ename,job,sal,deptno 
from emp 
where deptno=20 
with check option; 
在做下述操作时,会发生错误 
update dept20 
set deptno=30 
where ename='ward'; 

基表、视图的拷贝 
create table emp2 
as select * from emp; 

基表、视图的删除 
drop table 表名 
drop view 视图名 
posted @ 2007-01-24 15:09  子午  阅读(493)  评论(0编辑  收藏  举报