---關(guān)聯(lián)查詢
創(chuàng)新互聯(lián)專注于旅順口網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供旅順口營(yíng)銷型網(wǎng)站建設(shè),旅順口網(wǎng)站制作、旅順口網(wǎng)頁(yè)設(shè)計(jì)、旅順口網(wǎng)站官網(wǎng)定制、微信小程序開(kāi)發(fā)服務(wù),打造旅順口網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供旅順口網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
/**
等值連接:關(guān)聯(lián)表中存在相同列
非等值連接:表中沒(méi)有相同的列名,但是一個(gè)表中列,在另外表中存在某種關(guān)系,比如在范圍內(nèi)
外連接:左外連接(左邊顯示全部記錄)和右外連接(右邊顯示全部記錄)
自連接:自己關(guān)聯(lián)自己查詢
*/
select * from emp;
select * from dept;
-- 笛卡爾積
select * from emp,dept;
-- 關(guān)聯(lián)查詢
select * from emp,dept where emp.deptno = dept.deptno;
-- 查詢雇員的名稱和部門的名稱
select ename,dname from emp,dept where emp.deptno = dept.deptno;
select * from salgrade;
--查詢雇員名稱和薪水等級(jí)
select e.ename,g.grade from emp e,salgrade g where e.sal between g.losal and g.hisal;
-- 需要將雇員表中的數(shù)據(jù)全部顯示,利用等值連接,只能把關(guān)聯(lián)到的數(shù)據(jù)顯示出來(lái),這就需要外連接
select * from emp e,dept d where e.deptno = d.deptno; --等值連接
select * from emp e,dept d where e.deptno = d.deptno(+); --左外連接(左數(shù)據(jù)要顯示全,右表補(bǔ)空)
select * from emp e,dept d where e.deptno(+) = d.deptno; --右外連接(右數(shù)據(jù)要顯示全,左表補(bǔ)空)
-- 自連接,把一張表自己關(guān)聯(lián)自己
-- 將雇員和他的經(jīng)理查出來(lái) e表示雇員表,m也表示雇員表 匹配的e.mgr的經(jīng)理是哪個(gè)雇員
select e.ename,m.ename from emp e,emp m where e.mgr = m.empno;
-- 不加任何連接條件 笛卡爾積
select * from emp e,dept d;
--以上是sql 92語(yǔ)法問(wèn)題
-- 關(guān)聯(lián)查詢條件放到where子句中,而where語(yǔ)句還負(fù)責(zé)對(duì)結(jié)果集進(jìn)行條件過(guò)濾,
-- 意味著將連接條件和過(guò)濾條件寫在一起,可讀性差,不符合單一職責(zé)
sql 99 語(yǔ)法
cross join 等價(jià) 92語(yǔ)法笛卡爾積
select * from emp cross join dept;
select * from emp cross join dept;
-- natural join 相當(dāng)于等值連接,但是不需要等值條件,會(huì)做動(dòng)找相同列左連接
-- 如果兩表中沒(méi)有相同列,相當(dāng)于笛卡爾積
-- 有相同的列,會(huì)自動(dòng)做等值連接
select * from emp e natural join dept d;
-- 沒(méi)有相同的列,相當(dāng)于笛卡爾積
select * from emp e natural join salgrade;
--on 子句,添加連接條件
-- on子句等值連接,相連接當(dāng)于92語(yǔ)法等值連接
select * from emp e join dept d on e.deptno = d.deptno;
--on 子句非等值連接,相當(dāng)于92語(yǔ)法非等值連接
select * from emp e join salgrade sg on e.sal between sg.losal and sg.hisal;
-- left outer join ,其中outer可省略 99語(yǔ)法左外連接 會(huì)把左表記錄顯示全,右表無(wú)對(duì)應(yīng)記錄,顯示空
select * from emp e left outer join dept d on e.deptno = d.deptno;
-- 92語(yǔ)法 左外連接
select * from emp e,dept d where e.deptno = d.deptno(+);
-- right outer join ,其中outer可省略 99語(yǔ)法右外連接
select * from emp e right outer join dept d on e.deptno = d.deptno;
-- 92語(yǔ)法 右外連接
select * from emp e,dept d where e.deptno = d.deptno;
-- full outer join 99語(yǔ)法獨(dú)有相當(dāng)于同時(shí)滿足左外連接和右外連接
select * from emp e full outer join dept d on e.deptno = d.deptno;
-- inner join 就是表連接
select * from emp e inner join dept d on e.deptno = d.deptno;
-- 省略inner
select * from emp e join dept d on e.deptno = d.deptno;
--using,除了使用on作為連接條件,也可使用using作為連接條件
--此時(shí)查出的deptno不屬于任何一張表
select * from emp e join dept d using(deptno);
-- 發(fā)現(xiàn)會(huì)出現(xiàn)兩列deptno,分別屬于兩張表
select * from emp e join dept d on e.deptno = d.deptno;
99語(yǔ)法和92語(yǔ)法,實(shí)際開(kāi)發(fā)中都可使用,建議使用99語(yǔ)法,可讀性更強(qiáng)
-- 檢索雇員名字、所在單位、薪水等級(jí)
select e.ename,d.loc,sg.grade from emp e join dept d on e.deptno = d.deptno join salgrade sg on e.sal between sg.losal and sg.hisal;
Oracle中可以使用“(+) ”來(lái)表示,9i可以使用LEFT/RIGHT/FULL OUTER JOIN LEFT OUTER JOIN:左外關(guān)聯(lián) SELECT e.last_name, e.department_id, d.department_name FROM employees e LEFT OUTER JOIN departments d ON (e.department_id = d.department_id);等價(jià)于SELECT e.last_name, e.department_id, d.department_name FROM employees e, departments d WHERE e.department_id=d.department_id(+) 結(jié)果為:所有員工及對(duì)應(yīng)部門的記錄,包括沒(méi)有對(duì)應(yīng)部門編號(hào)department_id的員工記錄。 RIGHT OUTER JOIN:右外關(guān)聯(lián) SELECT e.last_name, e.department_id, d.department_name FROM employees e RIGHT OUTER JOIN departments d ON (e.department_id = d.department_id);等價(jià)于SELECT e.last_name, e.department_id, d.department_name FROM employees e, departments d WHERE e.department_id(+)=d.department_id 結(jié)果為:所有員工及對(duì)應(yīng)部門的記錄,包括沒(méi)有任何員工的部門記錄。 FULL OUTER JOIN:全外關(guān)聯(lián) SELECT e.last_name, e.department_id, d.department_name FROM employees e FULL OUTER JOIN departments d 結(jié)果為:所有員工及對(duì)應(yīng)部門的記錄,包括沒(méi)有對(duì)應(yīng)部門編號(hào)department_id的員工記錄和沒(méi)有任何員工的部門記錄。
1、等值連接是最常見(jiàn)的一種連接查詢,通常是在主外鍵關(guān)聯(lián)關(guān)系的表間建立,并將連接條件設(shè)定為有關(guān)系的列,使用“=”連接相關(guān)的表。
2、非等值連接是指在多個(gè)表中使用非等號(hào)連接,查詢?cè)诙鄠€(gè)表中有非等值關(guān)聯(lián)關(guān)系的數(shù)據(jù),非等值連接操作符包括、=、、=、以及BETWEEN...AND、LIKE、IN等。
3、自連接是一種比較特殊的連接查詢,數(shù)據(jù)來(lái)源是一個(gè)表。
4、左外連接是內(nèi)連接的一種擴(kuò)展,不止會(huì)返回滿足連接條件的記錄,還會(huì)返回那些不滿足連接條件的操作符左邊表的其他記錄。
5、右外連接和左外連接相似,右外連接不止會(huì)返回滿足連接條件的記錄,還會(huì)返回那些不滿足連接條件的操作符右邊表的其他記錄。
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左關(guān)聯(lián)過(guò)濾條件放在where條件后面查詢.。根據(jù)查詢相關(guān)公開(kāi)信息:多表關(guān)聯(lián)連接方式有innerjoin、leftjoin、rightjoin、fulljoin四種,左右表謂詞過(guò)濾都放在where后面。
oracle中在WHERE條件里寫輸入:
select * from usermenu
left join sysuser on sysuser.yhdh=usermenu.yhdh
left join program on ?program.cxdh=usermenu.cxdh
即可關(guān)聯(lián)起來(lái)。
關(guān)聯(lián)也分為好幾種:
SELECT?*?FROM?TABLE1?A,TABLE2?B,TABLE3?C?WHERE?A.FIELD_KEY=B.FIELD_KEY?AND?B.FIELD_KEY=C.FIELD_KEY?(正常關(guān)聯(lián))
SELECT?*?FROM?TABLE1?A,TABLE2?B,TABLE3?C?WHERE?A.FIELD_KEY=B.FIELD_KEY(+)?AND?B.FIELD_KEY=C.FIELD_KEY(+)?(左關(guān)聯(lián))
SELECT?*?FROM?TABLE1?A,TABLE2?B,TABLE3?C?WHERE?A.FIELD_KEY(+)=B.FIELD_KEY?AND?B.FIELD_KEY(+)=C.FIELD_KEY?(右關(guān)聯(lián))
要把Oracle將三張表關(guān)聯(lián)起來(lái)時(shí)可以使用Oracle Database的指令,也就是Oracle數(shù)據(jù)庫(kù)的指令將其關(guān)聯(lián)。
網(wǎng)站題目:oracle左關(guān)聯(lián)怎么用 oracle外鍵關(guān)聯(lián)
本文URL:http://www.yijiale78.com/article8/hhssop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、網(wǎng)頁(yè)設(shè)計(jì)公司、關(guān)鍵詞優(yōu)化、、網(wǎng)站內(nèi)鏈、網(wǎng)站營(yíng)銷
聲明:本網(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)