2.union:可以把第一個查詢語句中的所有數據行與第二個查詢語句的所有數據行相加,消除重複行,最終返回結果。union all不消除重複行。
select empno,ename from emp
where ename like 'A%' or ename like 'B%'
union
select empno,ename from emp
where ename like 'B%' or ename like 'C%'
3.intersect:集合交運算,返回兩個查詢結果同時存在的數據。
4.minus:集合差運算,返回第一個查詢中存在而第二個查詢中不存在的數據。
5.外連接:將表中的列全部檢索出來,而不論該列數據在另一個表中是否有匹配的數據,如果有相應的匹配數據,那麼表示執行的查詢按照內 連接查詢的形式執行。如果沒有相對應的匹配數據,則相應表中對應的內容是空值。
下面是左外連接(+號在左邊,如果在右邊則是右外連接)
select ename,d.deptno,dname
from emp e,dept d
where e.deptno(+)=d.deptno
order by ename
6.內連接:把兩個表連接成一個臨時表,在這個表中,僅包含那些滿足連接條件的記錄行。內連接有兩種方式:等價連接非等價連接。
7.自連接:把某一個表中的行同該表中另一些行連接起來。自連接主要用於比較相同的信息,但是所比較的列必須有相同的或者兼容的類型。
select worker.ename||'的經理是::'||manager.ename
from emp worker,emp manager
where worker.mgr=manager.empno
8.group by:在select子句中只能有兩種類型表達式,一種是合計函數,一種是出現在group by子句後面的列名,沒有出現在group by子句後面 的列名不可以出現在select 子句的非合計函數表達式中。如果在select語句中沒有出現group by子句,則不能在select子句中同時出現單個 列名和合計函數的混合現象。如果要限制分組中的數據,則可以使用having子句而不能使用where子句。
9.使用子查詢要遵循的原則:(單行,多行,多列子查詢)
(1)子查詢必須使用括號括起來,否則無法判斷子查詢語句的開始和結束。
(2)子查詢只能出現在where子句中比較運算符的右端。
(3)不能在子查詢語句中包含order by子句,而外查詢語句可以有一個order by子句。
(4)子查詢允許嵌套多層。
(5)在子查詢中可以使用兩種比較運算符,即單行運算符和多行運算符。
10.單行子查詢比較運算符:=,>,>=,<,<=,<>。如果在單行子查詢中返回了多行數據,那麼這個子查詢就是錯誤的。
11.多行子查詢比較運算符:
in:等於列表中的任何一個值
any:與子查詢返回的每一個值進行比較,<any:表示小於最大值,=any:與in運算符等價,>any:表示大於最小值。
all:與子查詢返回的所有值進行比較,<all:小於最小值,>all:大於最大值。
12:如果子查詢返回了多個列的數據,那麼稱該子查詢爲多列子查詢。
select ename,job,hiredate,sal,deptno
from emp
where(sal,nvl(comm,-1)) in (select sal,nvl(comm,-1) from emp where deptno=20);
update emp set(job,deptno)=(select job,deptno from emp where empno=7499);
select a.ename,a.deptno,a.sal,b.avgsalary from emp a,
(select deptno,avg(sal) as avgsalary from emp group by deptno) b
where a.deptno=b.deptno and a.sal>b.avgsalary;