1. 程式人生 > >SQL語句中的左連線、右連線、交叉連線、全外連線

SQL語句中的左連線、右連線、交叉連線、全外連線

第一部分、連線查詢

一、內連線

內連線查詢操作列出與連線條件匹配的資料行,它使用比較運算子比較被連線列的列值。內連線分三種:

1、等值連線:在連線條件中使用等於號(=)運算子比較被連線列的列值,其查詢結果中列出被連線表中的所有列,包括其中的重複列。

2、不等連線:在連線條件使用除等於運算子以外的其它比較運算子比較被連線的列的列值。這些運算子包括>>=<=<!>!<<>

3、自然連線:在連線條件中使用等於(=)運算子比較被連線列的列值,但它使用選擇列表指出查詢結果集合中所包括的列,並刪除連線表中的重複列。

二、外連線

返回到查詢結果集合中的不僅包含符合連線條件的行,而且還包括左表

(左外連線時)、右表(右外連線時)或兩個邊接表(全外連線)中的所有資料行。

三、交叉連線

交叉連線不帶WHERE 子句,它返回被連線的兩個表所有資料行的笛卡爾積,返回到結果集合中的資料行數等於第一個表中符合查詢條件的資料行數乘以第二個表中符合查詢條件的資料行數。例,titles表中有6類圖書,而publishers表中有8家出版社,則下列交叉連線檢索到的記錄數將等於6*8=48行。

第二部分、例項說明

  • 例項

Book表:Student表:

一、內連線

select *

from [Book] as b,[Student] as s

where b.StudentId=s.StudentId

         等價於如下(也可以不要關鍵字inner,此為系統預設)

select *

from [Book] as b inner join [Student] as s

ON b.StudentId=s.StudentId

         結果為:

         執行過程

相當於內連線的向右連線。以from  [Book] inner join [Student]等式右邊為基準,即以Student表(等式右表,s表)的s.StudentId為基準,遍歷Book表(等式左表,Book表)中與之匹配的b.StudentId,然後拼接返回。結果含有重複的列,b.StudentId和s.StudentId。

         說明

這與where b.StudentId=s.StudentId或者s.StudentId=b.StudentId位置沒有關係。它僅僅代表滿足條件而已,不判定誰為基準。以下外連線,交叉連線相同操作。

二、外連線

1、左外連線

         程式碼

select *

from [Book] as b left join [Student] as s

ON b.StudentId=s.StudentId

         結果

         執行過程

即以from [Book] left join [Student]的Book表為基準,即以Book表(b表)的b.StudentId為基準。遍歷Student表(s表)中與之匹配的b.StudentId。若b.StudentId含有s.StudentId匹配項,則進行拼接,然後遍歷Student表的下一條s.StudentId,當查詢完畢則進入下一條b.StudentId。若b.StudentId沒有相應s.StudentId匹配項時,則顯示左表的項,拼接右表的項顯示為NULL。

2、右外連線

         程式碼

select *

from [Book] as b right join [Student] as s

ON b.StudentId=s.StudentId

         結果

         執行過程

即以from [Book] right join [Student]的Student表為基準,即以Student表(s表)的s.StudentId為基準。遍歷Book表(b表)中與之匹配的s.StudentId。若s.StudentId含有b.StudentId匹配項,則進行拼接,然後遍歷Book表的下一條b.StudentId,當查詢完畢則進入下一條s.StudentId。若s.StudentId沒有相應b.StudentId匹配項時,則顯示右表的項,拼接左表的項顯示為NULL。

3、全外連線

         程式碼

select *

from [Book] as b full outer join [Student] as s

ON b.StudentId=s.StudentId

         結果

         執行過程

即以from [Book] full outer join [Student]中先以Book表進行左外連線,然後以Student表進行右外連線。

三、交叉連線

         程式碼

select *

from [Book] as b CROSS Join [Student] as a

Order by b.BookId

         結果

         執行過程

即是按照Order排序的Id,把要Join的右表無條件拼接過來。這樣依次執行,這樣這種記錄便為兩個表的記錄的笛卡爾積。

相關推薦

SQL語句中的左連線連線交叉連線連線

第一部分、連線查詢一、內連線內連線查詢操作列出與連線條件匹配的資料行,它使用比較運算子比較被連線列的列值。內連線分三種:1、等值連線:在連線條件中使用等於號(=)運算子比較被連線列的列值,其查詢結果中列出被連線表中的所有列,包括其中的重複列。2、不等連線:在連線條件使用除等於運算子以外的其它比較運算子比較被連

Sql語句優化-查詢兩表不同行NOT INNOT EXISTS連線查詢Left Join

在實際開發中,我們往往需要比較兩個或多個表資料的差別,比較那些資料相同那些資料不相同,這時我們有一下三種方法可以使用:1. IN或NOT IN,2. EXIST或NOTEXIST,3.使用連線查詢(inner join,left join 或者 right join)。

10Oracle:左連線連線連線以及(+)號用法

回到目錄 1、準備工作 Oracle  外連線(OUTER JOIN)包括以下: 左外連線(左邊的表不加限制)右外連線(右邊的表不加限制)全外連線(左右兩表都不加限制) 對應SQL:LEFT/RIGHT/FULL OUTER JOIN。 通常省略OUTER關鍵字,

