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的笛卡爾積表示所有可能的選課情況。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-591582/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- sql和hql中join語句區別,以及hibernate中內連線,迫切內連線,左外連線,迫切左外連線,右外連線的區別(合集)...SQL
- sql 內連線和外連線SQL
- SQL SERVER 自連線、外連線SQLServer
- 轉載:內連線與外連線的區別
- 【SQL】Oracle的內連線、左外連線、右外連線及全外連線SQLOracle
- SQL的四種連線:內連線 左外連線 右外連線 全連線SQL
- sql內連結,外連線SQL
- 深入理解SQL的四種連線-左外連線、右外連線、內連線、全連線SQL
- 內聯,左外聯,右外聯,全連線,交叉連線 的區別
- 內連線、外連線
- 等值連線和自然連線的區別
- T-SQL學習中–內聯接,外連線,交叉連線SQL
- SQL Server連線SQL Server、SQL Server連線ORACLE 連結伺服器SQLServerOracle伺服器
- 你真的會玩SQL嗎?內連線、外連線SQL
- Oracle內連線、外連線、右外連線、全外連線小總結Oracle
- SQL中的左連線和右連線SQL
- oracle sql內連線_左(右)連線_全外連線_幾種寫法OracleSQL
- 內連線、外連線總結
- 連線SQL ServerSQLServer
- 例項解析外連線 內連線 自連線 全連線
- MYSQL語法:左連線、右連線、內連線、全外連線MySql
- MySQL筆記3——內連線/外連線、多表連線MySql筆記
- 【SQL】一條外連線和內連線混合使用的SQL語句搞定同事一迷茫需求SQL
- SQL Deverlop連線SQL ServerSQLdevServer
- .NET連線SQL ServerSQLServer
- Oracle 表連線方式詳解(外連結、內連線、自連線)Oracle
- LAN連線和WAN連線有什麼區別?
- 外連線轉換為內連線的情況
- SQL的外連線對內部表的限制SQL
- Http和Socket連線區別HTTP
- Perl 連線 SQL Server (轉)SQLServer
- 遠端連線SQL ServerSQLServer
- 行的儲存(塊內連線與塊外連線)
- SQL的連線型別SQL型別
- 配置SQL server遠端連線(區域網)SQLServer
- 資料庫外連線,自然連線,內連線,條件連線,等值連線關係及詳解資料庫
- python 怎麼連線 sql server,不是連線 mysqlPythonServerMySql
- 內連線、左連線、右連線