1. 程式人生 > >左連線 和右連結的區別,內連線和外連線的區別

左連線 和右連結的區別,內連線和外連線的區別

假設有A,B兩個表。  


表A記錄如下:  
aID     aNum  
1     a20050111  
2     a20050112  
3     a20050113  
4     a20050114  
5     a20050115  


表B記錄如下:  
bID     bName  
1     2006032401  
2     2006032402  
3     2006032403  
4     2006032404  
8     2006032408  


--------------------------------------------  
1.left join  
sql語句如下:   
select * from A  
left join B   

on A.aID = B.bID  


結果如下:  
aID     aNum     bID     bName  
1     a20050111    1     2006032401  
2     a20050112    2     2006032402  
3     a20050113    3     2006032403  
4     a20050114    4     2006032404  
5     a20050115    NULL     NULL  


(所影響的行數為 5 行)  
結果說明:  
left join是以A表的記錄為基礎的,A可以看成左表,B可以看成右表,left join是以左表為準的.  
換句話說,左表(A)的記錄將會全部表示出來,而右表(B)只會顯示符合搜尋條件的記錄(例子中為: A.aID = B.bID).  

B表記錄不足的地方均為NULL.  
--------------------------------------------  
2.right join  
sql語句如下:   
select * from A  
right join B   
on A.aID = B.bID  


結果如下:  
aID     aNum     bID     bName  
1     a20050111    1     2006032401  
2     a20050112    2     2006032402  
3     a20050113    3     2006032403  
4     a20050114    4     2006032404  
NULL     NULL     8     2006032408  



(所影響的行數為 5 行)  
結果說明:  
仔細觀察一下,就會發現,和left join的結果剛好相反,這次是以右表(B)為基礎的,A表不足的地方用NULL填充.  
--------------------------------------------  
3.inner join  
sql語句如下:   
select * from A  
innerjoin B   
on A.aID = B.bID  


結果如下:  
aID     aNum     bID     bName  
1     a20050111    1     2006032401  
2     a20050112    2     2006032402  
3     a20050113    3     2006032403  
4     a20050114    4     2006032404  


結果說明:  
很明顯,這裡只顯示出了 A.aID = B.bID的記錄.這說明inner join並不以誰為基礎,它只顯示符合條件的記錄.  
--------------------------------------------  
PS:   
LEFT JOIN操作用於在任何的 FROM 子句中,組合來源表的記錄。使用 LEFT JOIN 運算來建立一個左邊外部聯接。左邊外部聯接將包含了從第一個(左邊)開始的兩個表中的全部記錄,即使在第二個(右邊)表中並沒有相符值的記錄。   


語法:FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2   


說明:table1, table2引數用於指定要將記錄組合的表的名稱。  
field1, field2引數指定被聯接的欄位的名稱。且這些欄位必須有相同的資料型別及包含相同型別的資料,但它們不需要有相同的名稱。  
compopr引數指定關係比較運算子:"=", "<", ">", "<=", ">=" 或 "<>"。  
如果在INNER JOIN操作中要聯接包含Memo 資料型別或 OLE Object 資料型別資料的欄位,將會發生錯誤   


注:left和right是外連線,Inner是內連線。


多看看SQL的幫助就明白了 

相關推薦

磁盤分區文件系統軟鏈接硬鏈接進程管理

日誌 sha 文件的 清理 directory 終端 參數 概念 映射關系 (一)磁盤分區 1.硬盤邏輯上劃分為:塊--磁道--磁柱--分區; 2.分區分類:主分區,擴展分區,邏輯分區 3.命令: sdb---scsi接口的第2個磁盤,路徑為/dev/sdb /dev/sr

資料庫預設連線數 遠遠 大於 資料庫連線池的 連結為什麼還要使用資料庫連線

1. 資料庫的讀寫能力與計算機硬體相關, 所以連結太多,資料庫也不能一下子處理。連線數超過資料庫最大連線數,連結就會等待,超時就會報錯。 2. 建立連結很浪費資源。資料庫連線池保持現有連線後不會再建立連線池,而是複用這些連結。 3. 如果併發超過連線池連線數,則連結排隊等待,直到空出連結。 4.如果

連線 連結區別連線連線的卻別!!

假設有A,B兩個表。   表A記錄如下:   aID     aNum   1     a20050111   2     a20050112   3     a20050113   4     a20050114   5     a20050115   表B記錄如下:  

連線 連結區別連線連線區別

假設有A,B兩個表。  表A記錄如下:  aID     aNum  1     a20050111  2     a20050112  3     a20050113  4     a20050114  5     a20050115  表B記錄如下:  bID     b

SQL: 連接連接連接

官方 存在 bsp SQ null from AS 返回 nbsp 例子: ---------------------- --------------------------- a表 id name b表 id job p

抽象類介面的區別部類引用外部方法final引數守護執行緒使用者執行緒

abstract class和interface有什麼區別?         答:宣告方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要建立一個體現某些基本行為的類,併為該類宣告方法,但不能在該類中實現該類的情況。不能建立abstract 類的

HTTP/1.0HTTP/1.1的區別HTTP怎麼處理長連線

