一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

[精華] Oracle9i表連接(轉(zhuǎn)載)

 執(zhí)著男孩 2006-08-26

Oracle對Oracle9i SQL 做了一些很重要的改進,包括一些令人興奮的新特點,支持1:5的數(shù)量級和ISO99中的SQL標準。作為Oracle的補充,它包括以下新的TABLE JOIN的句法結(jié)構(gòu):

CROSS IN——它在兩個表格中創(chuàng)建了一個卡迪爾列,就象是在Oracle8i中沒寫WHERE時那樣。

NATURAL JOIN——這是一個很有用的Oracle9i的句法,它通過從WHERE子句中移動連接標準來改善SQL的穩(wěn)定性 

USING子句——它可以通過名字來具體指定連接 

ON子句——這個句法允許在兩個表格中為連接具體指定欄目的名頭 

LEFT OUTER JOIN——它返回表格中左邊的行和右邊的數(shù)值,如果沒有搭配的行的話,則返回零 

RIGHT OUTER JOIN——它返回表格中右邊的行和左邊的數(shù)值,如果沒有搭配的行的話,則返回零 

FULL OUTER JOIN——它返回的是兩個表格中所有的行,用零填滿每一個空格。這在Oracle8i中則沒有相應(yīng)的此種句法 

大多數(shù)改進都是為了讓那些非Oracle的請求以快速的進入Oracle數(shù)據(jù)庫而引進的,并且必須記住這些只是句法上的不同,ISO99標準并沒有給Oracle9i SQL帶來任何新的功能。
  

The CROSS JOIN 
在Oracle中,CROSS JOIN產(chǎn)生了一個“卡迪爾的產(chǎn)物(Cartesian product)”,就象是在連接兩個表格時忘記加入一個WHERE子句一樣 
select last_name,dept_id 
from emp,depts; 

在Oracle9i中,我們使用CROSS JOIN 來達到相同的結(jié)果 
select last_name.dept_id 
from emp 
CROSS JOIN dept; 

NATURAL JOIN 


我喜歡NATURAL JOIN的原因在于它能夠通過在兩個表格中配對的欄目的名頭來自動的檢查join。它同時還簡化了Oracle9i SQL,由于where子句僅僅只能過濾謂語,當然,NATURAL JOIN要求在每一個表格中的欄目的名字相同。很有意思的是,這種特性甚至在沒有主要的或是外來的關(guān)鍵詞作為參考是也能起作用 



Oracle8i, 
Select book_title, sum(quantity) 
From book, sales 
Where book.book_id = sales.book_id 
group by book_title; 

Oracle9i 
Select book_title, sum(quantity) 
from book 
natural join sales 
group by book_title; 

USING子句 
假如幾個欄目有同樣的名字,而你又不想用所有的這些欄目來連接的時候,你就可以用USING子句。在USING子句中所列的欄目的句子中不會有任何的修飾詞,包括where子句也不會有 
Oracle8i 
select dept_id, city 
from departments, locations 
where departments.location_id = location.location_id; 

Oracle9i 
select department_name, city 
from departments 
JOIN locations 
USING (location_id);

ON子句 
ON子句被用于當在兩個表格中的欄目名字不搭配時來連接表格。而連接條件就是where子句中的過濾條件 
Oracle8i 
select department_name, city 
from department, location 
where department.location_id = location.loc_id; 

Oracle9i 
select department_name, city 
from department d 
JOIN location l 
ON (d.location_id = l.id); 

易變的連接 

  易變的連接就是兩個以上的表格被連接所用的。ISO SQL 1999標準通常假設(shè)表格從左至右連接,連接的條件是能夠為現(xiàn)在的連接或以前的與左邊的連接相關(guān)聯(lián)的欄目提供參考。 
Oracle8i 
select emp_id, city_name, dept_name 
from location l, department d, emp e 
where d.location_id = l.location_id 
and d.department_id = e.department_id; 

Oracle9i 
select emp_id, city_name, dept_name 
from locations l 
JOIN departments d ON (d.location_id = l.location_id) 
JOIN employees e ON (d.department_id = e.department_id); 


新的OUTER JOIN句法 

  

ISO99標準把復(fù)雜的加號從Oracle outer join中拿出去,并使得outer join SQL更容易理解。

LEFT OUTER JOIN 
在LEFT OUTER JOIN中,會返回所有左邊表格中的行,甚至在被連接的表格中沒有可配對的欄目的情況下也如此。在下邊的例子中,返回了所有雇員的姓,甚至包括了那些沒有分配到部門的雇員。 
Oracle8i 
select last_name, dept_id 
from emp e, dept d 
where e.department_id = d.department_id(+); 

Oracle9i 
select last_name, dept_id 
from emp 
LEFT OUTER JOIN Dept 
ON e.dept_id = d.dept_id; 

RIGHT OUTER JOIN 
在RIGHT OUTER JOIN中返回的是表格中所有右邊的行,甚至在被連接的表格中沒有可配對的欄目的情況下也如此。在這個例子中,返回了所有部門的ID,包括那些沒有一個雇員的的部門。 
Oracle8i 
select last_name, d.dept_id 
from employees e, departments d 
where e.department_id(+) = d.department_id; 

Oracle9i 
select last_name, d.dept_id 
from employees e 
RIGHT OUTER JOIN departments d 
ON (e.department_id = d.department_id); 


總結(jié)

ISO99標準是Oracle改進SQL工具的另一個例子。NATURAL JOIN LEFT OUTER JOIN 和 RIGHT OUTER JOIN是這些改進中最受歡迎的,它們分別簡化了SQL句法以及消除了對于復(fù)雜句法(比如+)的需要。




    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    欧美日韩国产另类一区二区| 亚洲国产日韩欧美三级| 青青操成人免费在线视频| 午夜视频成人在线免费| 大尺度剧情国产在线视频| 午夜福利黄片免费观看| 欧美黄色黑人一区二区| 午夜精品在线观看视频午夜| 欧美成人精品一区二区久久| 亚洲国产av精品一区二区| 国产精品成人又粗又长又爽| 国产麻豆视频一二三区| 亚洲精品小视频在线观看| 欧美乱妇日本乱码特黄大片| 高清不卡视频在线观看| 国产精品一区二区成人在线| 欧美日韩国产自拍亚洲| 亚洲午夜av久久久精品| 男人大臿蕉香蕉大视频| 欧美日韩亚洲国产精品| 国产精品成人又粗又长又爽| 中文字幕日韩欧美理伦片| 欧美一级黄片免费视频| 亚洲欧美日本视频一区二区| 狠狠干狠狠操亚洲综合| 亚洲中文字幕高清视频在线观看| 欧美成人免费一级特黄| 亚洲视频在线观看你懂的| 欧美精品久久99九九| 欧美精品在线播放一区二区| 欧美精品久久一二三区| 麻豆在线观看一区二区| 日本免费熟女一区二区三区 | 日本人妻熟女一区二区三区| 99久久无色码中文字幕免费| 国产又猛又大又长又粗| 欧美午夜视频免费观看| 91欧美日韩一区人妻少妇| 亚洲欧美精品伊人久久| 91蜜臀精品一区二区三区| 日韩亚洲激情在线观看|