Oracle9i的簡化SQL語法

lishiran發表於2007-03-16
Oracle對Oracle9i SQL 做了一些很重要的改進,包括一些令人興奮的新特點,支援1:5的數量級和ISO99中的SQL標準。作為Oracle的補充,它包括以下新的TABLE JOIN的句法結構:[@more@]
  • CROSS IN——它在兩個表格中建立了一個卡迪爾列,就象是在Oracle8i中沒寫WHERE時那樣。
  • NATURAL JOIN——這是一個很有用的Oracle9i的句法,它透過從WHERE子句中移動連線標準來改善SQL的穩定性
  • USING子句——它可以透過名字來具體指定連線
  • ON子句——這個句法允許在兩個表格中為連線具體指定欄目的名頭
    LEFT OUTER JOIN——它返回表格中左邊的行和右邊的數值,如果沒有搭配的行的話,則返回零
  • RIGHT OUTER JOIN——它返回表格中右邊的行和左邊的數值,如果沒有搭配的行的話,則返回零
  • FULL OUTER JOIN——它返回的是兩個表格中所有的行,用零填滿每一個空格。這在Oracle8i中則沒有相應的此種句法
大多數改進都是為了讓那些非Oracle的請求以快速的進入Oracle資料庫而引進的,並且必須記住這些只是句法上的不同,ISO99標準並沒有給Oracle9i SQL帶來任何新的功能。

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

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

NATURAL JOIN

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

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);

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9099175/viewspace-905594/,如需轉載,請註明出處,否則將追究法律責任。

相關文章