欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

oracle數(shù)據(jù)庫(kù)超全的多表查詢連接

 更新時(shí)間:2023年12月18日 16:27:30   作者:程序猿羊  
這篇文章主要給大家介紹了關(guān)于oracle數(shù)據(jù)庫(kù)超全的多表查詢連接的相關(guān)資料,多表連接查詢實(shí)際上是通過(guò)各個(gè)表之間公共字段的關(guān)鍵性來(lái)查詢數(shù)據(jù)的,它是關(guān)系數(shù)據(jù)庫(kù)查詢的最主要的特征,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、簡(jiǎn)述 

1、兩個(gè)表的連接,是通過(guò)將一個(gè)表中的一列或者多列同另一個(gè)表中的列連接而建立起來(lái)的。用來(lái)連接兩張表的表達(dá)式組成了連接條件。當(dāng)連接成功后,第二張表中的數(shù)據(jù)就同第一張表連接起來(lái)了,并形成了復(fù)合結(jié)果集。

2)、有5種基本類型的的連接,inner,outer,natural,cross連接,自連接。

SQL的標(biāo)準(zhǔn)語(yǔ)法:          

select table1.column,table2.column          
from table1 [inner | left | right | full ] join table2 
on table1.column1 = table2.column2;
----說(shuō)明
inner join 表示內(nèi)連接;
left join表示左外連接;
right join表示右外連接;
full join表示完全外連接;
on子句用于指定連接條件。

注意:

  若使用from子句指定內(nèi)、外連接,則需要使用on子句指定連接條件; 

  若使用(+)操作符指定外連接,則必須使用where子句指定連接條件。

二、說(shuō)明與例子

2.1、內(nèi)連接 inner join  

特點(diǎn):只有滿足條件的數(shù)據(jù)。和用select查詢多表(使用where)是一樣的效果,所以內(nèi)連接用地很少。(inner join可簡(jiǎn)寫為join)

內(nèi)連接查詢操作列出與連接條件匹配的數(shù)據(jù)行,它使用比較運(yùn)算符比較被連接列的列值。 

1、等值連接:在連接條件中使用等于號(hào)(=)運(yùn)算符比較被連接列的列值,其查詢結(jié)果中列出被連接表中的所有列,包括其中的重復(fù)屬性。(區(qū)別于自然連接)

2、不等連接:在連接條件使用除等于運(yùn)算符以外的其它比較運(yùn)算符比較被連接的列的列值。這些運(yùn)算符包括>、>=、<=、<、!>、!< 和 <>。 

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  

特點(diǎn):含有不滿足條件的數(shù)據(jù)。

外連接,返回到查詢結(jié)果集合中的不僅包含符合連接條件的行,而且還包括左表(左外連接或左連接))、右表(右外連接或右連接)或兩個(gè)邊接表(全外連接)中的所有數(shù)據(jù)行。

 1.left join(左連接)等價(jià)于(left outer join(左外連接))  返回包括左表中的所有記錄和右表中連接字段相等的記錄;(左表中所有記錄+右表中滿足條件的記錄)

 2.right join(右連接)等價(jià)于(right outer join(右外連接))返回包括右表中的所有記錄和左表中連接字段相等的記錄;(右表中所有記錄+左表中滿足條件的記錄)

 3. full join (全連接)等價(jià)于(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;

輸出:(兩張表中的所有值)

對(duì)于外連接, 也可以使用“(+) ”來(lái)表示。 關(guān)于使用(+)的一些注意事項(xiàng):         

   1.(+)操作符只能出現(xiàn)在where子句中,并且不能與outer join語(yǔ)法同時(shí)使用。         

   2. 當(dāng)使用(+)操作符執(zhí)行外連接時(shí),如果在where子句中包含有多個(gè)條件,則必須在所有條件中都包含(+)操作符          

   3.(+)操作符只適用于列,而不能用在表達(dá)式上。         

   4.(+)操作符不能與or和in操作符一起使用。         

   5.(+)操作符只能用于實(shí)現(xiàn)左外連接(左連接)和右外連接(右連接),而不能用于實(shí)現(xiàn)完全外連接(全連接)。

   6、用(+)號(hào)可以這樣來(lái)理解: + 表示補(bǔ)充,即哪個(gè)表有加號(hào),這個(gè)表就是匹配表。所以加號(hào)寫在右表,左表就是全部顯示,故是左連接。

2.3、自然連接 natural join  

特點(diǎn):所有數(shù)據(jù)類型和列名都相同的字段作為條件組成的結(jié)果集,不含on。自然連接不包含重復(fù)的屬性

自然連接是在廣義笛卡爾積R×S中選出同名屬性上符合相等條件元組,再進(jìn)行投影,去掉重復(fù)的同名屬性,組成新的關(guān)系。即自然連接是在兩張表中尋找那些數(shù)據(jù)類型和列名都相同(所有)的字段,然后自動(dòng)地將他們連接起來(lái),并返回所有符合條件的結(jié)果。

select * from student natural join teacher;

分析:兩個(gè)表中有兩個(gè)相同屬性,teacherid和deptno,不用加限定條件即按照這兩個(gè)字段連接

結(jié)果:(注意deptno屬性只有一個(gè))

有關(guān)自然連接的一些注意事項(xiàng):

   (1).如果做自然連接的兩個(gè)表的有多個(gè)字段都滿足有相同名稱和類型,那么他們會(huì)被作為自然連接的條件。

   (2).如果自然連接的兩個(gè)表字段名稱相同,但數(shù)據(jù)類型不同,那么將會(huì)返回一個(gè)錯(cuò)誤。

2.4、交叉連接(cross join)  

特點(diǎn):不含on,返回兩個(gè)表所有數(shù)據(jù)行的笛卡爾積。

交叉連接不帶on子句,它返回被連接的兩個(gè)表所有數(shù)據(jù)行的笛卡爾積,返回到結(jié)果集合中的數(shù)據(jù)行數(shù)等于第一個(gè)表中符合查詢條件的數(shù)據(jù)行數(shù)乘以第二個(gè)表中符合查詢條件的數(shù)據(jù)行數(shù)。 (5*5)

select * from student cross join teacher;
等價(jià)于:select * from student,teacher;

2.5、自連接(自己連接)  

連接的表是同一張表,使用自連接可以將自身表的一個(gè)鏡像當(dāng)作另一個(gè)表來(lái)對(duì)待,從而能夠得到一些特殊的數(shù)據(jù)。

用途舉例:計(jì)算公交鏈路換乘問(wèn)題(見(jiàn)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;

特點(diǎn):多張表在一起,使用where作為查詢條件關(guān)鍵字。

2.7 子查詢  

select * from student s where 
s.teacheid in(select teacheidfrom teacher);

總結(jié)

到此這篇關(guān)于oracle數(shù)據(jù)庫(kù)超全的多表查詢連接的文章就介紹到這了,更多相關(guān)oracle多表查詢連接內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論