進(jìn)行連接后如圖:
笛卡爾積
笛卡爾積在SQL中的實(shí)現(xiàn)方式既是交叉連接(Cross Join)。所有連接方式都會先生成臨時(shí)笛卡爾積表,笛卡爾積是關(guān)系代數(shù)里的一個(gè)概念,表示兩個(gè)表中的每一行數(shù)據(jù)任意組合,上圖中兩個(gè)表連接即為笛卡爾積(交叉連接)
在實(shí)際應(yīng)用中,笛卡爾積本身大多沒有什么實(shí)際用處,只有在兩個(gè)表連接時(shí)加上限制條件,才會有實(shí)際意義,下面看內(nèi)連接
內(nèi)連接
如果分步驟理解的話,內(nèi)連接可以看做先對兩個(gè)表進(jìn)行了交叉連接后,再通過加上限制條件(SQL中通過關(guān)鍵字on)剔除不符合條件的行的子集,得到的結(jié)果就是內(nèi)連接了.上面的圖中,如果我加上限制條件
對于開篇中的兩個(gè)表,假使查詢語句如下:
然后通過on后面的限制條件,只選擇那些StudentClassID和ClassID相等的列(上圖中劃了綠色的部分),最終,得到選擇后的表的子集
當(dāng)然,內(nèi)連接on后面的限制條件不僅僅是等號,還可以使用比較運(yùn)算符,包括了>(大于)、>=(大于或等于)、=(小于或等于)、(小于)、!>(不大于)、!(不小于)和>(不等于)。當(dāng)然,限制條件所涉及的兩個(gè)列的數(shù)據(jù)類型必須匹配.
對于上面的查詢語句,如果將on后面限制條件由等于改為大于:
雖然上面連接后的表并沒有什么實(shí)際意義,但這里僅僅作為DEMO使用:-)
關(guān)系演算
上面笛卡爾積的概念是關(guān)系代數(shù)中的概念,而我在前一篇文章中提到還有關(guān)系演算的查詢方法.上面的關(guān)系代數(shù)是分布理解的,上面的語句推導(dǎo)過程是這樣的:“對表Student和Class進(jìn)行內(nèi)連接,匹配所有ClassID和StudentClassID相等行,選擇所有的列”
而關(guān)系演算法,更多關(guān)注的是我想要什么,比如說上面同樣查詢,用關(guān)系演算法思考的方式是“給我找到所有學(xué)生的信息,包括他們的班級信息,班級ID,學(xué)生ID,學(xué)生姓名”
用關(guān)系演算法的SQL查詢語句如下:
標(biāo)簽:巴彥淖爾 本溪 通化 宜春 鹽城 遼源 邢臺 朔州
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《SQL查詢?nèi)腴T(中篇)》,本文關(guān)鍵詞 SQL,查詢,入門,中篇,SQL,查詢,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。