sql的左串連和右串連,sql串連串連

來源:互聯網
上載者:User

sql的左串連和右串連,sql串連串連
外串連
    使用外串連進行多表查詢時,返回的查詢結果集中僅包含查詢條件和串連條件的行。內串連除了消除了與另一個表中的任何不匹配的行,而外串連擴充了內串連的結果集,除了返回所有匹配的行外,還會返回一部分或全部不匹配的行,這就取決於外串連的類型。
    對於外串連,Oracle中可以使用(+)來表示,也可以使用left right和full outer join關鍵字。
外串連可以分為下面三類:
左外串連:(left outer join或left join)
右外串連:(right outer join或right join)
全外串連:(full outer join或full join)
    使用外串連,列出與串連條件相匹配的行,並列出左表(左外串連),右表(右表串連)或兩個表(全外串連)中,所有符合檢索條件的資料行。
案例如下:
我們使用oracle內建的emp和salgrade表進行操作。
salgrade表表示的是工資的等級,每個等級的工資分別有最高值和最低值。emp表為員工的基本資料
SQL> select * from salgrade;
     GRADE      LOSAL      HISAL
---------- ---------- ----------
         1        700       1200
         2       1201       1400
         3       1401       2000
         4       2001       3000
         5       3001       9999
SQL> select empno,ename,sal,grade
  2  from emp e inner join salgrade s
  3  on e.sal between s.losal and s.hisal;


     EMPNO ENAME             SAL      GRADE
---------- ---------- ---------- ----------
      7369 SMITH             800          1
      7876 ADAMS            1100          1
      7900 JAMES             950          1
      7521 WARD             1250          2
      7654 MARTIN           1250          2
      7934 MILLER           1300          2
      7499 ALLEN            1600          3
      7844 TURNER           1500          3
      7566 JONES            2975          4
      7698 BLAKE            2850          4
      7782 CLARK            2450          4
      7788 SCOTT            3000          4
      7902 FORD             3000          4
      7839 KING             5000          5
已選擇 14 行。
SQL> insert into emp values(7937,'Candy',null,null,null,500,null,null);//插入的資料中的sal工資為500不在員工的工資範圍之內
已建立 1 行。
SQL> insert into salgrade values(6,10000,20000);--插入的等級以及工資也不再範圍之內
已建立 1 行。
SQL> select e.empno,e.ename,e.sal,d.grade
  2  from emp e left outer join salgrade d      --使用左聯結
  3  on e.sal between d.losal and d.hisal;
     EMPNO ENAME             SAL      GRADE
---------- ---------- ---------- ----------
      7839 KING             5000          5
      7902 FORD             3000          4
      7788 SCOTT            3000          4
      7566 JONES            2975          4
      7698 BLAKE            2850          4
      7782 CLARK            2450          4
      7499 ALLEN            1600          3
      7844 TURNER           1500          3
      7934 MILLER           1300          2
      7521 WARD             1250          2
      7654 MARTIN           1250          2
      7876 ADAMS            1100          1
      7900 JAMES             950          1
      7369 SMITH             800          1
      7937 Candy              500
已選擇 15 行。
從上面的資料可以看出,除了查出了所有合格資料之外,我們還查處了不在範圍之內的資料      
      7937 Candy              500








右外串連
     右外串連是在結果中除了顯示滿足條件的行外,還顯示join右側表中所有滿足檢索條件的行。
select distinct e.deptno,d.deptno from emp e right outer join dept d on e.deptno=d.deptno;
如果使用佳豪實現右外串連,上述的語句等價於下面的語句:
select distinct e.deptno,d.deptno from emp e,dept d where e.deptno(+)=d.deptno;
結果如下:
SQL> select distinct e.deptno,d.deptno from emp e,dept d where e.deptno(+)=d.deptno;


    DEPTNO     DEPTNO
---------- ----------
        30         30
        20         20
        10         10
                   40


SQL> select distinct e.deptno,d.deptno from emp e right outer join dept d on e.deptno=d.deptno;


    DEPTNO     DEPTNO
---------- ----------
        30         30
        20         20
        10         10
                   40


SQL> select e.empno,e.ename,e.sal,d.grade
  2  from emp e right outer join salgrade d
  3  on e.sal between d.losal and d.hisal;
     EMPNO ENAME             SAL      GRADE
---------- ---------- ---------- ----------
      7369 SMITH             800          1
      7876 ADAMS            1100          1
      7900 JAMES             950          1
      7521 WARD             1250          2
      7654 MARTIN           1250          2
      7934 MILLER           1300          2
      7499 ALLEN            1600          3
      7844 TURNER           1500          3
      7566 JONES            2975          4
      7698 BLAKE            2850          4
      7782 CLARK            2450          4
      7788 SCOTT            3000          4
      7902 FORD             3000          4
      7839 KING             5000          5
                                          6  
//工資等級為6的沒有資料,但是使用右串連,將salgrade表中不匹配的資料顯示出來
已選擇 15 行。
SQL> select distinct e.deptno,d.deptno
  2  from emp e right outer join dept d
  3  on e.deptno=d.deptno;
    DEPTNO     DEPTNO
---------- ----------
        30         30
        20         20
        10         10
                    40
SQL> select distinct e.deptno,d.deptno
  2  from emp e,dept d
  3  where e.deptno(+)=d.deptno;  //與上面的結果相同
    DEPTNO     DEPTNO
---------- ----------
        30         30
        20         20
        10         10
                   40

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.