<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 167,  comments - 30,  trackbacks - 0
    轉載自http://www.java2000.net/p19263

    假設有
    a表
    id
    1
    2
    3
    4

    b表
    id
    1
    2
    3

    希望出來結果

    a.id b.id
    1 1
    2 2
    3 3
    4

    用left join 的
    SQL code select a.id,b.id
    form a
    left jion b on a.id=b.id


    用(+)的
    SQL code select a.id,b.id
    form a ,b
    where a.id=b.id(+)


    用(+)的語法簡潔,容易讀懂,但只是ORACLE支持,LEFT JOIN是通用的,其它沒有差別

    zengdan84:
    select * from a, b where a.id = b.id;

    對于外連接,Oracle中可以使用“(+)”來表示,9i可以使用LEFT/RIGHT/FULL OUTER JOIN,下面將配合實例一一介紹。

    1. 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的員工記錄。

    2. 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;

    結果為:所有員工及對應部門的記錄,包括沒有任何員工的部門記錄。

    3. 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的員工記錄和沒有任何員工的部門記錄。

    chensi05:
    說簡單點就是哪邊少加號放哪邊

    wuchunyu002:
    外連接:
    除了顯示匹配相等連接條件的數據外,還可以顯示某一個表中無法匹配相等連接條件的記錄!
    ------------------------------------------------
    1) 左條件(+) = 右條件
    左條件所在的表必須嚴格進行相等連接條件的匹配,而右條件所在的表除了匹配相等連接條件外,還可以顯示無法匹配連接條件的數據!
    也稱為右外連接.
    --------------------------------
    可以用下列語句取代:
    SELECT...FROM 表1 RIGHT OUTER JOIN 表2 ON 條件;
    2) 左條件 = 右條件(+)
    右條件所在的表必須嚴格進行相等連接條件的匹配,而左條件所在的表除了匹配相等連接條件外,還可以顯示無法匹配連接條件的數據!
    也稱為左外連接.
    --------------------------------
    可以用下列語句取代:
    SELECT...FROM 表1 LEFT OUTER JOIN 表2 ON 條件;

    REM 除了相等連接之外,顯示沒有員工的部門信息.
    SELECT * FROM EMP,DEPT WHERE EMP.DEPTNO(+) = DEPT.DEPTNO;
    SELECT * FROM EMP RIGHT OUTER JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO;
    REM 除了相等連接之外,顯示沒有部門的員工信息.
    SELECT * FROM EMP,DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO(+);
    SELECT * FROM EMP LEFT OUTER JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO;


    shenliang1985(沈亮):
    Oracle 建議你用在From語句后用Outer Join語法 而不是Oracle的Join操作符(+).而且(+)是要受下面的規則限制的,但Outer Join語法則不受的~~

    1)你不可以在查詢塊中使用(+) 當它同時包含 join的from語句中
    2)(+)只是在where語句中,并且只能對應一個表或視圖的一行字段
    3)如果A和B做聯接時有多個條件,那么(+)必須完善所有的匹配條件,
    如果沒有 ,oracle不會警告你~只是結果自然不同的
    4)不可以在作出一個表外查詢 另張表內查詢的(+)聯接操作~~
    5)不可以用(+)外聯接到自己 當然Self Join是可以的
    6)含(+)的Where后的注意
    OR不可用
    IN不可用
    子查詢不可用

    以下給些個例子:
    SQL code SQL>
    desc part

    Name
    Null? Type
    ----------------------------------------- -------- -----------------
    PART_ID NOT
    NULL
    VARCHAR2(4)
    SUPPLIER_ID
    VARCHAR2(4)

    SQL
    >
    select
    *
    from part;

    PART SUPP
    ---- ----
    P1 S1
    P2 S2
    P3
    P4

    SQL
    >
    desc supplier

    Name
    Null? Type
    ----------------------------------------- -------- -----------------
    SUPPLIER_ID NOT
    NULL
    VARCHAR2(4)
    SUPPLIER_NAME
    NOT
    NULL
    VARCHAR2(20)

    SQL
    >
    select
    *
    from supplier;

    SUPP SUPPLIER_NAME
    ---- --------------------
    S1 Supplier#1
    S2 Supplier#
    2
    S3 Supplier#
    3

    SQL
    >
    select p.part_id, s.supplier_name
    2
    from part p, supplier s
    3
    where p.supplier_id = s.supplier_id (+);

    PART SUPPLIER_NAME
    ---- --------------------
    P1 Supplier#1
    P2 Supplier#
    2
    P3
    P4

    --(+)是單向的

    SQL
    >
    select p.part_id, s.supplier_name
    2
    from part p, supplier s
    3
    where p.supplier_id (+) = s.supplier_id (+);
    where p.supplier_id (+) = s.supplier_id (+)
    *
    ERROR at line
    3:
    ORA
    -01468: a predicate may reference only one outer-joined table
    --實現Full Join的方法

    SQL
    >
    select p.part_id, s.supplier_name
    2
    from part p, supplier s
    3
    where p.supplier_id = s.supplier_id (+)
    4
    union
    5
    select p.part_id, s.supplier_name
    6
    from part p, supplier s
    7
    where p.supplier_id (+) = s.supplier_id;

    PART SUPPLIER_NAME
    ---- --------------------
    P1 Supplier#1
    P2 Supplier#
    2
    P3
    P4
    Supplier#
    3
    --現在的語法
    SQL>
    select p.part_id, s.supplier_name
    2
    from part p full
    outer
    join supplier s
    3
    on p.supplier_id = s.supplier_id;

    PART SUPPLIER_NAME
    ---- --------------------
    P1 Supplier#1
    P2 Supplier#
    2
    P4
    P3
    Supplier#
    3

    另外的EG:

    SQL code
    SQL
    >
    select
    *
    from testa;

    ID NAME ADDR AGE
    ---------- ------ ------ ----------

    3 電子 南京 23
    5 物理 北京 23
    6 物理 河北 25
    1 電腦 上海 23
    2 電子 北京 22
    4 物理 蕪湖 22
    7 藝術 上海 21
    8 歌劇 蘇州 16
    9 沈亮 上海 22

    已選擇9行。

    SQL
    >
    select
    *
    from testb;

    ID ADDR
    ---------- ----------

    7 上海
    1 北京
    3 上海
    5 合肥
    --匹配完全
    select testa.id,testa.addr from testa,testb where testa.id(+)=testb.id and
    testa.addr(
    +)=testb.addr;

    ID ADDR
    ---------- ------

    7 上海



    現在的Outer Join方法是Oracle9i時開始引用的 ANSI標準的聯接語法,現在的則比較直觀 簡單
    通過上邊Full Join的實現方式 不難看到ANSI的聯接語法要比用含Union的(+)的執行效率更高~~
    posted on 2010-08-21 09:06 David1228 閱讀(3885) 評論(0)  編輯  收藏 所屬分類: 數據庫

    <2010年8月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    文章檔案

    新聞分類

    新聞檔案

    相冊

    收藏夾

    Java

    Linux知識相關

    Spring相關

    云計算/Linux/虛擬化技術/

    友情博客

    多線程并發編程

    開源技術

    持久層技術相關

    搜索

    •  

    積分與排名

    • 積分 - 358627
    • 排名 - 154

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费一级特黄特色大片在线观看| 亚洲精品国产精品国自产网站| 午夜dj免费在线观看| 老司机精品免费视频| 亚洲av日韩av永久无码电影| 亚洲激情在线观看| 国产亚洲精品不卡在线| 在线观看免费a∨网站| 亚洲国产精品免费观看| 一个人看的www免费视频在线观看| 男人j进女人p免费视频| 亚洲爆乳无码精品AAA片蜜桃| 亚洲成av人片在线看片| 亚洲国产精品久久久久网站| 自拍偷自拍亚洲精品情侣| 亚洲成av人片一区二区三区| 免费无码又爽又刺激毛片| 成年人在线免费看视频| 91香蕉成人免费网站| 久久精品国产免费观看| **aaaaa毛片免费| 91麻豆国产免费观看| 国内少妇偷人精品视频免费| 国产成人无码精品久久久免费| 美女尿口扒开图片免费| 国产精品亚洲综合一区在线观看| 亚洲精品无码aⅴ中文字幕蜜桃| 亚洲另类春色国产精品| 亚洲日韩国产精品乱-久| 亚洲国产美女视频| 亚洲大成色www永久网址| 456亚洲人成在线播放网站| 亚洲国产视频久久| 亚洲精品无AMM毛片| 亚洲AV无码一区二区三区久久精品| 亚洲精品国产国语| 亚洲va中文字幕| 污视频网站免费在线观看| 理论片在线观看免费| aaa毛片视频免费观看| 国产免费拔擦拔擦8X高清在线人|