連線連線連線連線交叉連線(CROSS JOIN)-----小知識解決大資料攻略

       早就聽說了內連線與外連線,以前檢視中使用過、這次自考也學習了,只是簡單理解,現在深入探究學習(由於上篇部落格的出現)與實踐: 概念 關鍵字: 左右連線 資料表的連線有: 1、內連線(

Oracle左連線連線連線以及(+)號用法

回到目錄 1、準備工作 Oracle  外連線(OUTER JOIN)包括以下: 左外連線(左邊的表不加限制)右外連線(右邊的表不加限制)全外連線(左右兩表都不加限制) 對應SQL:LEFT/RIGHT/FULL OUTER JOIN。 通常省略OUTER關鍵字, 寫成:LEFT/RIGHT/FULL

mySQL進行多表的左連線連線連線連線

內連線: 只連線匹配的行 左外連線: 包含左邊表的全部行(不管右邊的表中是否存在與它們匹配的行),以及右邊表中全部匹配的行 右外連線: 包含右邊表的全部行(不管左邊的表中是否存在與它們匹配的行),以及左邊表中全部匹配的行 全外連線: 包含左、右兩個表的全部行,不管另外一

Sql語句優化-查詢兩表不同行NOT INNOT EXISTS連接查詢Left Join

exists join ngs sdn 連接查詢 blog 建議 開發 word 在實際開發中,我們往往需要比較兩個或多個表數據的差別,比較那些數據相同那些數據不相同,這時我們有一下三種方法可以使用:1. IN或NOT IN,2. EXIST或NOTEXIST,

資料庫的連線連線連線連線

Students表和Advisors表 一、內連線 按照Advistor_ID進行表的合併,合併後的資料只有兩個表中Advistor_ID都有的值,對應的行    二、左外連線 按照Advistor_ID進行的左外連接合並,保證表Students中Advistor_ID的

Mysql 一條SQL語句實現批量更新資料,update結合casewhen和then的使用案例

如何用一條sql語句實現批量更新?mysql並沒有提供直接的方法來實現批量更新,但是可以用點小技巧來實現。 複製程式碼 程式碼如下: UPDATE mytable SET myfield = CASE id WHEN 1 THEN

常用SQL語句例項(含過濾及刪除重複資料匯入匯出資料等)

本文整理一些常用的SQL語句例項(如過濾重複資料、刪除重複資料、匯入匯出資料等),收藏備用,不斷更新中……。歡迎訪問作者網站獲取最新版:http://hi.wonsoft.cn -------------------------------第一部份 高階技巧-------

sql查詢之左連線連線,內連線以及連線的使用(測試常見面試題歐)

**表資料:** /* SQLyog v10.2 MySQL - 5.1.62-community : Database - sience ************************************************************

sql語句左連接連接區別

一起 主鍵 pan 查詢 的區別 右連接 通過 sql語句 一個表 首先,左連接和右連接指的都是外連接 外連接的情況指一個表中有一個字段是另一個表的主鍵時 比如商品表裏除了商品id還有一個分類id名為cid,這個cid就是商品分類表的主鍵,我們需要一起查詢這兩個表的內容,通

連線連線,內連線連線的4者區別

基本定義:   left join (左連線):返回包括左表中的所有記錄和右表中連線欄位相等的記錄。   right join (右連線):返回包括右表中的所有記錄和左表中連線欄位相等的記錄。   inner join (等值連線或者叫內連線):只返回兩個表中連線欄位相

Day055--MySQL--外來鍵的變種,表與表的關係,單表查詢,多表查詢, 內連線,左右連線,連線

表和表的關係 ---- 外來鍵的變種 * 一對多或多對一 多對多 一對一 如何找出兩張表之間的關係 分析步驟: #1、先站在左表的角度去找 是否左表的多條記錄可以對應右表的一條記錄,如果是,則證明左表的一個欄位foreign key 右表一個欄位(通常是id) #2、再站在右表的角度去找 是否右表

mysql 連線報錯

mysql 不支援 直接寫full outer join 或者 full join來表示全外連線但是可以用left right union right 代替。 全外連線圖(非原創圖) 下面的是全外連線例子: select * from table a A(A為別名)LEFT JOI

關於多表查詢sql常用的連線語句:左連線連線連線

1)內聯接:    內聯接使用比較運算子(使用像 =  或 <> 之類的比較運算子)根據每個表共有的列的值匹配兩個表中的行,根據這兩張表中相同列的條件,得出其      交集。例如:  

SQL查詢左連線連線連線

1、左連線的定義:是以左表為基礎,根據ON後給出的兩表的條件將兩表連線起來。結果會將左表所有的查詢資訊列出,而右表只列出ON後條件與左表滿足的部分。左連線全稱為左外連線,是外連線的一種。 下邊以A表和B表為例子,A、B之間的左連線條件為:ano=bno;查詢語句為:SELECT * FROM `

SQL連線

1.前言 本文將實現兩表的多種連線方式,先存在兩個表如下所示: 2.內聯接 典型的聯接運算,包括在查詢語句中使用像 =  或 <> 之類的比較運算子。內聯接使用比較運算子根據每個表共有的列的值匹配兩個表中的行。 例如,檢索 a 和 b 表中 a 表中 id 與 b 表中 pi

SQL的四種連線-左連線連線連線連線

聯接條件可在FROM或WHERE子句中指定,建議在FROM子句中指定聯接條件。WHERE和HAVING子句也可以包含搜尋條件,以進一步篩選聯接條件所選的行。     聯接可分為以下幾類:     1、內聯接(典型的聯接運算,使用像 =  或 <> 之類的比較運算

設定更改root密碼連線mysqlmysql常用命令mysql使用者管理常用sql語句mysql資料庫備份恢復

一、設定更改root密碼 首次直接使用mysql會提示‘該命令不存在’,原因是還沒有將該命令加入環境變數,如果要使用該命令,需要使用其絕對路徑:/usr/local/mysql/bin/mysql,為了方便,先將其加入系統環境變數: [[email p