基礎知識系列–Oracle的串連

來源:互聯網
上載者:User

    從今天開始我決定每周抽出一些空閑時間,記錄一下Oracle的一些基礎知識,也算是方便用baidu和google的人吧。

    今天介紹一個非常有數學氣息的--串連。

    首先介紹我今天需要使用的兩張表,test1和test2。test1是學生基本資料表,包括學生的名字和學號;test2是成績表,有學生學號,成績這兩列。

    表的資料如:

    test1:

    test2:

     這兩個表由stu_id進行關聯。

     好了,現在介紹第一種串連形式:內串連。代碼如下:

     

SELECT T1.STU_ID, T1.STU_NAME, T2.SCORE
FROM TEST1 T1
INNER JOIN TEST2 T2
ON T1.STU_ID = T2.STU_ID;

      這中查詢的結果是:

      很不幸,玄燁同學沒去考試。因此查不出成績來。但是我現在很想很想得到一張完全的成績單,包括沒去考試的玄燁同學,因為我要開家長會了,怎麼辦呢?這個時候就可以用到外串連:

      

SELECT T1.STU_ID, T1.STU_NAME, T2.SCORE
FROM TEST1 T1
LEFT OUTER JOIN TEST2 T2
ON T1.STU_ID = T2.STU_ID;

      結果如下:

      

      這裡的基本原理就是關係代數,可以參考《資料庫系統概論》(王珊,薩師煊)第二章的內容。

      有左串連就有右串連。給test2增加幾行,stu_id不在test1的記錄。然後寫這個SQL:

SELECT T1.STU_ID, T1.STU_NAME, T2.SCORE
FROM TEST1 T1
RIGHT OUTER JOIN TEST2 T2
ON T1.STU_ID = T2.STU_ID;

       這樣就取到了並不滿足相等條件的test2中的記錄,紅框框中的:

       

       現在我想取到所有的,也就是說test1中沒成績的和test2中沒有名字的記錄,這個時候就要用到全外串連

SELECT T1.STU_ID, T1.STU_NAME, T2.SCORE
FROM TEST1 T1
FULL OUTER JOIN TEST2 T2
ON T1.STU_ID = T2.STU_ID;

       得到的結果:

       

      還有種自然串連,平時我也不用,結果嘛,自己看吧。先看SQL:

      

SELECT STU_ID, STU_NAME, SCORE FROM TEST1 T1 NATURAL JOIN TEST2 T2;

      結果:

       

      我感覺這個和以下的SQL結果是一樣的:

      

SELECT T1.STU_ID, T1.STU_NAME, T2.SCORE FROM TEST1 T1, TEST2 T2 WHERE T1.STU_ID = T2.STU_ID;

      也和第一個內串連的一樣。自然串連還有好幾種寫法,這裡就不一一介紹了,因為我平時工作也用不到,基本上不會,也就不抄書了。

     

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.