資料庫表與表的連線方式
第一部分、查詢理論
連線查詢方式有:
內連線、外連線(左連線、右連線、全連線)、交叉連線
左連線和右連線的區別:
左連線以左表為基準進行查詢,左表資料會全部顯示出來,右表如果和左表匹配的資料則顯示相應欄位的資料,如果不匹配,則顯示為NULL;右連線剛好相反。
全連線就是先以左表進行左外連線,然後以右表進行右外連線。
說明:所謂的基準,就是以某張表的限制條件查詢條件為準!
具體如下:
一、內連線
內連線查詢操作列出與連線條件匹配的資料行,它使用比較運算子比較被連線列的列值。內連線分三種:
1、等值連線:在連線條件中使用等於號(=)運算子比較被連線列的列值,其查詢結果中列出被連線表中的所有列,包括其中的重複列。
2、不等連線:在連線條件使用除等於運算子以外的其它比較運算子比較被連線的列的列值。這些運算子包括>、>=、<=、<、!>、!<、!=和<>。
3、自然連線:在連線條件中使用等於(=)運算子比較被連線列的列值,但它使用選擇列表指出查詢結果集合中所包括的列,並刪除連線表中的重複列。
二、外連線
返回到查詢結果集合中的不僅包含符合連線條件的行,而且還包括左表(左外連線時)、右表(右外連線時)或兩個邊接表(全外連線)中的所有資料行。
三、交叉連線
交叉連線不帶WHERE 子句,它返回被連線的兩個表所有資料行的笛卡爾積,返回到結果集合中的資料行數等於第一個表中符合查詢條件的資料行數乘以第二個表中符合查詢條件的資料行數。例,titles表中有6類圖書,而publishers表中有8家出版社,則下列交叉連線檢索到的記錄數將等於6*8=48行。
第二部分、例項說明
- 例項
Book表:
一、內連線
select *
from [Book] as b,[Student] as s
where b.StudentId=s.StudentId
等價於如下(也可以不要關鍵字inner,此為系統預設),但這種方法不能再用left join等外連線了
select *
from [Book] as b inner join [Student] as s
ON b.StudentId=s.StudentId
這種方法還可以加and條件,並且後面可能接著用left join等外連線
結果為:
執行過程
相當於內連線的向右連線。以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的右表無條件拼接過來。這樣依次執行,這樣這種記錄便為兩個表的記錄的笛卡爾積。
相關推薦
資料庫表與表之間的連線的幾種方式
1.內連線 inner join 左右表中都出現 2.左連線 left join 左表為準 3.右連線 right join 右表為準 4. 完全連線 linq的左連線 右連線 內連線 1.左連線 var leftJoin=from LT in t
資料庫表與表的連線方式
第一部分、查詢理論 連線查詢方式有: 內連線、外連線(左連線、右連線、全連線)、交叉連線 左連線和右連線的區別: 左連線以左表為基準進行查詢,左表資料會全部顯示出來,右表如果和左表匹配的資料則顯示相應欄位的資料,如果不匹配,則顯示為NULL;右連線剛好相反。 全
資料庫表與表的三種方式
表和表之間,一般就是三種關係:一對一,一對多,多對多 1、一對一:資料庫表中的資料結構,我們用人與車一 一對應的方式來描述一對一的資料表結構,type是區分這條資料是人還是車,master對應是的主人(車的主人是哪個id,car對應的是那輛車的id) SQL程式碼中,我們
詳解資料庫表之間的連線方式
1.內聯結也就是在兩張表的相同屬性上做的等值連線即自然連線,下面用簡明的圖例進行說明 上面是我們用到兩張表,可以看到在兩張表中的相同屬性為TNO 即為教師的職工號,那麼此時如果我們想要對李誠老師的課程進行查詢就涉及到了內聯結,內聯結的兩種寫法是: -- 第一種寫法 s
六、資料庫之 表與表之間的關係
表1 foreign key 表2 則表1的多條記錄對應表2的一條記錄,即多對一 利用foreign key的原理我們可以製作兩張表的多對多,一對一關係 多對多: 表1的多條記錄可以對應表2的一條記錄 表2的多條記錄也可以對應表1的一條
yii2資料庫表與表之間的遷移
public function actionThirdEditionAdmin() { $sql = file_get_contents(__DIR__ . '/../../../../common/sql/20180815_hyz.sql');
mysql學習之資料庫管理與表管理
資料庫管理 3.1 查詢所有資料庫 mysql> show databases; 3.2 建立資料庫 mysql> create database emp -- 指定預設字符集建立資料庫 &n
Day055--MySQL--外來鍵的變種,表與表的關係,單表查詢,多表查詢, 內連線,左右連線,全外連線
表和表的關係 ---- 外來鍵的變種 * 一對多或多對一 多對多 一對一 如何找出兩張表之間的關係 分析步驟: #1、先站在左表的角度去找 是否左表的多條記錄可以對應右表的一條記錄,如果是,則證明左表的一個欄位foreign key 右表一個欄位(通常是id) #2、再站在右表的角度去找 是否右表
mysql學習【第6篇】:資料庫之表與表之間的關係 資料庫之 表與表之間的關係
資料庫之 表與表之間的關係 表1 foreign key 表2 則表1的多條記錄對應表2的一條記錄,即多對一
Mysql多表查詢常用連線方式
不同資料庫的連線查詢分類和形式稍有不同,其中Mysql連線查詢的常用形式如下。本文並沒有對連線查詢進行嚴謹詳細的分類,過於詳細反而容易迷糊。為了方便以後使用,小的死磕之後進行了簡單的歸納總結。 1.
資料庫中表與表之間建立關係(一對多、多對多)
一、一對多的關係 例:公司與員工的關係,公司為一,公司員工為多,需要在多方建立外來鍵指向一方的主鍵。 一對多讓兩個實體類之間相互表示 (1)一個公司裡面有多個員工。 private Set<yuangong> yuangongSet=new HashSet
資料庫設計(表與表之間的3種關係)
表與表之間一般存在三種關係,即一對一,一對多,多對多關係。 下面分別就三種關係講解資料庫相關設計的思路和思考過程; (1)一對一關係 例如,下面的一張表,儲存了人的相關資訊,有男有女,要求查處所有的夫妻。 sql程式碼: CREATE TABLE
資料庫表與表之間的關係
表與表之間的關係 一對一關係 在這種關係中,父表中的每一條記錄最多與子表中的一條記錄相關聯,在實際工作中,一對一關係使用的很少,因為存在一對一關係的兩個表可以簡單地合成一個表 一對多關係 這是最普通和常見的關係。在這種關係中,父表的每一條記錄都可以與子表中多條記錄相關聯,但
資料庫之 表與表之間的關係
表1 foreign key 表2 則表1的多條記錄對應表2的一條記錄,即多對一 利用foreign key的原理我們可以製作兩張表的多對多,一對一關係 多對多: 表1的多條記錄可以對應表2的一條記錄 表2的多條記錄也可以對應表1的一條記錄 一對一:
資料庫表與表中的欄位新增約束
菜類別表:表名:foodType欄位:id --主鍵欄位:typeName --類別名稱菜品種表:表名:food欄位:id --主鍵欄位:foodName --菜名欄位:foodType_id
egg(20)--資料庫中的表與表的關係
一對一的關係 一個人對應一個唯一的身份證號,即為一對一的關係為了提升查詢速度,首頁列表只查id,標題,內容,點選詳情才查詢文章的所有資訊 article_content article 一對多關係 一個班級對應多名學生,一個學生只能屬於一個班級,即為一對多關係
表與表之間關系回顧
至少 tab 通過 col 一個 otto width 字段 聯系人 ------------------siwuxie095 表與表之間關系回顧 1、一對多 (1) 1)場景:分類和商品的關系 2)描述
表與表之間的關系二
雙向 del cad lex http ID id字段 cat 刪掉 ---恢復內容開始--- 導語: 把所有的數據都存放於一張表的弊端 1:表的組織結構復雜不清晰 2:浪費空間 3:擴展性極差 一、 尋找表與表之間的關系套路: 舉例:emp 員工表 dep
約束條件 ,表與表之間的關系 和多表聯合查詢***
特點 左連接 min 想要 關系型數據庫 高效 行數據 人的 單行 一.約束條件 為了確保數據的完整性 可以給列加上約束條件 完整性的分類: 1.實體完整性 2.域完整性 3.引用完整性 1.實體完整性
0914 表與表之間的關系補充一對一關系 記錄操作 關鍵字 多對多 子查詢
之一 留下 一個 子查詢 .sql 文件 font 總監 外鍵 1 表與表之間聯系之一對一關系補充 生活中的一對一 客戶表, 學員表 通過分析 一個客戶只對應一個學員 一個學員只對應一個客戶 所以確定關系為一對一 在mysql