select e.empno, e.ename, d.deptno, d.dname
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),子長企業(yè)網(wǎng)站建設(shè),子長品牌網(wǎng)站建設(shè),網(wǎng)站定制,子長網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,子長網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
from emp e, dept d
where e.deptno = d.deptno;
在之前所使用的查詢操作之中,都是從一張表之中查詢出所需要的內(nèi)容,那么如果現(xiàn)在一個(gè)查詢語句需要顯示多張表的數(shù)據(jù),則就必須應(yīng)用到多表查詢的操作,而多表查詢的語法如下:
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è)輸入中沒有匹配行的第一個(gè)輸入中的行。
外連接分為三種: 左外連接,右外連接,全外連接。 對應(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ù)在另一張表沒有記錄。 那么在相關(guān)聯(lián)的結(jié)果集行中列顯示為空值(NULL)。
1相等連接
通過兩個(gè)表具有相同意義的列,可以建立相等連接條件。
只有連接列上在兩個(gè)表中都出現(xiàn)且值相等的行才會(huì)出現(xiàn)在查詢結(jié)果中。
例 查詢員工信息以及對應(yīng)的員工所在的部門信息;
SELECT * FROM EMP,DEPT;
SELECT * FROM EMP,DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO;
REM 顯示工資超過2000的員工信息以及對應(yīng)的員工的部門名稱。
2外連接
對于外連接,Oracle中可以使用“(+)”來表示,9i可以使用LEFT/RIGHT/FULL OUTER JOIN,下面將配合實(shí)例一一介紹。除了顯示匹配相等連接條件的信息之外,還顯示無法匹配相等連接條件的某個(gè)表的信息。
外連接采用(+)來識別。
A) 左條件(+) = 右條件;
代表除了顯示匹配相等連接條件的信息之外,還顯示右條件所在的表中無法匹配相等連接條件的信息。
此時(shí)也稱為"右外連接".另一種表示方法是:
SELECT ... FROM 表1 RIGHT OUTER JOIN 表2 ON 連接條件
B) 左條件 = 右條件(+);
代表除了顯示匹配相等連接條件的信息之外,還顯示左條件所在的表中無法匹配相等連接條件的信息。
此時(shí)也稱為"左外連接".
SELECT ... FROM 表1 LEFT OUTER JOIN 表2 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;
3不等連接
兩個(gè)表中的相關(guān)的兩列進(jìn)行不等連接,比較符號一般為,,...,BETWEEN.. AND..
REM SALGRADE
--DESC SALGRADE;
--SELECT * FROM SALGRADE;
REM 顯示員工的編號,姓名,工資,以及工資所對應(yīng)的級別。
SELECT EMPNO,ENAME,SAL,SALGRADE.* FROM SALGRADE,EMP
WHERE EMP.SAL BETWEEN LOSAL AND HISAL;
REM 顯示雇員的編號,姓名,工資,工資級別,所在部門的名稱;
SELECT EMPNO,ENAME,SAL,GRADE,DNAME FROM EMP,DEPT,SALGRADE
WHERE EMP.DEPTNO = DEPT.DEPTNO AND EMP.SAL BETWEEN LOSAL AND HISAL;
4自連接
自連接是數(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
WHERE WORKER.MGR = MANAGER.EMPNO;
oracle中多表連接有很多種方式:
1、表與表連接有三種方式Nested loop, Hash join, Sort merge join。
2、Nested Loop就是循環(huán)嵌套的連接方法,對于被連接子集都是比較小的話,嵌套循環(huán)就是比較好的選擇。在嵌套中,內(nèi)表被外表驅(qū)動(dòng),外表做一次循環(huán),內(nèi)表針對外表的每一行做循環(huán)。
3、這種表的返回結(jié)果集不能太大,否則就效率實(shí)在太低的,而且還要用在表都有索引的情況下才行的。
4、Sort Merge Join 用在數(shù)據(jù)沒有索引,并且數(shù)據(jù)必須是都排序號的情況。
5、總之,兩表之間相連,會(huì)根據(jù)表之間的不同情況選擇不同的連接方式,連接其實(shí)就是做表之間每行數(shù)據(jù)的遍歷,連之前都要做好準(zhǔn)備,有么用索引,要么用已排序號的表,要么就用hash算法,不存在什么都不準(zhǔn)備的純遍歷循環(huán)。
6、三種連接使用前提,當(dāng)表都排序號的話用Sort Merge Join連接,當(dāng)兩表都差不多大而且都還有索引就用Nested Loop的嵌套連接,當(dāng)沒有索引也沒排序,而且數(shù)據(jù)量大的情況下就用這個(gè)hash算法進(jìn)行相連。
實(shí)現(xiàn)的方法和詳細(xì)的操作步驟如下:
1、首先,在計(jì)算機(jī)桌面上雙擊“
Management Studio”圖標(biāo),如下圖所示,然后進(jìn)入下一步。
2、其次,完成上述步驟后,單擊左上角的“新建查詢”按鈕,如下圖所示,然后進(jìn)入下一步。
3、接著,完成上述步驟后,在界面中輸入sql語句“
select * from test1,test2;”,將兩個(gè)表合并成一個(gè)表,如下圖所示,然后進(jìn)入下一步。
4、然后,完成上述步驟后,單擊下圖紅框標(biāo)注的工具欄中的“運(yùn)行三角形”圖標(biāo),然后進(jìn)入下一步。
5、最后,完成上述步驟后,在此界面中,表明兩個(gè)表已成功合并,如下圖所示。這樣,問題就解決了。
以兩表為例:
有以下兩張表:
現(xiàn)在要通過deptno字段,在查詢中顯示emp表中全部內(nèi)容和dept表中的dname字段。
可用如下語句:
select?a.*,b.dname?from?emp?a,dept?b?where?a.deptno=b.deptno;
查詢結(jié)果: