oracle數(shù)據(jù)庫超全的多表查詢連接
一、簡述
1、兩個表的連接,是通過將一個表中的一列或者多列同另一個表中的列連接而建立起來的。用來連接兩張表的表達(dá)式組成了連接條件。當(dāng)連接成功后,第二張表中的數(shù)據(jù)就同第一張表連接起來了,并形成了復(fù)合結(jié)果集。
2)、有5種基本類型的的連接,inner,outer,natural,cross連接,自連接。
SQL的標(biāo)準(zhǔn)語法:
select table1.column,table2.column from table1 [inner | left | right | full ] join table2 on table1.column1 = table2.column2; ----說明 inner join 表示內(nèi)連接; left join表示左外連接; right join表示右外連接; full join表示完全外連接; on子句用于指定連接條件。
注意:
若使用from子句指定內(nèi)、外連接,則需要使用on子句指定連接條件;
若使用(+)操作符指定外連接,則必須使用where子句指定連接條件。
二、說明與例子
2.1、內(nèi)連接 inner join
特點:只有滿足條件的數(shù)據(jù)。和用select查詢多表(使用where)是一樣的效果,所以內(nèi)連接用地很少。(inner join可簡寫為join)
內(nèi)連接查詢操作列出與連接條件匹配的數(shù)據(jù)行,它使用比較運算符比較被連接列的列值。
1、等值連接:在連接條件中使用等于號(=)運算符比較被連接列的列值,其查詢結(jié)果中列出被連接表中的所有列,包括其中的重復(fù)屬性。(區(qū)別于自然連接)
2、不等連接:在連接條件使用除等于運算符以外的其它比較運算符比較被連接的列的列值。這些運算符包括>、>=、<=、<、!>、!< 和 <>。
teacher 和 student 表
select * from student s inner join teacher t on s.teacheid=t.teacheid; select * from student s join teacher t on s.teacheid=t.teacheid; --使用多表查詢 select * from student s,teacher t where s.teacheid=t.teacheid;
結(jié)果:(注意結(jié)果中包含重復(fù)屬性)
2.2、外連接 outer join
特點:含有不滿足條件的數(shù)據(jù)。
外連接,返回到查詢結(jié)果集合中的不僅包含符合連接條件的行,而且還包括左表(左外連接或左連接))、右表(右外連接或右連接)或兩個邊接表(全外連接)中的所有數(shù)據(jù)行。
1.left join(左連接)等價于(left outer join(左外連接)) 返回包括左表中的所有記錄和右表中連接字段相等的記錄;(左表中所有記錄+右表中滿足條件的記錄)
2.right join(右連接)等價于(right outer join(右外連接))返回包括右表中的所有記錄和左表中連接字段相等的記錄;(右表中所有記錄+左表中滿足條件的記錄)
3. full join (全連接)等價于(full outer join(全外連接))查詢結(jié)果等于左外連接和右外連接的和。
例子:
(1)、左連接(左外連接) left join
select * from student s left join teacher t on s.teacheid=t.teacheid; 或 select * from student s ,teacher t where s.teacheid=t.teacheid(+);
查詢結(jié)果:包含student中的所有記錄和滿足條件的記錄
(2)、右連接(右外連接) right join
包含teacher中的所有記錄和滿足條件的記錄。
select * from student sright join teacher t on s.teacheid=t.teacheid; 或 select * from student s ,teacher t where s.teacheid(+)=t.teacheid;
查詢結(jié)果:
(3)、全連接(全外連接) full join
select * from student s full join teacher t on s.teacheid=t.teacheid;
輸出:(兩張表中的所有值)
對于外連接, 也可以使用“(+) ”來表示。 關(guān)于使用(+)的一些注意事項:
1.(+)操作符只能出現(xiàn)在where子句中,并且不能與outer join語法同時使用。
2. 當(dāng)使用(+)操作符執(zhí)行外連接時,如果在where子句中包含有多個條件,則必須在所有條件中都包含(+)操作符
3.(+)操作符只適用于列,而不能用在表達(dá)式上。
4.(+)操作符不能與or和in操作符一起使用。
5.(+)操作符只能用于實現(xiàn)左外連接(左連接)和右外連接(右連接),而不能用于實現(xiàn)完全外連接(全連接)。
6、用(+)號可以這樣來理解: + 表示補充,即哪個表有加號,這個表就是匹配表。所以加號寫在右表,左表就是全部顯示,故是左連接。
2.3、自然連接 natural join
特點:所有數(shù)據(jù)類型和列名都相同的字段作為條件組成的結(jié)果集,不含on。自然連接不包含重復(fù)的屬性
自然連接是在廣義笛卡爾積R×S中選出同名屬性上符合相等條件元組,再進行投影,去掉重復(fù)的同名屬性,組成新的關(guān)系。即自然連接是在兩張表中尋找那些數(shù)據(jù)類型和列名都相同(所有)的字段,然后自動地將他們連接起來,并返回所有符合條件的結(jié)果。
select * from student natural join teacher;
分析:兩個表中有兩個相同屬性,teacherid和deptno,不用加限定條件即按照這兩個字段連接
結(jié)果:(注意deptno屬性只有一個)
有關(guān)自然連接的一些注意事項:
(1).如果做自然連接的兩個表的有多個字段都滿足有相同名稱和類型,那么他們會被作為自然連接的條件。
(2).如果自然連接的兩個表字段名稱相同,但數(shù)據(jù)類型不同,那么將會返回一個錯誤。
2.4、交叉連接(cross join)
特點:不含on,返回兩個表所有數(shù)據(jù)行的笛卡爾積。
交叉連接不帶on子句,它返回被連接的兩個表所有數(shù)據(jù)行的笛卡爾積,返回到結(jié)果集合中的數(shù)據(jù)行數(shù)等于第一個表中符合查詢條件的數(shù)據(jù)行數(shù)乘以第二個表中符合查詢條件的數(shù)據(jù)行數(shù)。 (5*5)
select * from student cross join teacher; 等價于:select * from student,teacher;
2.5、自連接(自己連接)
連接的表是同一張表,使用自連接可以將自身表的一個鏡像當(dāng)作另一個表來對待,從而能夠得到一些特殊的數(shù)據(jù)。
用途舉例:計算公交鏈路換乘問題(見eg2)
select s1.*, s2.* from student s1 , student s2 where s1.depino=s2.depino and s1.classno=s2.classno;
2.6 多表查詢
select * from student s,teacher t where s.teacheid=t.teacheid;
特點:多張表在一起,使用where作為查詢條件關(guān)鍵字。
2.7 子查詢
select * from student s where s.teacheid in(select teacheidfrom teacher);
總結(jié)
到此這篇關(guān)于oracle數(shù)據(jù)庫超全的多表查詢連接的文章就介紹到這了,更多相關(guān)oracle多表查詢連接內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
oracle數(shù)據(jù)匹配merge into的實例詳解
這篇文章主要介紹了oracle數(shù)據(jù)匹配merge into的實例詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-10-10Oralce中VARCHAR2()與NVARCHAR2()的區(qū)別介紹
這篇文章主要給大家詳細(xì)介紹了關(guān)于Oralce中VARCHAR2()與NVARCHAR2()的區(qū)別,文中先通過翻譯官方的介紹進行區(qū)別總結(jié),然后由一個實戰(zhàn)示例代碼進行演示,相信對大家的理解會很有幫助,有需要的朋友們下面來跟著小編一起看看吧。2016-12-12pl/sql導(dǎo)入、導(dǎo)出csv等格式文件詳細(xì)步驟
在 PL/SQL 開發(fā)中數(shù)據(jù)的導(dǎo)入和導(dǎo)出是常見的操作,下面這篇文章主要給大家介紹了關(guān)于pl/sql導(dǎo)入、導(dǎo)出csv等格式文件的詳細(xì)步驟,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04oracle取數(shù)據(jù)庫中最新的一條數(shù)據(jù)可能會遇到的bug(兩種情況)
這篇文章主要介紹了oracle取數(shù)據(jù)庫中最新的一條數(shù)據(jù)可能會遇到的bug,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01