久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    SQL基礎(chǔ)

     outsee 2011-11-25

    SQL基礎(chǔ)-->多表查詢

    分類: SQL/PLSQL 基礎(chǔ) 486人閱讀 評論(0) 收藏 舉報(bào)

    --==========================

    --SQL基礎(chǔ)-->多表查詢

    --==========================

    /*

    一、多表查詢

        簡言之,根據(jù)特定的連接條件從不同的表中獲取所需的數(shù)據(jù)

     

        笛卡爾集的產(chǎn)生條件:

           省略連接條件

           連接條件無效

           第一個(gè)表中的所有行與第二個(gè)表中的所有行相連接

               

    二、多表查詢語法:*/

        SELECT table1.column, table2.column

        FROM table1, table2

        WHERE table1.column1 = table2.column2;

        /*

        但要注意where 不要省了,省略where 即為笛卡爾集,而且where 條件要有效,

        兩張表間有一個(gè)相同的字段,才好進(jìn)行有效的多表查詢

     

        查詢時(shí)列名前,加表名或表別名前輟(如果字段在兩個(gè)表中是唯一的可以不加)

     

        為了簡化SQL書寫,可為表名定義別名,格式:from 表名別名

        如:from emp e,dept d

       

        建議使用表的別名及表前綴,使用表別名可以簡化查詢,而使用表前綴則可以提高查詢性能

     

        例:查詢每個(gè)員工的工號,姓名,工資,部門名和工作地點(diǎn)*/

        select empno,ename,sal,dname,loc from emp,dept

        where emp.deptno=dept.deptno;

     

    /*

    三、多表連接類型:

        從數(shù)據(jù)顯示方式來講有:內(nèi)連接和外連接。

        內(nèi)連接:只返回滿足連接條件的數(shù)據(jù)。

        外連接:除了返回滿足連接條的行以外,還返回左(右)表中,不滿足條件的行,

           稱為左(右)連接

     

        內(nèi)連接*/

        select empno,ename,sal,dname,loc from emp,dept

        where emp.deptno=dept.deptno;  --(Oracle 8i 及以前的寫法)

     

        --內(nèi)連接的另一種寫法:

        select empno,ename,job,sal,dept.deptno,dname,loc

        from emp join dept on (emp.deptno=dept.deptno); -- (SQL 99的寫法)

     

        /*

        外連接:

        兩個(gè)表的查詢中,使用外連接可以查詢另一個(gè)表或者兩個(gè)中不滿足連接條件的數(shù)據(jù)。

        外連接的符號是(+),(+)要放在字段名后。(+)對面的那個(gè)表,會全部顯示。

       

        外連接語法*/

            SELECT table1.column, table2.column   --右外連接

           FROM table1, table2

           WHERE table1.column(+) = table2.column;

          

           SELECT table1.column, table2.column   --左外連接

           FROM table1, table2

           WHERE table1.column = table2.column(+);

     

        --例:

        select empno,ename,job,sal,dept.deptno,dname,loc

        from emp,dept

        where emp.deptno(+)=dept.deptno; -- (Oracle 8i 及以前的寫法)

     

        --另一種寫法(右連接):     -- (SQL 99的寫法)

        select empno,ename,job,sal,dept.deptno,dname,loc

        from emp right join dept on (emp.deptno=dept.deptno);

     

        --左連接:                    (SQL 99的寫法)

        select empno,ename,job,sal,dept.deptno,dname,loc

        from emp left join dept on (emp.deptno=dept.deptno);

     

        --全連接(滿連接)            (SQL 99的寫法)

       select empno,ename,job,sal,d.deptno,dname,loc

        from emp e full join dept d on (e.deptno=d.deptno);

     

        /*

        自然連接                    (SQL 99的寫法)

        以兩個(gè)表具有相同的字段的所有列為基礎(chǔ),可采用自然連接(natural join)

        它將選擇兩個(gè)表中那些在所有匹配的列中值相等的行。

        如果列具有相同的名稱,但數(shù)據(jù)類型能夠不同,則會報(bào)錯(cuò)*/

        select empno,ename,job,sal,deptno,dname,loc

        from emp natural join dept;

     

        /*

        自連接:

        將自身表的一個(gè)鏡像當(dāng)另一個(gè)表來對待。*/

        select ... from emp e,emp d  ...

       

        --下面列出SQL 99的語法供參考

        SELECT table1.column, table2.column

        FROM table1

        [CROSS JOIN table2] |

        [NATURAL JOIN table2] |

        [JOIN table2 USING (column_name)] |

        [JOIN table2

        ON(table1.column_name = table2.column_name)] |

        [LEFT|RIGHT|FULL OUTER JOIN table2

        ON (table1.column_name = table2.column_name)];

       

        --在下面的語法中

        table1.column     --指明從中檢索數(shù)據(jù)的表和列

        CROSS JOIN        --返回兩個(gè)表的笛卡爾集

        NATURAL JOIN      --根據(jù)相同的列名連接兩個(gè)表

        JOIN table

        USING column_name --根據(jù)列名執(zhí)行等值連接

        JOIN table ON

        table1.column_name   --根據(jù)ON 子句中的條件執(zhí)行等值連接

        = table2.column_name

        LEFT/RIGHT/FULL OUTER

       

        /*

        使用using子句創(chuàng)建連接

            如果幾個(gè)列具有相同的名稱,但是數(shù)據(jù)類型不匹配,那么可以使用using子句來修改natural join

           子句以指定要用于等值連接的列

           在多個(gè)列匹配時(shí),使用using 子句只匹配一個(gè)列

           在引用列中不要使用表名或別名

           natural join using 子句是互不相容的 */

          

            --例:

           SELECT l.city, d.department_name

           FROM locations l JOIN departments d USING (location_id)

           WHERE location_id = 1400;

           --下面的語句無效,因?yàn)?/SPAN>where 子句中限定了location_id

           SELECT l.city, d.department_name

           FROM locations l JOIN departments d USING (location_id)

           WHERE d.location_id = 1400;

           ORA-25154: column part of USING clause cannot have qualifier

          

           --注意:

           --   兩個(gè)表中名稱相同的列在使用時(shí)不能有任何限定符,這一限制同樣適用于natural join

    /*

    四、演示:      */ 

    --笛卡爾集

        SQL> select empno,ename,dname from emp,dept;

     

            EMPNO ENAME      DNAME

        ---------- ---------- --------------

             7369 SMITH      ACCOUNTING

             7499 ALLEN      ACCOUNTING

             7521 WARD       ACCOUNTING

             7566 JONES      ACCOUNTING

             7654 MARTIN     ACCOUNTING

             7698 BLAKE      ACCOUNTING

             7782 CLARK      ACCOUNTING

             7788 SCOTT      ACCOUNTING

             7839 KING       ACCOUNTING

             7844 TURNER     ACCOUNTING

             7876 ADAMS      ACCOUNTING

             --中間結(jié)果省略

             56 rows selected.    

    --使用cross join 實(shí)現(xiàn)交叉連接,即笛卡爾集    

        SQL> select empno,ename,dname from emp

          2  cross join dept;

     

            EMPNO ENAME      DNAME

        ---------- ---------- --------------

             7369 SMITH      ACCOUNTING

             7499 ALLEN      ACCOUNTING

             7521 WARD       ACCOUNTING

             7566 JONES      ACCOUNTING

             7654 MARTIN     ACCOUNTING

             7698 BLAKE      ACCOUNTING

             7782 CLARK      ACCOUNTING

             7788 SCOTT      ACCOUNTING

             7839 KING       ACCOUNTING

             7844 TURNER     ACCOUNTING

             7876 ADAMS      ACCOUNTING

         

    --等值連接(Oracle 寫法)

        SQL> select empno,ename,dname from emp,dept where emp.deptno = dept.deptno;

     

            EMPNO ENAME      DNAME

        ---------- ---------- --------------

             7369 SMITH      RESEARCH

             7499 ALLEN      SALES

             7876 ADAMS      RESEARCH

             --部分結(jié)果省略

             7902 FORD       RESEARCH

             7934 MILLER     ACCOUNTING

     

        14 rows selected.

     

    --等值連接(SQL 99 寫法)

        SQL> select e.empno,e.ename,d.dname from emp  e

          2  inner join dept  d

          3  on e.deptno = d.deptno;

     

            EMPNO ENAME      DNAME

        ---------- ---------- --------------

             7369 SMITH      RESEARCH

             7499 ALLEN      SALES

             7876 ADAMS      RESEARCH

               --部分結(jié)果省略

             7902 FORD       RESEARCH

             7934 MILLER     ACCOUNTING

     

        14 rows selected.

     

    --注意:表別名不支持as 用法

        SQL> select e.empno,e.ename,d.dname from emp as e

          2  inner join dept  d

          3  on e.deptno = d.deptno;

        select e.empno,e.ename,d.dname from emp as e

                                           *

        ERROR at line 1:

        ORA-00933: SQL command not properly ended

     

    --等值連接并增加條件

        SQL> select e.empno,e.ename,d.dname from emp  e,

          2  dept d

          3  where d.deptno = e.deptno

          4    and e.ename = 'SCOTT';

     

            EMPNO ENAME      DNAME

        ---------- ---------- --------------

             7788 SCOTT      RESEARCH

         

    --非等值連接

    --查詢雇員的姓名、薪水、級別且部門為的記錄

        SQL> select ename,sal,grade

          2  from emp,salgrade

          3  where sal between losal and hisal

          4    and emp.deptno = 20;

     

        ENAME             SAL      GRADE

        ---------- ---------- ----------

        SCOTT            3000          4

        FORD             3000          4

        JONES            2975          4

        ADAMS            1100          1

        SMITH             800          1 

     

    --使用SQL 99寫法實(shí)現(xiàn)上述功能

        SQL> select e.ename,e.sal,s.grade

          2  from emp e

          3    join salgrade s

          4      on e.sal between losal and hisal

          5      and e.deptno = 20;

     

        ENAME             SAL      GRADE

        ---------- ---------- ----------

        SCOTT            3000          4

        FORD             3000          4

        JONES            2975          4

        ADAMS            1100          1

        SMITH             800          1

     

    --右外連接

    --注意:右外連接時(shí),加號在等號的左邊

    --可以看到,左表emp中的列有為空值的

        SQL> select e.ename,e.deptno,d.dname  

          2  from emp e,dept d

          3  where e.deptno(+) = d.deptno;

     

        ENAME          DEPTNO DNAME

        ---------- ---------- --------------

        CLARK              10 ACCOUNTING

        KING               10 ACCOUNTING

        MILLER             10 ACCOUNTING

        JONES              20 RESEARCH

        FORD               20 RESEARCH

        ADAMS              20 RESEARCH

        SMITH              20 RESEARCH

        SCOTT              20 RESEARCH

        WARD               30 SALES

        TURNER             30 SALES

        ALLEN              30 SALES

     

        ENAME          DEPTNO DNAME

        ---------- ---------- --------------

        JAMES              30 SALES

        BLAKE              30 SALES

        MARTIN             30 SALES

                           OPERATIONS

     

        15 rows selected.

     

    --使用SQL 99寫法實(shí)現(xiàn)右外連接

        SQL> select e.ename,e.deptno,d.dname

          2  from emp e      

          3    right join dept d

          4      on e.deptno = d.deptno ;

     

        ENAME          DEPTNO DNAME

        ---------- ---------- --------------

        CLARK              10 ACCOUNTING

        KING               10 ACCOUNTING

        MILLER             10 ACCOUNTING

        JONES              20 RESEARCH

        FORD               20 RESEARCH

        ADAMS              20 RESEARCH

        SMITH              20 RESEARCH

        SCOTT              20 RESEARCH

        WARD               30 SALES

        TURNER             30 SALES

        ALLEN              30 SALES

     

        ENAME          DEPTNO DNAME

        ---------- ---------- --------------

        JAMES              30 SALES

        BLAKE              30 SALES

        MARTIN             30 SALES

                           OPERATIONS

     

    --左外連接

    --注意:左外連接時(shí),加號在等號的右邊

        SQL> select d.dname,e.ename,e.deptno

          2  from dept d,emp e

          3  where d.deptno = e.deptno(+)

          4  order by d.deptno;

     

        DNAME          ENAME          DEPTNO

        -------------- ---------- ----------

        ACCOUNTING     CLARK              10

        ACCOUNTING     KING               10

        ACCOUNTING     MILLER             10

        RESEARCH       JONES              20

        RESEARCH       FORD               20

        RESEARCH       ADAMS              20

        RESEARCH       SMITH              20

        RESEARCH       SCOTT              20

        SALES          WARD               30

        SALES          TURNER             30

        SALES          ALLEN              30

     

        DNAME          ENAME          DEPTNO

        -------------- ---------- ----------

        SALES          JAMES              30

        SALES          BLAKE              30

        SALES          MARTIN             30

        OPERATIONS

     

        15 rows selected.

     

    --使用SQL 99寫法實(shí)現(xiàn)左外連接               

        SQL> select d.dname,e.ename,e.deptno

          2  from dept d

          3    left join emp e

          4      on d.deptno = e.deptno

          5  order by d.deptno;

     

        DNAME          ENAME          DEPTNO

        -------------- ---------- ----------

        ACCOUNTING     CLARK              10

        ACCOUNTING     KING               10

        ACCOUNTING     MILLER             10

        RESEARCH       JONES              20

        RESEARCH       FORD               20

        RESEARCH       ADAMS              20

        RESEARCH       SMITH              20

        RESEARCH       SCOTT              20

        SALES          WARD               30

        SALES          TURNER             30

        SALES          ALLEN              30

     

        DNAME          ENAME          DEPTNO

        -------------- ---------- ----------

        SALES          JAMES              30

        SALES          BLAKE              30

        SALES          MARTIN             30

        OPERATIONS

     

        15 rows selected.                

     

    --自連接

        SQL> select e.ename || ' works for ' || m.ename

          2  from emp e,emp m

          3  where e.empno = m.mgr;

     

        E.ENAME||'WORKSFOR'||M.ENAME

        -------------------------------

        FORD works for SMITH

        BLAKE works for ALLEN

        BLAKE works for WARD

        KING works for JONES

        BLAKE works for MARTIN

        KING works for BLAKE

        KING works for CLARK

        JONES works for SCOTT

        BLAKE works for TURNER

        SCOTT works for ADAMS

        BLAKE works for JAMES

     

        E.ENAME||'WORKSFOR'||M.ENAME

        -------------------------------

        JONES works for FORD

        CLARK works for MILLER

     

        13 rows selected.

     

    --自然連接

        SQL> select empno,ename,job,deptno,dname,loc

          2  from emp

          3  natural join dept;

     

            EMPNO ENAME      JOB           DEPTNO DNAME          LOC

        ---------- ---------- --------- ---------- -------------- -------------

             7369 SMITH      CLERK             20 RESEARCH       DALLAS

             7499 ALLEN      SALESMAN          30 SALES          CHICAGO

             7521 WARD       SALESMAN          30 SALES          CHICAGO

             7566 JONES      MANAGER           20 RESEARCH       DALLAS

             7654 MARTIN     SALESMAN          30 SALES          CHICAGO

             7698 BLAKE      MANAGER           30 SALES          CHICAGO

             7782 CLARK      MANAGER           10 ACCOUNTING     NEW YORK

             7788 SCOTT      ANALYST           20 RESEARCH       DALLAS

             7839 KING       PRESIDENT         10 ACCOUNTING     NEW YORK

             7844 TURNER     SALESMAN          30 SALES          CHICAGO

             7876 ADAMS      CLERK             20 RESEARCH       DALLAS

     

            EMPNO ENAME      JOB           DEPTNO DNAME          LOC

        ---------- ---------- --------- ---------- -------------- -------------

             7900 JAMES      CLERK             30 SALES          CHICAGO

             7902 FORD       ANALYST           20 RESEARCH       DALLAS

             7934 MILLER     CLERK             10 ACCOUNTING     NEW YORK

     

        14 rows selected.

     

    --使用using 子句創(chuàng)建連接

        SQL> select e.empno,e.ename,d.dname,d.loc

          2  from emp e

          3  join dept d

          4  using (deptno)

          5  where deptno in (20,40);

     

            EMPNO ENAME      DNAME          LOC

        ---------- ---------- -------------- -------------

             7369 SMITH      RESEARCH       DALLAS

             7566 JONES      RESEARCH       DALLAS

             7788 SCOTT      RESEARCH       DALLAS

             7876 ADAMS      RESEARCH       DALLAS

             7902 FORD       RESEARCH       DALLAS

    /*

    五、更多*/

     

    Oracle 數(shù)據(jù)庫實(shí)例啟動關(guān)閉過程

     

    Oracle 10g SGA 的自動化管理

     

    使用OEM,SQL*Plus,iSQL*Plus 管理Oracle實(shí)例

     

    Oracle實(shí)例和Oracle數(shù)據(jù)庫(Oracle體系結(jié)構(gòu))

     

    SQL 基礎(chǔ)-->常用函數(shù)

     

    SQL基礎(chǔ)-->過濾和排序

     

    SQL 基礎(chǔ)-->SELECT 查詢

      本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
      轉(zhuǎn)藏 分享 獻(xiàn)花(0

      0條評論

      發(fā)表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 中国女人熟毛茸茸A毛片| 亚洲国产精品无码AAA片| 丁香色欲久久久久久综合网| 国产精品v片在线观看不卡| 爱性久久久久久久久| 亚洲国产成人AⅤ毛片奶水| 亚洲色婷婷综合开心网| 国产精品爆乳在线播放第一人称| 精品久久香蕉国产线看观看亚洲 | 男人把女人桶爽30分钟| 67194熟妇在线观看线路| 亚洲欧美综合精品二区| 无码精品人妻一区二区三区免费看| 成人免费无码大片A毛片抽搐色欲| 性无码专区无码| 国产线播放免费人成视频播放| 久久伊人精品青青草原APP| 亚洲国产精品午夜福利| 成在线人永久免费视频播放| 动漫av网站免费观看| 无码毛片一区二区本码视频 | 中文字幕精品无码一区二区三区| 十八禁午夜福利免费网站| 人妻 日韩 欧美 综合 制服| 国产午夜亚洲精品不卡网站| 免费a级毛片无码av| 日韩精品卡2卡3卡4卡5| 国产熟睡乱子伦视频在线播放| 亚洲熟妇AV一区二区三区漫画| 国产精品 自在自线| 成人国产精品一区二区网站公司| 国产亚洲精品第一综合另类灬| 亚洲色欲色欱WWW在线| 亚洲高清无在码在线电影不卡| 亚洲人成网站免费播放| 青青草无码免费一二三区| AV激情亚洲男人的天堂| 精品久久久久久无码国产| 丰满少妇2中文在线观看| 中文字幕精品亚洲二区| 亚欧乱色熟女一区二区三区|