• <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • Oracle教程
    Oracle練習題

    Oracle連接查詢

     

     

    SQL92語法

     

    連接查詢:也可以叫跨表查詢,需要關聯多個表進行查詢。

     

    ● 顯示每個員工信息,并顯示所屬的部門名稱

     

    select ename, dname from emp, dept;
    SQL> select ename, dname from emp, dept;
    
    ENAME      DNAME
    ---------- --------------
    SMITH      ACCOUNTING
    ALLEN      ACCOUNTING
    WARD       ACCOUNTING
    JONES      ACCOUNTING
    MARTIN     ACCOUNTING
    BLAKE      ACCOUNTING
    CLARK      ACCOUNTING
    SCOTT      ACCOUNTING
    KING       ACCOUNTING
    TURNER     ACCOUNTING
    ADAMS      ACCOUNTING
    JAMES      ACCOUNTING
    FORD       ACCOUNTING
    MILLER     ACCOUNTING
    SMITH      RESEARCH
    ALLEN      RESEARCH
    WARD       RESEARCH
    JONES      RESEARCH
    MARTIN     RESEARCH
    BLAKE      RESEARCH
    CLARK      RESEARCH
    SCOTT      RESEARCH
    KING       RESEARCH
    TURNER     RESEARCH
    ADAMS      RESEARCH
    JAMES      RESEARCH
    FORD       RESEARCH
    MILLER     RESEARCH
    SMITH      SALES
    ALLEN      SALES
    WARD       SALES
    JONES      SALES
    MARTIN     SALES
    BLAKE      SALES
    CLARK      SALES
    SCOTT      SALES
    KING       SALES
    TURNER     SALES
    ADAMS      SALES
    JAMES      SALES
    FORD       SALES
    MILLER     SALES
    SMITH      OPERATIONS
    ALLEN      OPERATIONS
    WARD       OPERATIONS
    JONES      OPERATIONS
    MARTIN     OPERATIONS
    BLAKE      OPERATIONS
    CLARK      OPERATIONS
    SCOTT      OPERATIONS
    KING       OPERATIONS
    TURNER     OPERATIONS
    ADAMS      OPERATIONS
    JAMES      OPERATIONS
    FORD       OPERATIONS
    MILLER     OPERATIONS
    
    已選擇56行。

     

    以上輸出,不正確,輸出了56條數據,其實就是兩個表記錄的乘積,這種情況我們稱為:“笛卡兒乘積”,出現錯誤的原因是:沒有指定連接條件。

     

    指定連接條件

     

    select ename, dname from emp, dept where emp.deptno=dept.deptno;
    也可以使用別名(但是不能增加as關鍵字)
    select ename, dname from emp a, dept b where a.deptno=b.deptno;

     

     

    以上結果輸出正確,因為加入了正確的連接。

     

    以上查詢也成為“內連接”,指查詢相等的數據。

     

    ● 取得員工和所屬的經理的姓名

     

    select a.ename, b.ename from emp a, emp b where a.mgr=b.empno;

     

     

    以上稱為“自連接”,只有一張表連接,具體的查詢方法,把一張表看作兩張表即可,如以上示例:第一個表emp a代碼了員工表,emp b代表了經理表,相當于員工表和部門表一樣。

     

     

    SQL99語法

     

    ● (內連接)顯示薪水大于2000的員工信息,并顯示所屬的部門名稱

     

    采用sql99語法:
    select ename, dname from emp a join dept b on a.deptno=b.deptno where sal>2000;
    或
    select ename, dname from emp a inner join dept b on a.deptno=b.deptno where sal >2000;
    注釋:inner關鍵字一般省略
    采用sql92語法:
    select ename, dname from emp a, dept b where a.deptno=b.deptno and sal>2000;

     

    Sql92語法和sql99語法的區別:99語法可以做到表的連接和查詢條件分離,特別是多個表進行連接的時候,會比sql92更清晰。

     

    ● (外連接)顯示薪水大于2000的員工信息,并顯示所屬的部門名稱,如果某一個部門沒有員工,那么該部門也必須顯示出來

     

    (關聯的2個表存在主從關系的話,那么如果主表在join的左邊,就使用左連接,如果在join的右邊,就使用右連接)

     

    右連接
    select a.ename, b.dname from emp a right join dept b on a.deptno=b.deptno;
    同樣可以使用左聯接
    select a.ename, b.dname from dept b left join emp a on a.deptno=b.deptno;

     

     

    左聯接和右連接都是外連接,左連接以左面的表為準和右邊的表比較,和右面表相等的不相等都會顯示出來,右連接恰恰相反,以上左連接和右連接也可以加入outer關鍵字,但一般不建議這種寫法,如:

     

    //加入outer
    select a.ename, b.dname from dept b left outer join emp a on a.deptno=b.deptno;
    //加入outer
    select a.ename, b.dname from emp a right outer join dept b on a.deptno=b.deptno;

     

    左連接能完成的功能右連接一定可以完成

     

    使用SQL92語法完成左連接,右連接的相關查詢:

     

    使用(+) ,放在主表的對面

     

    ● 取得員工和所屬的經理的姓名,如果沒有上級經理,也要查詢出來

     

    select e.empno, e.ename, e.mgr, m.ename from emp m , emp e where m.empno(+) = e.mgr ;

     

     

    全部教程
  • <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • 面对面棋牌游戏