隨筆-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
          主站蜘蛛池模板: 万山特区| 曲阜市| 和林格尔县| 广丰县| 万山特区| 武陟县| 怀集县| 北安市| 招远市| 蒙阴县| 漯河市| 营山县| 本溪| 大厂| 五常市| 静安区| 徐州市| 乌苏市| 射洪县| 长沙市| 宜州市| 金川县| 莱西市| 敖汉旗| 渭源县| 沾益县| 辽宁省| 蒲江县| 左云县| 定日县| 太和县| 中西区| 南昌县| 剑河县| 静安区| 金乡县| 汝州市| 安多县| 平南县| 始兴县| 克拉玛依市|