濮阳杆衣贸易有限公司

主頁 > 知識庫 > SQL查詢入門(中篇)

SQL查詢入門(中篇)

熱門標簽:最新人工智能電銷機器人 成都電話外呼系統(tǒng)一般多少錢 數(shù)字匠心電銷機器人 al智能電話機器人 蘭州語音外呼系統(tǒng)運營商 如何做地圖標注圖鋪 沒聽見電話機器人幫你接 陜西電銷外呼系統(tǒng)好用嗎 銀川高頻外呼回撥系統(tǒng)多少錢
引言
在前篇文章中(SQL查詢入門(上篇),我對數(shù)據(jù)庫查詢的基本概念以及單表查詢做了詳細的解釋,本篇文章中,主要說明SQL中的各種連接以及使用范圍,以及更進一步的解釋關系代數(shù)法和關系演算法對在同一條查詢的不同思路。

多表連接簡介
在關系數(shù)據(jù)庫中,一個查詢往往會涉及多個表,因為很少有數(shù)據(jù)庫只有一個表,而如果大多查詢只涉及到一個表的,那么那個表也往往低于第三范式,存在大量冗余和異常。

因此,連接(Join)就是一種把多個表連接成一個表的重要手段.

比如簡單兩個表連接學生表(Student)和班級(Class)表,如圖: 
   12

     進行連接后如圖:

     3

笛卡爾積
      笛卡爾積在SQL中的實現(xiàn)方式既是交叉連接(Cross Join)。所有連接方式都會先生成臨時笛卡爾積表,笛卡爾積是關系代數(shù)里的一個概念,表示兩個表中的每一行數(shù)據(jù)任意組合,上圖中兩個表連接即為笛卡爾積(交叉連接)

      在實際應用中,笛卡爾積本身大多沒有什么實際用處,只有在兩個表連接時加上限制條件,才會有實際意義,下面看內連接

內連接
      如果分步驟理解的話,內連接可以看做先對兩個表進行了交叉連接后,再通過加上限制條件(SQL中通過關鍵字on)剔除不符合條件的行的子集,得到的結果就是內連接了.上面的圖中,如果我加上限制條件

      對于開篇中的兩個表,假使查詢語句如下:

復制代碼 代碼如下:

SELECT *
  FROM [Class] c
       inner join
       [Student] s
       on c.ClassID=s.StudentClassID

  可以將上面查詢語句進行分部理解,首先先將Class表和Student表進行交叉連接,生成如下表:
5

     然后通過on后面的限制條件,只選擇那些StudentClassID和ClassID相等的(上圖中劃了綠色的部分),最終,得到選擇后的表的子集

     4

當然,內連接on后面的限制條件不僅僅是等號,還可以使用比較運算符,包括了>(大于)、>=(大于或等于)、=(小于或等于)、(小于)、!>(不大于)、!(不小于)和>(不等于)。當然,限制條件所涉及的兩個列的數(shù)據(jù)類型必須匹配.

對于上面的查詢語句,如果將on后面限制條件由等于改為大于:

復制代碼 代碼如下:

SELECT *
FROM [Class] c
inner join
[Student] s
on c.ClassID>s.StudentClassID

則結果從第一步的笛卡爾積中篩選出那些ClassID大于StudentClassID的子集:

6

雖然上面連接后的表并沒有什么實際意義,但這里僅僅作為DEMO使用:-)

關系演算
上面笛卡爾積的概念是關系代數(shù)中的概念,而我在前一篇文章中提到還有關系演算的查詢方法.上面的關系代數(shù)是分布理解的,上面的語句推導過程是這樣的:“對表Student和Class進行內連接,匹配所有ClassID和StudentClassID相等行,選擇所有的列”

而關系演算法,更多關注的是我想要什么,比如說上面同樣查詢,用關系演算法思考的方式是“給我找到所有學生的信息,包括他們的班級信息,班級ID,學生ID,學生姓名”

用關系演算法的SQL查詢語句如下:

復制代碼 代碼如下:

SELECT *
FROM [Class] c
,
[Student] s
where c.ClassID=s.StudentClassID

當然,查詢后返回的結果是不會變的:

4 
外連接
假設還是上面兩個表,學生和班級.我在學生中添加一個名為Eric的學生,但出于某種原因忘了填寫它的班級ID:
7 2

當我想執(zhí)行這樣一條查詢:給我取得所有學生的姓名和他們所屬的班級:

標簽:巴彥淖爾 本溪 通化 宜春 鹽城 遼源 邢臺 朔州

巨人網(wǎng)絡通訊聲明:本文標題《SQL查詢入門(中篇)》,本文關鍵詞  SQL,查詢,入門,中篇,SQL,查詢,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《SQL查詢入門(中篇)》相關的同類信息!
  • 本頁收集關于SQL查詢入門(中篇)的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    通城县| 抚顺县| 武乡县| 忻城县| 宜宾县| 兴义市| 华蓥市| 自治县| 乌兰察布市| 河源市| 昌平区| 修武县| 新营市| 新昌县| 义马市| 天柱县| 和政县| 红原县| 游戏| 方正县| 三门县| 会泽县| 东兴市| 维西| 天津市| 南昌县| 南雄市| 电白县| 西平县| 桐柏县| 彰武县| 商城县| 大名县| 伊春市| 定日县| 城口县| 祁门县| 肥乡县| 仙游县| 牟定县| 九台市|