左連線 和右連結的區別,內連線和外連線的區別
表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.0和HTTP/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的基礎2和3的區別,以及for和while的循環
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裡面給我提供了一個可以實現四捨五入
Hbase和Hive的區別,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中sleep和wait方法的區別,以及lock和synchronized的區別
最近在專案中設計業務請求邏輯這一塊,運用到了thread的一些知識,所以就又去特定的研究了一下! 首先 sleep和wait的區別: 1、我們通過檢視原始碼得知,sleep是Threa的靜態方法,而wait方法是Object的成員方法; 2、sleep沒有synchnori
sql中什麼時候用內連線查詢,什麼時候用外連線查詢
需要查詢兩張表同時存在的資料,使用內連線 需要查詢兩張表中一張表存在,另一張表不存在的時候使用左外連結 或 右外連結 內連線的查詢結果都是滿足連線條件的元組。但有時我們也希望輸出那些不滿足連線條件的元組資訊。比如,我們想知道每個學生的選課情況,包括已經選課的
StringBuffer與StringBuilder的區別,實現原理和擴容
StringBuffer與StringBuilder的區別,及實現原理 區別 1、StringBuffer 與 StringBuilder 中的方法和功能完全是等價的, 2、只是StringBuffer 中的方法大都採用了 synchronized