隨筆-28  評論-15  文章-81  trackbacks-0

          一般的相等連接:
          select * from a, b where a.id = b.id;
          這個就屬于內連接。

          對于外連接:
          Oracle中可以使用“(+) ”來表示,9i可以使用LEFT/RIGHT/FULL OUTER JOIN

          LEFT OUTER JOIN:左外關聯
          SELECT e.last_name, e.department_id, d.department_name
          FROM employees e
          LEFT OUTER JOIN departments d
          ON (e.department_id = d.department_id);
          等價于
          SELECT e.last_name, e.department_id, d.department_name
          FROM employees e, departments d
          WHERE e.department_id=d.department_id(+)
          結果為:所有員工及對應部門的記錄,包括沒有對應部門編號department_id的員工記錄。

          RIGHT OUTER JOIN:右外關聯
          SELECT e.last_name, e.department_id, d.department_name
          FROM employees e
          RIGHT OUTER JOIN departments d
          ON (e.department_id = d.department_id);
          等價于
          SELECT e.last_name, e.department_id, d.department_name
          FROM employees e, departments d
          WHERE e.department_id(+)=d.department_id
          結果為:所有員工及對應部門的記錄,包括沒有任何員工的部門記錄。

          FULL OUTER JOIN:全外關聯
          SELECT e.last_name, e.department_id, d.department_name
          FROM employees e
          FULL OUTER JOIN departments d
          ON (e.department_id = d.department_id);
          結果為:所有員工及對應部門的記錄,包括沒有對應部門編號department_id的員工記錄和沒有任何員工的部門記錄。

          ORACLE8i是不直接支持完全外連接的語法,也就是說不能在左右兩個表上同時加上(+),下面是在ORACLE8i可以參考的完全外連接語法
          select t1.id,t2.id from table1 t1,table t2 where t1.id=t2.id(+)
          union
          select t1.id,t2.id from table1 t1,table t2 where t1.id(+)=t2.id

          連接類型 定義 圖示 例子
          內連接 只連接匹配的行 select A.c1,B.c2 from A join B on A.c3 = B.c3;
          左外連接 包含左邊表的全部行(不管右邊的表中是否存在與它們匹配的行)以及右邊表中全部匹配的行 select A.c1,B.c2 from A left join B on A.c3 = B.c3;
          右外連接 包含右邊表的全部行(不管左邊的表中是否存在與它們匹配的行)以及左邊表中全部匹配的行 select A.c1,B.c2 from A right join B on A.c3 = B.c3;
          全外連接 包含左、右兩個表的全部行,不管在另一邊的表中是否存在與它們匹配的行 select A.c1,B.c2 from A full join B on A.c3 = B.c3;
          (theta)連接 使用等值以外的條件來匹配左、右兩個表中的行 select A.c1,B.c2 from A join B on A.c3 != B.c3;
          交叉連接 生成笛卡爾積——它不使用任何匹配或者選取條件,而是直接將一個數據源中的每個行與另一個數據源的每個行一一匹配   select A.c1,B.c2 from A,B;
          posted on 2008-06-04 11:05 譚明 閱讀(251) 評論(0)  編輯  收藏 所屬分類: Oracle
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(5)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          http://webfx.eae.net/

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 池州市| 普宁市| 酒泉市| 永昌县| 乌兰县| 高要市| 高台县| 文成县| 怀集县| 和龙市| 通化市| 宾阳县| 子洲县| 芮城县| 宝应县| 横峰县| 乐陵市| 金川县| 福贡县| 个旧市| 开封县| 永嘉县| 朝阳区| 绿春县| 重庆市| 元谋县| 修武县| 巴彦县| 商洛市| 保康县| 屯留县| 区。| 沂水县| 鄂托克旗| 涿鹿县| 砚山县| 佛学| 砀山县| 咸丰县| 纳雍县| 赫章县|