国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

Oracle9i的簡化SQL語法

2024-08-29 13:37:33
字體:
來源:轉載
供稿:網友

  Oracle對Oracle9i SQL 做了一些很重要的改進,包括一些令人興奮的新特點,支持1:5的數量級和ISO99中的SQL標準。作為Oracle的補充,它包括以下新的TABLE JOIN的句法結構:
  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);
  易變的連接
  易變的連接就是兩個以上的表格被連接所用的。ISO SQL 1999標準通常假設表格從左至右連接,連接的條件是能夠為現在的連接或以前的與左邊的連接相關聯的欄目提供參考。
  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標準把復雜的加號從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);
  總結
  ISO99標準是Oracle改進SQL工具的另一個例子。NATURAL JOIN LEFT OUTER JOIN 和 RIGHT OUTER JOIN是這些改進中最受歡迎的,它們分別簡化了SQL句法以及消除了對于復雜句法(比如+)的需要。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 贺州市| 隆安县| 安新县| 囊谦县| 罗源县| 阳谷县| 昌乐县| 麟游县| 冕宁县| 永寿县| 来凤县| 郧西县| 柘荣县| 民勤县| 江陵县| 玉龙| 林口县| 英超| 鄂托克旗| 张掖市| 通化市| 汶川县| 林西县| 瑞安市| 武夷山市| 云浮市| 德安县| 霍林郭勒市| 苏尼特右旗| 奉贤区| 乌鲁木齐市| 响水县| 吕梁市| 临澧县| 凉城县| 鹤岗市| 长泰县| 仙居县| 南皮县| 凤山市| 康定县|