表的連接是指在一個(gè)SQL語句中通過表與表之間的關(guān)連 從一個(gè)或多個(gè)表中檢索相關(guān)的數(shù)據(jù) 大體上表與表之間的連接主要可分四種 分別為相等連接 外連接 不等連接和自連接 本文將主要從以下幾個(gè)典型的例子來分析Oracle表的四種不同連接方式:
為蘭溪等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及蘭溪網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、蘭溪網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
相等連接
通過兩個(gè)表具有相同意義的列 可以建立相等連接條件
只有連接列上在兩個(gè)表中都出現(xiàn)且值相等的行才會出現(xiàn)在查詢結(jié)果中
例 查詢員工信息以及對應(yīng)的員工所在的部門信息;
SELECT?*?FROM?EMP DEPT; SELECT?*?FROM?EMP DEPT WHERE?EMP DEPTNO?=?DEPT DEPTNO;
REM 顯示工資超過 的員工信息以及對應(yīng)的員工的部門名稱
外連接
對于外連接 Oracle中可以使用 (+) 來表示 i可以使用LEFT/RIGHT/FULL OUTER JOIN 下面將配合實(shí)例一一介紹 除了顯示匹配相等連接條件的信息之外 還顯示無法匹配相等連接條件的某個(gè)表的信息
外連接采用(+)來識別
A) 左條件(+) = 右條件;
代表除了顯示匹配相等連接條件的信息之外 還顯示右條件所在的表中無法匹配相等連接條件的信息
此時(shí)也稱為 右外連接 另一種表示方法是:
SELECT FROM 表 RIGHT OUTER JOIN 表 ON 連接條件
B) 左條件 = 右條件(+);
代表除了顯示匹配相等連接條件的信息之外 還顯示左條件所在的表中無法匹配相等連接條件的信息
此時(shí)也稱為 左外連接
SELECT FROM 表 LEFT OUTER JOIN 表 ON 連接條件
例 顯示員工信息以及所對應(yīng)的部門信息
無法顯示沒有部門的員工信息
無法顯示沒有員工的部門信息
SELECT?*?FROM?EMP DEPT?WHERE?EMP DEPTNO?=?DEPT DEPTNO;
直接做相等連接:
SELECT?*?FROM?EMP?JOIN?DEPT?ON?EMP DEPTNO?=?DEPT DEPTNO;
REM 顯示員工信息以及所對應(yīng)的部門信息 顯示沒有員工的部門信息
SELECT?*?FROM?EMP DEPT?WHERE?EMP DEPTNO(+)?=?DEPT DEPTNO; SELECT?*?FROM?EMP?RIGHT?OUTER?JOIN?DEPT?ON?EMP DEPTNO?=?DEPT DEPTNO;
REM 顯示員工信息以及所對應(yīng)的部門信息 顯示沒有部門的員工信息
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)行不等連接 比較符號一般為 BEEEN AND
REM?SALGRADE DESC?SALGRADE; SELECT?*?FROM?SALGRADE;
REM 顯示員工的編號 姓名 工資 以及工資所對應(yīng)的級別
SELECT?EMPNO ENAME SAL SALGRADE *?FROM?SALGRADE EMP WHERE?EMP SAL?BEEEN?LOSAL?AND?HISAL;
REM 顯示雇員的編號 姓名 工資 工資級別 所在部門的名稱;
SELECT?EMPNO ENAME SAL GRADE DNAME?FROM?EMP DEPT SALGRADE WHERE?EMP DEPTNO?=?DEPT DEPTNO?AND?EMP SAL?BEEEN?LOSAL?AND?HISAL;
自連接
自連接是數(shù)據(jù)庫中經(jīng)常要用的連接方式 使用自連接可以將自身表的一個(gè)鏡像當(dāng)作另一個(gè)表來對待 從而能夠得到一些特殊的數(shù)據(jù) 下面介紹一下自連接的方法:
將原表復(fù)制一份作為另一個(gè)表 兩表做笛卡兒相等連接
例 顯示雇員的編號 名稱 以及該雇員的經(jīng)理名稱
SELECT WORKER ENAME WORKER MGR MANAGER EMPNO MANAGER ENAME FROM EMP WORKER EMP MANAGER
lishixinzhi/Article/program/Oracle/201311/16733
Oracle中SQL語句連接字符串的符號為||
復(fù)制代碼
代碼如下:
select
catstr(tcdm)
||
(',')
from
T_YWCJ_RWCJR
where
cjrjh='009846'
and
rwid='12050'
and
jsdm='CJY'
拼接成一條數(shù)據(jù)并連接一個(gè)","
變量直接寫,要連接字符串的話,用 ?|| ?這個(gè)符號,后面的字符串用單引號引。
變量 V_str ? ?字符串' select ?emp from table where '
連接后為:' select ?emp from table where ' ?|| V_str
和其他數(shù)據(jù)庫系統(tǒng)類似,Oracle字符串連接使用“||”進(jìn)行字符串拼接,其使用方式和MSSQLServer中的加號“+”一樣。
比如執(zhí)行下面的SQL語句:
SELECT '工號為'||FNumber||'的員工姓名為'||FName FROM T_Employee
WHERE FName IS NOT NULL
除了“||”,Oracle還支持使用CONCAT()函數(shù)進(jìn)行字符串拼接,比如執(zhí)行下面的SQL語句:
SELECT CONCAT('工號:',FNumber) FROM T_Employee
如果CONCAT中連接的值不是字符串,Oracle會嘗試將其轉(zhuǎn)換為字符串,比如執(zhí)行下面的SQL語句:
SELECT CONCAT('年齡:',FAge) FROM T_Employee
與MYSQL的CONCAT()函數(shù)不同,Oracle的CONCAT()函數(shù)只支持兩個(gè)參數(shù),不支持兩個(gè)以上字符串的拼接,比如下面的SQL語句在Oracle中是錯(cuò)誤的:
SELECT CONCAT('工號為',FNumber,'的員工姓名為',FName) FROM T_Employee
WHERE FName IS NOT NULL
運(yùn)行以后Oracle會報(bào)出下面的錯(cuò)誤信息:
參數(shù)個(gè)數(shù)無效
如果要進(jìn)行多個(gè)字符串的拼接的話,可以使用多個(gè)CONCAT()函數(shù)嵌套使用,上面的SQL可以如下改寫:
代碼如下:
SELECT CONCAT(CONCAT(CONCAT('工號為',FNumber),'的員工姓名為'),FName) FROM
T_Employee
WHERE FName IS NOT NULL