SQL Server中內串連和外串連的區別

來源:互聯網
上載者:User
SQL Server中內串連和外串連的區別 

假設一個資料庫中有兩張表,一張是學生表StudentInfo,一張是班級表ClassInfo,兩張表之間用ClassId欄位進行關聯。

如果用內串連,正常的寫法是這樣的:

Select StudentInfo.*,ClassInfo.* from StudentInfo join ClassInfo on StudentInfo.ClassId=ClassInfo.ClassId

用這種寫法不會出現笛卡爾積,但是內串連是允許省略串連條件的,也就是可以省略掉on後面的內容,所以如果寫成這樣:

Select StudentInfo.*,ClassInfo.* from StudentInfo,ClassInfo

也是可以通過編譯的,但是這樣一來就產生了一個笛卡爾積(關於笛卡爾積的內容見文章最後註解)。

但是因為怕產生笛卡爾積而拒絕使用內連結是不正確的,只要不省略掉串連條件,是不會產生笛卡爾積的。

具體採用內串連還是外串連要看具體問題的需要。內串連的特性是只顯示符合串連條件的記錄,以剛才的語句為例,查詢結果只顯示學生表和班級表中ClassId相等的記錄。舉例來說,如果有條學生記錄的ClassId欄位為空白,那麼用內連結將不會顯示這條學生記錄,因為在班級表裡面是找不到對應的ClassId的。

而外串連就不一樣,以左外串連為例(右外串連類似),它除了顯示符合串連條件的記錄以外,還會顯示所有左表中的記錄(右外串連就是所有右表中的記錄)。還是以剛才的例子說明,如果學生表中有條學生記錄的ClassId欄位為空白,用學生表左外串連班級表,那麼是會顯示這條學生記錄的。

所以如果要求只顯示已有分班的學生記錄,那麼就應該用內串連查詢;如果要求查詢所有學生記錄,那麼就應該採用外串連查詢。

 

笛卡爾積:
假設集合A={a,b},集合B={0,1,2},則兩個集合的笛卡爾積為{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。可以擴充到多個集合的情況。類似的例子有,如果A表示某學校學生的集合,B表示該學校所有課程的集合,則A與B的笛卡爾積表示所有可能的選課情況。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.