站長(zhǎng)資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

Oracle學(xué)習(xí)之using關(guān)鍵字(實(shí)例詳解)

本篇文章給大家?guī)?lái)了關(guān)于Oracle的相關(guān)知識(shí),其中主要介紹了關(guān)于using關(guān)鍵字的相關(guān)知識(shí),可以使用using關(guān)鍵字來(lái)簡(jiǎn)化連接查詢(xún),希望對(duì)大家有幫助。

Oracle學(xué)習(xí)之using關(guān)鍵字(實(shí)例詳解)

推薦教程:《Oracle教程》

在工作中,查看到類(lèi)似于如下的SQL語(yǔ)句:

select      tb.usrnm,      tb.typ,      tb.oprorder      from tb     inner join rb1     using (stfaprid)      where tb1.jugsumid = #jugsumid#      and tb1.blnorg = #blnorg#      and isvld = '1'      order by tb.typ asc, tb.oprorder asc

sql/92標(biāo)準(zhǔn)可以使用using關(guān)鍵字來(lái)簡(jiǎn)化連接查詢(xún),但是只是在查詢(xún)滿(mǎn)足下面兩個(gè)條件時(shí),才能使用using關(guān)鍵字進(jìn)行簡(jiǎn)化。

  • 1.查詢(xún)必須是等值連接。
  • 2.等值連接中的列必須具有相同的名稱(chēng)和數(shù)據(jù)類(lèi)型。

例如:使用using關(guān)鍵字,如下:

select emptno,ename,sal,deptno,dname from emp e inner join dept d using(deptno);

如上述語(yǔ)句執(zhí)行的結(jié)果與自然連接的結(jié)果相同。
使用using關(guān)鍵字簡(jiǎn)化連接時(shí),需要注意以下幾點(diǎn):

  • 1.使用emp表和dept表中的deptno列進(jìn)行連接時(shí),在using子句和select子句中,都不能為deptno列指定表名或表別名。
  • 2.如果在連接查詢(xún)時(shí)使用了兩個(gè)表中相同的多個(gè)列,那么就可以在using子句中指定多個(gè)列名

形式如下:

select... from table1 inner join table2 using(column1,column2)

上述的語(yǔ)句相當(dāng)于下面的語(yǔ)句:

select... from table1 inner join table2 on table1.column1=table2.column2 and table1.column2=table2.column2;

如果對(duì)多個(gè)表進(jìn)行檢索,就必須多次使用using關(guān)鍵字進(jìn)行指定,形式如下:

select... from table1 inner join table2 using(column1) inner join table3 using(column2);

上述的語(yǔ)句相當(dāng)于下面的語(yǔ)句:

select... from table1,table2,table3 where table1.column1=table2.column1 and table2.column2=table3.column2;

再議using

在Oracle中的join連接中使用using關(guān)鍵字,是相對(duì)于natural join的。
我們?cè)谇懊嫣岬剑绻鞘褂胣atraul join,并且兩張表中如果有多個(gè)字段是具有相同的名稱(chēng)和數(shù)據(jù)類(lèi)型的,那么這些字段都將被oracle自作主張的將他們連接起來(lái)。
但實(shí)際上我們有時(shí)候是不需要這樣來(lái)連接的。我們只需要將他們的多個(gè)具有相同的名稱(chēng)和數(shù)據(jù)類(lèi)型的字段中挑選一兩個(gè)。這時(shí)候我們就需要用到using 關(guān)鍵字了。下面是一個(gè)例子。
有一個(gè)表是sales,還有一個(gè)表是costs,這兩個(gè)表中都有兩個(gè)字段分別是pro_id和time_id。我們暫且不去考慮下面連接的實(shí)際意義,僅作語(yǔ)法上的研究。
如果使用natural連接,默認(rèn)情況下,兩個(gè)字段將會(huì)被自然地連接在一起。

Select * from Sales natural join costs;

Select * from Sales join costs on Sales.prod_id = costs.prod_id and sales.time_id = costs.time_id

Select * from Sales ,costs Where Sales.pro_id = cost.prod_id and sales.time_id = costs.time_id

得到的結(jié)果應(yīng)該是一樣的。
如果我們使用自然連接,就沒(méi)有機(jī)會(huì)控制連接條件,oracle自作主張的將兩個(gè)相同數(shù)據(jù)類(lèi)型和名稱(chēng)的字段自然地連接在一起了。
下面我們使用using關(guān)鍵字。

Select * from Sales join costs using(prod_id)

這樣就迫使oracle使用using指出的字段來(lái)做連接,而不是natural join連接中默認(rèn)的兩個(gè)。
請(qǐng)注意,這里的SQL語(yǔ)句沒(méi)有任何意義,只是為了說(shuō)明using的用法舉了一個(gè)牽強(qiáng)的例子而已。
這里還需要說(shuō)明的是:
如果在使用using關(guān)鍵字時(shí),而且select的結(jié)果列表項(xiàng)中包含了using關(guān)鍵字所指明的那個(gè)關(guān)鍵字,那么請(qǐng)不要在select的結(jié)果列表項(xiàng)中對(duì)該關(guān)鍵字指明它屬于哪個(gè)表,例如如果使用using(prod_id),而在結(jié)果列表中要包含prod_id字段的話(huà),請(qǐng)不要寫(xiě)成sales.prod_id或者costs.prod_id而應(yīng)該寫(xiě)成prod_id,而且也不要使用別名,就是使用例如prod_id as “產(chǎn)品編號(hào)”的形式。

  • using中僅能使用一個(gè)列名。
  • natural join關(guān)鍵字和using關(guān)鍵字是互斥的,也就是說(shuō)不能同時(shí)出現(xiàn)。

推薦教程:《Oracle視頻教程》

贊(0)
分享到: 更多 (0)
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
jazzjazz国产精品| 亚洲日韩欧洲乱码AV夜夜摸| 午夜精品射精入后重之免费观看 | www.午夜精品| 日韩一级二级三级| 国产亚洲精品2021自在线| 日韩精品久久不卡中文字幕| 久久精品国产99久久久| 精品深夜AV无码一区二区老年 | 精品久久久久久久无码久中文字幕 | 久久夜色精品国产| 精品国产高清在线拍| 无码人妻精品一区二区三区99不卡| 中文字幕日韩wm二在线看| 八区精品色欲人妻综合网| 国产精品免费一级在线观看| 欧洲精品一区二区三区| 国产精品成人一区无码| 国产精品成人扳**a毛片| 国产精品久久久久久亚洲小说| 精品久久久久久777米琪桃花| 久久婷婷五月综合色精品| 精品亚洲国产成人av| 国内精品自在自线视频| 国产精品麻豆欧美日韩WW| 久久久久久久久无码精品亚洲日韩| 国产精品久久久久久精品三级| MM1313亚洲国产精品| 日韩精品国产丝袜| 国产av无码久久精品| 日韩电影一区二区三区| 日韩AV高清无码| 日韩电影中文字幕在线观看| 成人精品视频在线观看| 色妞www精品一级视频| 日韩人妻无码精品无码中文字幕| 一区二区不卡久久精品| 久久精品国产精品亚洲艾草网美妙| 中文字幕在线不卡精品视频99| 538prom精品视频线放| 国产成人精品电影在线观看 |