1.集合操作:
Union 用第二個查詢結果合并第一個查詢結果,同時不顯示重複的行。
Union all 檢索出所有的行,包括重複的行。
intersect 返回兩個查詢所檢索出的共有行。
minus 返回將第二個查詢檢索出的行從第一個查詢檢索出的行中減去之後剩餘的行。
select ename,dname,job
from dept t,emp p
where t.deptno=p.deptno and t.dname='SALES'
union/intersect/minus
select ename,dname,job
from dept t,emp p
where t.deptno=p.deptno and p.job='MANAGER';
2.子查詢:
可以在一個select語句中嵌入另一個完整的select語句,但此句的子查詢的返回結果只能有一個,如想返回多個可用 in 。
select ename,dname,job
from dept t,emp p
where t.deptno=p.deptno and t.dname=
(
select dname
from dept t,emp p
where t.deptno=p.deptno and p.sal=1600.00
);
select ename,dname,job
from dept t,emp p
where t.deptno=p.deptno and t.dname in
(
select dname
from dept t,emp p
where t.deptno=p.deptno and p.sal>3000.00
);
3.表的串連:
select t.dname
from emp p,dept t
where p.deptno=t.deptno and p.ename='SMITH';
由於實施了關係串連的兩表是任何串連的,所有需要在where子句中設定主關鍵字等於外部關鍵字的條件,否則查詢結果不對。
4.case語句:
*簡單case語句,使用運算式確定傳回值,但case後的變數只有一個;
select t.dname,t.loc,t.deptno,
case t.deptno
when 10 then 'ACCOUNTING'
when 20 then 'RESEARCH'
when 30 then 'SALES'
else 'T'
end
from dept t;
*搜尋case語句,使用條件確定傳回值,但when後面可以跟多個條件。
select t.dname,t.loc,t.deptno,
case
when t.deptno=10 and t.loc='CHICAGO' then 'ACCOUNTING'
when t.deptno=20 then 'RESEARCH'
when t.deptno=30 then 'SALES'
else 'T'
end
from dept t;
5.decode函數:
decode(value,search_value,result,default_value)
如果value和search_value相等,則返回result,否則返回default_value。
select t.dname,t.loc,t.deptno,
decode(t.deptno,
10,'ACCOUNTING',
20,'RESEARCH',
30,'SALES',
'T'
)
from dept t;