笛卡爾積

2021-02-21 開發者圓桌

多表SQL關聯,相信大家都會寫,但是它背後的原理,你可能並不知道,今天我們來拆解一下多表SQL關聯,如果你已經明白什麼是笛卡爾積,那麼可以略過了。

什麼是笛卡爾積?

笛卡爾積是指在數學中,兩個集合X和Y的笛卡尓積(Cartesian product),又稱直積,表示為X × Y,第一個對象是X的成員而第二個對象是Y的所有可能有序對的其中一個成員。

笛卡爾積又叫笛卡爾乘積,是一個叫笛卡爾的人提出來的。 簡單的說就是兩個集合相乘的結果。 

假設集合A={a, b},集合B={0, 1, 2},則兩個集合的笛卡爾積為{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。

看了概念,你可能無法真正理解它,因為太抽象,我們來形象化一下,看看什麼是集合A「班級表」與集合B「學生表」的乘積:

兩個集合相乘以後,班級表的數據被複製了5倍,學生表的數據被複製了3倍,兩個集合的數據被重複複製,如下圖所示就是集合A與集合B的笛卡爾乘積。

2表SQL關聯

我們將select* from [Class] c,[Student] s where c.ClassID=s.StudentClassID語句進行分步解讀。

1.首先先將班級表和學生表進行笛卡爾乘積,兩個表的數據都被重複複製,生成如下臨時表。

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

當然,where後面的限制條件不僅僅是等號,還可以使用比較運算符,包括了>(大於)、>=(大於或等於)、<=(小於或等於)、<(小於)、!>(不大於)、!<(不小於)和<>(不等於)。當然,限制條件所涉及的兩個列的數據類型必須匹配。

2+表SQL關聯

其實,你想明白了就很簡單,3張表關聯可以分解為2個兩兩關係,也就是兩兩齣結果以後,再去關聯第3張表。3張以上也是這個邏輯,複雜的問題拆解以後就會變得簡單。

最後的話


關聯使用的就是笛卡爾乘積的理論成果,但是每個資料庫廠商的實現會有所不同,多表關聯下表之間的位置關係,可能會影響到SQL的執行效率,這個要具體到不同的資料庫產品進行具體分析。

相關焦點

  • Python_笛卡爾積
    畢竟是個問題,所以還是需要解決,找了一下,這個集合有個好聽的名字,叫笛卡爾積。  笛卡爾乘積是指在數學中,兩個集合X和Y的笛卡爾積,表示為X×Y,第一個對象是X的成員而第二個對象是Y的所有可能有序對的其中一個成員 。
  • 【編程碼拉松】笛卡爾積
    笛卡爾(Decartes) 乘積又叫直積。假設集合A={a,b},集合B={0,1,2}, 則兩個集合的笛卡爾積為{(a, 0), (a,1),(a,2),(b,0), (b,1), (b,2)}。可以擴展到多個集合的情況。類似的例子有,如果A表示某學校學生的集合,B表示該學校所有課程的集合,則A與B的笛卡爾積表示所有可能的選課情況。
  • 【笛卡爾坐標/點積/叉積】圖解高等數學-下 03
    10.1 空間中的笛卡爾(直角)坐標和向量為給空間的點定位, 需要由三條相互垂直的軸. 如下圖所示軸組成右手坐標系空間的點 P 的笛卡爾坐標 (x,y,z) 可用其位置向量表示. 如下圖所示. 笛卡爾坐標也是直角坐標, 因為定義這種坐標的軸以直角相交.
  • Java-笛卡爾積實現變量拆分
    笛卡爾積集定義: 設A和B是兩個集合,存在一個集合,它的元素是用A中元素為第一元素,B中元素為第二元素構成的有序二元數組。稱它為集合A和B的笛卡爾積集,記為A×B。即:A×B={(x,y)|x∈A∧y∈B}例如: 集合A中有1和2兩個元素,為:A={1,2};集合B中有a,b,c 三個元素,為B={a,b,c};那麼笛卡爾積運算的結果數量則為6個。
  • MYSQL8.0 hash join中的笛卡爾積關聯的現象解析
    mysql> select count(*) from t1,t2,t3 where t1_id=t2_id and t2_addr=t3_addr; ++| count(*) |++|      900 |++1 row in set (30.87 sec)這個
  • 學個資料庫竟然有笛卡爾,不會還有牛頓吧?
    一、笛卡爾積與內連接萬萬沒有想到,學個資料庫竟然還能接觸到笛卡爾積?後面不會學著學著還會出現牛頓吧……牛頓、拉格朗日、泰勒、傅立葉……簡直就是大學噩夢般的存在。現在有兩張表:部門表、成員表。就需要引入笛卡爾積的概念:格式:select * from member,department;查出來的數據就相當於成員表與部門表的乘積。也就是將成員表裡的每一條數據都和部門表中的每一條匹配連接。
  • 隱秘的角落劇情解析:笛卡爾的兩個故事 笛卡爾的愛心函數故事
    《隱秘的角落》笛卡爾的兩個故事《隱秘的角落》中,張東升在少年宮為學生講了笛卡爾和他浪漫的「心形線」。小編想要告訴大家的是,數學家和公主的愛情故事純屬鬼扯,根本就不存於歷史中,最多只能當個魔改的小短文看。
  • 理性主義先驅——笛卡爾
    笛卡爾的著作是針對封建教會和經院哲學的, 因此受到了荷蘭僧侶們的迫害。 他的學說被禁止在荷蘭與法國公開傳播,1633 年他的著作被梵蒂岡教皇列入 」禁書目錄」。他於 1649 年被迫到瑞典,不久就在那裡去世。
  • 笛卡爾:何為心物二元論?
    笛卡爾通過證明上帝的存在和上帝不會欺騙我們,保證了我能夠用理性清楚分明地認識的東西,就必然是真的。有了上帝這個絕對的保證,笛卡爾就可以超出單純思想著的「我」,認識其他東西,由此建立起物質世界的存在性。笛卡爾認為,不可能是顏色、氣味、味道、聲音、硬度、質量這些東西。他用「蜂蠟」作為例子,表明這些屬性都是可以隨著溫度、溼度之類的環境因素變化的,但是一切物體不管顏色、氣味之類的東西如何變化,都必然具有「廣延」這個確定無疑的本質屬性,也就是具有長、寬、高的三維量度。
  • 思想家系列——笛卡爾
    畢業後笛卡爾一直對職業選擇不定,又決心遊歷歐洲各地,專心尋求「世界這本大書」中的智慧。1618年,笛卡爾加入荷蘭拿騷的毛裡茨的軍隊。但是荷蘭和西班牙之間籤訂了停戰協定,於是笛卡爾利用這段空閒時間學習數學。在軍隊服役和週遊歐洲期間他繼續注意「收集各種知識」,「隨處對遇見的種種事物注意思考」。在笛卡爾的時代, 拉丁文是學者的語言。
  • 我思故我在 | 笛卡爾
    在笛卡爾死於瑞典後,克裡斯蒂娜女王放棄了她的王位轉信羅馬天主教(瑞典法律要求統治者是新教教徒)。她一直聯繫的僅有的天主教徒就是笛卡爾,他曾是她的個人家庭教師。笛卡爾的主要數學成果集中在他的「幾何學」中。當時,代數還是一門新興科學,幾何學的思維還在數學家的頭腦中佔有統治地位。在笛卡爾之前,幾何與代數是數學中兩個不同的研究領域。
  • 數學家系列之笛卡爾
    這個函數就是著名的笛卡爾心形函數關於這個函數也有一段浪漫而又悽美的故事笛卡爾,17世紀時出生於法國他對於後人的貢獻相當大他是第一個發現直角坐標系的人到52歲,一直默默無名1650年,貧窮的數學家笛卡爾在斯德哥爾摩的街頭邂逅了美麗的瑞典公主克裡斯汀。
  • 笛卡爾:無知與美德
    在笛卡爾或者他的讀者懷疑自己的所有信念並探求重建它們的基礎時,遵循這種臨時道德是應該的。因為,在此期間,他不得不行動,並因此需要指導。這種臨時道德是以一條懷疑論者的普遍原則開始的:服從你自己國家的法律和習俗。
  • 笛卡爾的二元論|身體;運動
    二元論(Dualism)    在結束有關理智和天賦觀念的討論之後,有的人可能會想,笛卡爾的觀點是否對物理世界有任何解釋。當然是有的。但是在開始討論這個問題之前,我們需要去理解理智(或心靈)與人類身體的關係。笛卡爾區分了兩者,並認為兩者是獨立的實體(entities)。
  • 西方哲學史中的笛卡爾
    《西方哲學史中的笛卡爾》笛卡爾可以說是近代哲學的始祖,在父親死後他繼承了一筆可觀的地產,地產被他賣掉,用錢來投資,每年大概有六千法郎左右的收入,這樣他就不會因為生計而發愁。在聽到了伽利略被秘密判罪的事,笛卡爾搬到了荷蘭,住了二十年,荷蘭在當時是一個有思想自由的國度,在荷蘭最少生命安全可以得到保障,還可以出版他寫的書。笛卡爾一心只想思考,做研究,不想和麻煩靠近,總是能躲就躲。一生寫了好幾本不錯的書,有大家熟悉的《方法論》《沉思錄》等,聽說還寫了一本巨著《宇宙論》當中可能有兩個異端學說,因為怕被迫害,到死也沒有發表。
  • 初中歷史-勒內·笛卡爾
    笛卡爾用形上學觀點進行了一系列創造性的推論,證明出使自己滿意的結果:由於他自己的存在(我思我在),上帝才存在,外部世界才存在,這就是笛卡爾學說的起點。  笛卡爾方法具有雙重意義。  第一,他把「什麼是知識」這個認識論的基本問題置於他的哲學體系的中心。早期的哲學家力圖描寫世界的本質,但是笛卡爾教導我們這樣的問題若不和「我怎麼能知道?」
  • 笛卡爾,解析幾何的奠基人
    的笛卡爾。笛卡爾既是一個數學家又是一個哲學家 。可能科學的盡頭是神學。神學部分又不可避免是哲學。哲學所蘊含的強大邏輯又給無數科學發現提供了強大的推理依據。所以笛卡爾是那個時代的推動者。直到笛卡爾的理論出現,人們發現長方體的對角線是一個一次函數。這是一個多麼了不起的發現,從哪以後擺錘的弧線有了可以解釋的理論依據。人們可以定點推算下一個著彈點在什麼位置。
  • 浪漫的笛卡爾:數學家怎樣表白
    ◆ ◆ ◆小故事笛卡爾,17世紀時出生於法國,他對於後人的貢獻相當大,他是第一個創造發明坐標的人,可惜一生窮困潦倒。一直到52歲,仍然默默無名。當時法國正流行黑死病,笛卡爾不得不逃離法國,於是他流浪到瑞典當乞丐。
  • 理性主義哲學的開創者-笛卡爾
    利用這個辦法,這些天我看了笛卡爾的所有書籍,相關材料,我覺得我對笛卡爾的理解更加深入了。在笛卡爾的那個年代,正值中國的李闖王起義和明清交替之際,此時的歐洲大踏步走向新近代。在這樣一個大環境下賦予當時歐洲的思想精英,在對哲學玄而無用的社會批判同時,也要為人類理解自然和人自身提供堅實可靠的思想武器。
  • 泰勒對笛卡爾哲學的批判與反思
    笛卡爾分離式理性 在《自我的根源》中,泰勒將對笛卡爾哲學的批判納入自我認同之歷史性考察的框架中,認為笛卡爾哲學的「分離式理性」(A disengaged reason)在自我認同的內在化傾向中是「最重要和最具影響」的一環。