表的連接是指在一個(gè)SQL語(yǔ)句中通過(guò)表與表之間的關(guān)連 從一個(gè)或多個(gè)表中檢索相關(guān)的數(shù)據(jù) 大體上表與表之間的連接主要可分四種 分別為相等連接 外連接 不等連接和自連接 本文將主要從以下幾個(gè)典型的例子來(lái)分析Oracle表的四種不同連接方式:
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:國(guó)際域名空間、網(wǎng)絡(luò)空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、鐵東網(wǎng)站維護(hù)、網(wǎng)站推廣。
相等連接
通過(guò)兩個(gè)表具有相同意義的列 可以建立相等連接條件
只有連接列上在兩個(gè)表中都出現(xiàn)且值相等的行才會(huì)出現(xiàn)在查詢結(jié)果中
例 查詢員工信息以及對(duì)應(yīng)的員工所在的部門信息;
SELECT?*?FROM?EMP DEPT; SELECT?*?FROM?EMP DEPT WHERE?EMP DEPTNO?=?DEPT DEPTNO;
REM 顯示工資超過(guò) 的員工信息以及對(duì)應(yīng)的員工的部門名稱
外連接
對(duì)于外連接 Oracle中可以使用 (+) 來(lái)表示 i可以使用LEFT/RIGHT/FULL OUTER JOIN 下面將配合實(shí)例一一介紹 除了顯示匹配相等連接條件的信息之外 還顯示無(wú)法匹配相等連接條件的某個(gè)表的信息
外連接采用(+)來(lái)識(shí)別
A) 左條件(+) = 右條件;
代表除了顯示匹配相等連接條件的信息之外 還顯示右條件所在的表中無(wú)法匹配相等連接條件的信息
此時(shí)也稱為 右外連接 另一種表示方法是:
SELECT FROM 表 RIGHT OUTER JOIN 表 ON 連接條件
B) 左條件 = 右條件(+);
代表除了顯示匹配相等連接條件的信息之外 還顯示左條件所在的表中無(wú)法匹配相等連接條件的信息
此時(shí)也稱為 左外連接
SELECT FROM 表 LEFT OUTER JOIN 表 ON 連接條件
例 顯示員工信息以及所對(duì)應(yīng)的部門信息
無(wú)法顯示沒(méi)有部門的員工信息
無(wú)法顯示沒(méi)有員工的部門信息
SELECT?*?FROM?EMP DEPT?WHERE?EMP DEPTNO?=?DEPT DEPTNO;
直接做相等連接:
SELECT?*?FROM?EMP?JOIN?DEPT?ON?EMP DEPTNO?=?DEPT DEPTNO;
REM 顯示員工信息以及所對(duì)應(yīng)的部門信息 顯示沒(méi)有員工的部門信息
SELECT?*?FROM?EMP DEPT?WHERE?EMP DEPTNO(+)?=?DEPT DEPTNO; SELECT?*?FROM?EMP?RIGHT?OUTER?JOIN?DEPT?ON?EMP DEPTNO?=?DEPT DEPTNO;
REM 顯示員工信息以及所對(duì)應(yīng)的部門信息 顯示沒(méi)有部門的員工信息
SELECT?*?FROM?EMP DEPT?WHERE?EMP DEPTNO?=?DEPT DEPTNO(+); SELECT?*?FROM?EMP?LEFT?OUTER?JOIN?DEPT?ON?EMP DEPTNO?=?DEPT DEPTNO;
不等連接
兩個(gè)表中的相關(guān)的兩列進(jìn)行不等連接 比較符號(hào)一般為 BEEEN AND
REM?SALGRADE DESC?SALGRADE; SELECT?*?FROM?SALGRADE;
REM 顯示員工的編號(hào) 姓名 工資 以及工資所對(duì)應(yīng)的級(jí)別
SELECT?EMPNO ENAME SAL SALGRADE *?FROM?SALGRADE EMP WHERE?EMP SAL?BEEEN?LOSAL?AND?HISAL;
REM 顯示雇員的編號(hào) 姓名 工資 工資級(jí)別 所在部門的名稱;
SELECT?EMPNO ENAME SAL GRADE DNAME?FROM?EMP DEPT SALGRADE WHERE?EMP DEPTNO?=?DEPT DEPTNO?AND?EMP SAL?BEEEN?LOSAL?AND?HISAL;
自連接
自連接是數(shù)據(jù)庫(kù)中經(jīng)常要用的連接方式 使用自連接可以將自身表的一個(gè)鏡像當(dāng)作另一個(gè)表來(lái)對(duì)待 從而能夠得到一些特殊的數(shù)據(jù) 下面介紹一下自連接的方法:
將原表復(fù)制一份作為另一個(gè)表 兩表做笛卡兒相等連接
例 顯示雇員的編號(hào) 名稱 以及該雇員的經(jīng)理名稱
SELECT WORKER ENAME WORKER MGR MANAGER EMPNO MANAGER ENAME FROM EMP WORKER EMP MANAGER
lishixinzhi/Article/program/Oracle/201311/16733
創(chuàng)建表:
create?table?a
(id?int,
value?varchar2(1));
create?table?b
(id?int,
value?varchar2(1));
insert?into?a?values?(1,'A');
insert?into?a?values?(1,'B');
insert?into?a?values?(2,'A');
insert?into?a?values?(2,'B');
insert?into?a?values?(2,'C');
insert?into?b?values?(1,'A');
insert?into?b?values?(1,'B');
insert?into?b?values?(1,'C');
insert?into?b?values?(2,'A');
insert?into?b?values?(2,'B');
commit;
執(zhí)行:
select?nvl(a.id,b.id)?id,a.value,b.value?from?a?full?join?b?on?a.id=b.id?and?a.value=b.value?order?by?id,a.value
結(jié)果:
--實(shí)驗(yàn)用表:
CREATE?TABLE?A(NAME?VARCHAR2(10),?DEPTID?VARCHAR2(2));
CREATE?TABLE?B(ID?VARCHAR2(10),?DEPTID?VARCHAR2(2),?NUM?VARCHAR2(2),?CREATE_TIME?DATE);
--查詢某一時(shí)間段內(nèi);全部部門及其業(yè)務(wù)量
SELECT?A.NAME,?COUNT(B.ID),?SUM(B.NUM)?AS?部門業(yè)務(wù)量
FROM?A?A,?B?B
WHERE?A.DEPTID?=?B.DEPTID(+)
AND?B.CREATE_TIME??TO_DATE('20141001',?'yyyyMMdd')
AND?B.CREATE_TIME??TO_DATE('20141022',?'yyyyMMdd')
GROUP?BY?A.NAME;
select e.empno, e.ename, d.deptno, d.dname
from emp e, dept d
where e.deptno = d.deptno;
在之前所使用的查詢操作之中,都是從一張表之中查詢出所需要的內(nèi)容,那么如果現(xiàn)在一個(gè)查詢語(yǔ)句需要顯示多張表的數(shù)據(jù),則就必須應(yīng)用到多表查詢的操作,而多表查詢的語(yǔ)法如下:
SELECT [DISTINCT] * | 字段 [別名] [,字段 [別名] ,…] FROM 表名稱 [別名], [表名稱 [別名] ,…] [WHERE 條件(S)] [ORDER BY 排序字段 [ASC|DESC] [,排序字段 [ASC|DESC] ,…]]。
擴(kuò)展資料:
Oracle 常用的關(guān)聯(lián)查詢:
Oracle外連接:
(1)左外連接 (左邊的表不加限制)。
(2)右外連接(右邊的表不加限制)。
(3)全外連接(左右兩表都不加限制)。
outer join則會(huì)返回每個(gè)滿足第一個(gè)(頂端)輸入與第二個(gè)(底端)輸入的聯(lián)接的行。它還返回任何在第二個(gè)輸入中沒(méi)有匹配行的第一個(gè)輸入中的行。
外連接分為三種: 左外連接,右外連接,全外連接。 對(duì)應(yīng)SQL:LEFT/RIGHT/FULL OUTER JOIN。 通常我們省略outer 這個(gè)關(guān)鍵字。 寫成:LEFT/RIGHT/FULL JOIN。
在左外連接和右外連接時(shí)都會(huì)以一張表為基表,該表的內(nèi)容會(huì)全部顯示,然后加上兩張表匹配的內(nèi)容。 如果基表的數(shù)據(jù)在另一張表沒(méi)有記錄。 那么在相關(guān)聯(lián)的結(jié)果集行中列顯示為空值(NULL)。
名稱欄目:oracle怎么兩表聯(lián)查 oracle 兩表聯(lián)查
URL地址:http://vcdvsql.cn/article46/hpgjeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、做網(wǎng)站、靜態(tài)網(wǎng)站、網(wǎng)站排名、建站公司、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)