亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

SQL 多表聯合查詢的幾種方式詳解

瀏覽:155日期:2023-03-06 14:25:46
目錄
  • 前言
  • 正文
  • 內連接
  • 等值連接/相等連接
  • 自然連接
  • 自連接
  • 外連接
  • 左外連接
  • 右外連接
  • 全外連接/完全外連接
  • 交叉連接/笛卡爾積
  • 總結

前言

連接查詢是關系數據中最主要的查詢,包括內連接、外連接等。通過連接運算符可以實現多個表查詢。

正文

連接查詢主要分為三種:內連接、外連接、交叉連接。

內連接

使用比較運算符(包括=>、<、<>、>=<=、!>!<)進行表間的比較操作,查詢與連接條件相匹配的數據。根據所使用的比較方式不同,內連接分為等值連接、自然連接和自連接三種。

關鍵字 INNER JOIN

等值連接/相等連接

使用”=”關系將表連接起來的查詢,其查詢結果中列出被連接表中的所有列,包括其中的重復列

SELECT    PM_ACT_JOB_RLS.*, PM_ACT_RLS.*FROM    PM_ACT_JOB_RLSINNER JOIN PM_ACT_RLS ON PM_ACT_JOB_RLS.RlsPK = PM_ACT_RLS.RlsPK

自然連接

等值連接中去掉重復的列,形成的連接

SELECT    PM_ACT_JOB_RLS.JobPK,    PM_ACT_RLS.RlsPK,    RlsNameFROM    PM_ACT_JOB_RLSINNER JOIN PM_ACT_RLS ON PM_ACT_JOB_RLS.RlsPK = PM_ACT_RLS.RlsPK

自連接

如果在一個連接查詢中,設計到的兩個表都是同一個表,這種查詢稱為自連接查詢。

--c1、c2邏輯上是兩張表,物理上是一張表SELECT    c1.CategoryID,    c1.CategoryNameFROM    [dbo].[Category] c1INNER JOIN [dbo].[Category] c2 ON c1.[CategoryID] = c2.[ParentID]

外連接

內連接只返回滿足連接條件的數據行,外連接不只列出與連接條件相匹配的行,而是列出左表(左外連接時)、右表(右外連接時)或兩個表(全外連接時)中所有符合搜索條件的數據行。外連接分為左外連接、右外鏈接、全外連接三種。

左外連接

返回左表中的所有行,如果左表中行在右表中沒有匹配行,則在相關聯的結果集中右表的所選擇字段均為NULL

關鍵字 LEFT [OUTER] JOIN

--左外連接  --1679條數據SELECT    me.*,    mo.*FROM    MM_LOTS_EXT AS meLEFT OUTER JOIN MM_LOT_OPERATIONS AS mo ON me.LotID = mo.SerialNumber

注意:

left join中關于where和on條件的幾個知識點:

  • 多表left join是會生成一張臨時表,并返回給用戶
  • where條件是針對最后生成的這張臨時表進行過濾,過濾掉不符合where條件的記錄
  • on條件是對left join的右表進行條件過濾,但依然返回左表的所有行,右表中沒有的補為NULL
  • on條件中如果有對左表的限制條件,無論條件真假,依然返回左表的所有行,但是會影響右表的匹配值。也就是說on中左表的限制條件只影響右表的匹配內容,不影響返回行數。

實例:

SELECT g.*,f.* FROM groups g LEFT JOIN factor f ON f.groupId = g.id and f.isDel=0 where g.isDel=0

結論:

1.對左表添加條件限制需在where條件中添加,不能放到on后面
2.對右表添加條件限制需放到on后面,在where條件中添加會有數據行數差異出現問題。

右外連接

返回右表中的所有行,如果右表中行在左表中沒有匹配行,則在左表中相關字段返回NULL值。

關鍵字 RIGHT [OUTER] JOIN

--右外連接  --209條數據SELECT    me.*,    mo.*FROM    MM_LOTS_EXT AS meRIGHT OUTER JOIN MM_LOT_OPERATIONS AS mo ON me.LotID = mo.SerialNumber

全外連接/完全外連接

返回兩個連接中所有的記錄數據,是左外連接和右外連接的并集。

關鍵字 FULL [OUTER] JOIN

--全外連接  --1816條數據 SELECT    me.*,    mo.*FROM    MM_LOTS_EXT AS meFULL OUTER JOIN MM_LOT_OPERATIONS AS mo ON me.LotID = mo.SerialNumber

交叉連接/笛卡爾積

兩個表做笛卡爾積,得到的結果集的行數是兩個表的行數的乘積。

關鍵字 CROSS JOIN

--笛卡爾積 (cross join后加條件只能用where,不能用on)  --45條數據(9*5)SELECT    *FROM    PM_ACT_JOB_RLSCROSS JOIN PM_ACT_RLS

注意:帶有where條件的子句,往往會先生成兩個表行數乘積的數據表,然后從根據where條件從中選擇。

當數據量比價大的時候,笛卡爾積操作會很消耗數據庫的性能

總結

連接查詢是關系型數據庫中的一個重要標志,這次和大家一起復習多表查詢的幾種操作,希望給您帶來幫助!

到此這篇關于SQL 多表聯合查詢的幾種方式的文章就介紹到這了,更多相關SQL 多表聯合查詢內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: MsSQL
主站蜘蛛池模板: 国产亚洲精品激情一区二区三区 | 国产精品视频国产永久视频 | 亚洲国产精品免费 | 亚洲刺激视频 | 秘书高跟黑色丝袜国产91在线 | 中文字幕日韩欧美一区二区三区 | 91久久青青草原免费 | 国产在线观看xxxx免费 | 大学生久久香蕉国产线看观看 | 免费视频爱爱太爽在线观看 | 影音先锋5566手机在线播放 | 在线播放亚洲美女视频网站 | 青草青草伊人精品视频 | 色综合五月婷婷 | 98国产精品永久在线观看 | 色综合夜夜嗨亚洲一二区 | 欧美一级黄色大片 | 国产色婷婷视频在线观看 | 日韩欧美二区 | 国产亚洲一区二区三区在线观看 | xxxx久久 | 一区二区三区欧美日韩 | 免费国产成人 | 玖玖国产在线观看 | 性感美女在线喷水 | 日韩美女一区 | 亚洲欧美国产精品久久久 | 一级艳片 | 人人做天天爱夜夜爽中字 | 欧美三级黄 | 欧美一区二区三区视频 | 91外围 | 亚洲无吗在线视频 | 在线观看精品自拍视频 | 免费黄色一级大片 | 精品香蕉伊思人在线观看 | 国产原创在线视频 | 黄色理论视频 | 欧美高清激情毛片 | 日韩黄色小视频 | 男人和女人全黄一级毛片 |