八、 insert
insert into <table_name>[col_name, col_name, col_name,…,]
values(value, value, value, value,…);
在sqlplus下,可以用&字符进行参数替换,可以通过工具逐个输入insert的值
九、 update
update <table_name>
set col_name=value/expression, col_name=value/expression
[where <conditions>]
十、 delete
delete from <table_name>
[where <condition>];
或delete <table_name>
[where <condition>];
truncate和delete的区别:
a、delete可以使用rollback命令进行撤销,而truncate不可
b、truncate不能触发任何delete触发器。
十一、 约束
1、 unique
tel_number char(10) constraint cm_unique unique,
组合constraint cm_unique unique(tel_number,online_email),
alter table cm add constraint cm_unique unique(tel_number),
2、 check
tel_number char(14) check(length(tel_number)=14),
3、 not null
tel_number char(14) not null,
4、 primary key
tel_number char(14) constraint cm_primary primary key,
5、 foreigh key
constraint emp1_foreign foreign key(deptno) references dept1(deptno),
级联删除:
deptno number(2) references dept1(deptno) [on delete set null] 删除子记录时主记录相应值为null
constraint emp1_foreign foreign key(deptno) references dept1(deptno) [on delete cascade] 删除子记录时级联删除主记录
若不写则子记录存在不可删除主记录。
十二、 连接
1、 左连接:
表示左表中指定的内容全部返回
select e.ename,d.dname
from emp1 e,dept d
where e.deptno = d.deptno(+)
2、 右连接:
表示右表中指定的内容全部返回
select e.ename,d.dname
from emp1 e,dept d
where e.deptno(+) = d.deptno
3、 自连接
select worker.ename,manager.ename
from emp worker,emp manager
where worker.mgr = manager.empno
4、 嵌套查询
子查询中不能有order by分组语句;
oracle中使用exists比使用in查询速度快。因为在使用exists时,系统会先检查主查询,然后运行子查询知道它找到第一个匹配项;而在系统在执行in语句时,会先执行子查询并将结果放到一个加了索引的临时表,在执行子查询之前,系统先将主查询挂起。
5、 集合运算
union all:结合两个select语句结果,可以有重复
union:结合两个select语句结果,消除任何相同的行
minus:从第一个select结果中消除第二个select结果
intersect:只返回同时出现在两个select语句中的行
十三、 PL/SQL
declare
<declarations section>
begin
<executable command>
declare
<declarations section>
begin
<executable command>
end;
end;
1、 定义变量和sql定义相似
variable_name [constant] datatype [not null][{:=|default} default_value]
定义常量时使用constant。
2、 交互式输入变量值
v_empno number(4):=&v_empno;
3、 打印语句
dbms_output.put_line(v_empno);
4、 显示记录
type record_name is record(field_definition_list);
例:
type t_emp is record
(
v_empno emp.empno%type,
v_ename emp.ename%type
);
5、 隐式记录
v_emp emp%rowtype;
6、 index_by表
type type_name is table of element_type [not null] index by binary_interger;
declare
type table_empno_type is table of emp.empno%type index by binary_integer;
table_empno table_empno_type;
i binary_integer:=1;
begin
select empno
into table_empno(i)
from emp
where empno=7369;
end;
7、 可变数组
type type_name is [varray|varying array] (max_size) of element_type [not null]
declare
type varray_empno_type is varray(5) of emp.emono%type;
varray_empno varray_empno_type;
begin
varray_empno:=varray_empno_type(7369.7499);
8、 集合的方法
count:集合中的元素个数
delete:删除集合中所有元素
delete(x):删除下标为x的元素
delete(x,y):删除下标从x到y的元素
extend:在集合末尾添加一个元素
extend(x):在集合末尾添加x个元素
extend(x,n):在集合末尾添加n个x的副本
first:返回第一个元素的下标号,对于varray始终返回1
last:返回最后一个元素的下标号
limit返回可变数组集合的最大的元素个数
next:返回x之后的元素
prior:返回x之前的元素
trim:从末端删除一个元素
trim(x):从末端删除x个元素
9、 动态sql
excute immediate 动态SQL语句 using 绑定参数列表 returning into输出参数列表;