1 表的连接查询
连接有相等连接、不等连接、自连接和外连接。但比较常说的是内连接和外连接。
相等连接示例:select a.name , b.number from a ,b where a.id=b.id
不等连接示例:select a.name ,b.number from a,b where a.id between b.losal and b.hisal
自连接示例:select t1.name ,t2.manager from emp t1,emp t2 where t1.managername=t2.name
外连接示例: select d.dname,e.ename from dept d,emp e where d.deptno=e.deptno(+) and e.deptno(+) =10
当使用“+”操作符执行外连接时,如果在where 子句中包含多个条件则必须在所有条件中都包含该操作符,它只能用于列而不能用在表达示上,且不能和OR和IN操作符一起使用。
为了简化连接查询,使得连接查询更加直观更容易写,SQL1999标准为连接查询提供了新语法,如:
select table.columnname,table2.columnname from table1
[cross join table2] |[Natural join table2]|
[join table using (columnname)]|
[join table2 on (table1.columnname=table2.columnname)]|
[left|right|full outer join table2]
2 游标的使用
游标分显式和隐含,后者用于处理单行SELECT into和DML语句,前者用于处理SELECT语句返回的多行数据。
游标的使用分为:
定义游标
打开游标
提取数据
关闭游标
example:
declare
cursor emp_cursor is
select ename,job,sal from emp where dep=&dno;---&dno is the input parameter
v_ename emp.ename%type;
v_job emp.job%type;
v_sal emp.sal%type;
begin
open emp_cursor;
loop
fetch emp_cursor int v_ename,v_job,v_sal;
exit when emp_cursor%notfound;
dbms_output.put_line('name'||v_ename||'job'||v_job||'salary'||v_sal);
end loop;
close emp_cursor;
end;
/
3存储过程
Create or replace procedure divide(num1 in out number,num2 in out number) is
v1 number;
v2 number;
begin
v1 :=TRUNC(num1/num2);
v2 :=MOD(num1,num2);
num1 := v1;
num2 := v2;
end;
/
调用存储过程:
delcare
num1 number;
num2 number;
num1 := 3;
num2 := 5;
exec divide(num1,num2)
4触发器
触发器包括语句触发器和行触发器两种类型。
语句触发器语法:
create or replace trigger trigger_name
before|after event1 [or event2 or event 3] on table_name
SQL block;
create or replace trigger tr_sec_emp
before insert or update or delete on emp
begin
....
end;
/
行触发器语法:
create or replace trigger trigger_name
before or after event1 or event2 or event3
on table_name
for each row [when condition]
sql block;