1.HTTP簡介   web瀏覽器和伺服器之類的互動過程必須遵守的協議.他是tcp/ip中的一個應用協議。用來協議資料交換過程和資料本身的格式.主要的有HTTP/1.0和HTTP1.1.    HTTP/1.0和HTTP/1.1都把TCP作為底層的傳輸協議。   

普通集合泛型集合的區別哈希表字典表的區別隊列堆棧的區別以及堆棧的區別

ear 釋放內存 main 廣泛 棧內存 節點 except {0} 常數 普通集合和泛型集合的區別: 泛型集合與傳統集合相比 類型更安全. 泛型集合無需裝箱拆箱操作. 泛型的重要性. 泛型是未來五年的主流技術 ...通常情況下,建議您使用泛型集合,因為這樣可以獲得類型安全

hibernate中懶加載急加載的區別get方法load方的區別

() session 執行 語句 style 開啟 異常 方式 速度 懶加載是hibernate中的關聯關系對象的默認方式,懶加載也會先去查詢對象然後獲取對象的id, 當正真要對數據進行使用時才會正真寫sql語句。 懶加載的有效加載期是在session打開的時候,所以在我們

python的基礎23的區別以及forwhile的循環

python基礎;2和3的區別 ;字符編碼;if;whil;for循環 ; 第三方庫 字典 1、python2\python3的區別:python2\python3的區別:一、代碼重復,python2代碼重復功能復用,夾雜其他語言的部分,不規範python3進行整合,簡潔優美編譯型:一次性

第38節:hashCode()與toString()與equals()函數的作用部類匿名部類

指向 它的 函數 ati 使用外部 開發 算法 博客 else hashCode()和toString() Hash算法是把任意長度的數據通過hash算法成為散列值 hashCode() public int hashCode(){ int result = 10;

python下類物件例項物件區別類變數例項變數區別

Y14 一、類物件和例項物件 簡短理論: 類物件是將具有相似屬性和方法的物件總結抽象為類物件,可以定義相似的一些屬性和方法,不同的例項物件去引用類物件的屬性和方法,能減少程式碼的重複率。 例項物件又稱例項化物件,不是抽象而是一類物件中具體的一例物件。 比

Math.round()增強for迴圈equals方法==的區別,instanceof運算子三目運算子的用法

1.Math.round() 有這樣一個問題,將數字23.4,23.6轉換成int型,得到的新數字是多少? 事實上直接轉換的話得到的數字都是23。但在我們程式設計的過程中有時候需要對數字進行四捨五入取整,那麼顯然上面的直接轉換就不能實現我們的要求。但好在java裡面給我提供了一個可以實現四捨五入

HbaseHive的區別Hbase與傳統資料庫的區別

HBase 於 Hive 的區別,我們簡單的梳理一下 Hive 和 HBase 的應用場景: Hive 適合用來對一段時間內的資料進行分析查詢,例如,用來計算趨勢或者網站的日誌。Hive 不應該用來進行實時的查詢(Hive 的設計目的,也不是支援實時的查詢)。因為它需要很長時間才可以返回結果;H

sql中什麼時候用連線查詢什麼時候用連線查詢?用起來好像一樣啊!

我用內連線查詢和外連線查詢的結果是一樣的,兩者有什麼不同? 需要查詢兩張表同時存在的資料,使用內連線需要查詢兩張表中一張表存在,另一張表不存在的時候使用左外連結 或 右外連結內連線的查詢結果都是滿足連線條件的元組。但有時我們也希望輸出那些不滿足連線條件的元組資訊。比如,我們

tomcat中部署好的專案localhost可以訪問但是網不能訪問(Windows 2008 R2中)

在Windows 2008 R2用tomcat搭建環境能夠執行web專案,在本地用localhost或者內網可以訪問網站,但是外網均無法訪問網站,發現有三種可能性致使這種情況發生: 第一種情況:防火牆

#!/bin/bash#!/bin/sh的區別source命令exec命令

Linux指令碼開頭#!/bin/bash和#!/bin/sh是什麼意思以及區別 一、含義 #!/bin/sh是指此指令碼使用/bin/sh來解釋執行,#!是特殊的表示符,其後面根的是此解釋此指令碼的shell的路徑。 其實第一句的#!是對指令碼的直譯器程式路徑,指令碼的內

thread中sleepwait方法的區別以及locksynchronized的區別

最近在專案中設計業務請求邏輯這一塊,運用到了thread的一些知識,所以就又去特定的研究了一下! 首先 sleep和wait的區別: 1、我們通過檢視原始碼得知,sleep是Threa的靜態方法,而wait方法是Object的成員方法; 2、sleep沒有synchnori

sql中什麼時候用連線查詢什麼時候用連線查詢

需要查詢兩張表同時存在的資料,使用內連線 需要查詢兩張表中一張表存在,另一張表不存在的時候使用左外連結 或 右外連結 內連線的查詢結果都是滿足連線條件的元組。但有時我們也希望輸出那些不滿足連線條件的元組資訊。比如,我們想知道每個學生的選課情況,包括已經選課的

StringBuffer與StringBuilder的區別實現原理擴容

StringBuffer與StringBuilder的區別,及實現原理 區別 1、StringBuffer 與 StringBuilder 中的方法和功能完全是等價的, 2、只是StringBuffer 中的方法大都採用了 synchronized