學個資料庫竟然有笛卡爾,不會還有牛頓吧?

2020-11-29 劉小愛

今天是劉小愛自學Java的第64天。

感謝你的觀看,謝謝你。

話不多說,繼續開始資料庫的學習:

昨天學習了多表設計,事實上我們所需要的數據,通常會來自多張表。

那麼如何使用sql語句一次性查詢多張表的數據?

這是我們應該去考慮的問題,為了解決這個問題,今天繼續學習多表查詢。

一、笛卡爾積與內連接

萬萬沒有想到,學個資料庫竟然還能接觸到笛卡爾積?後面不會學著學著還會出現牛頓吧……

牛頓、拉格朗日、泰勒、傅立葉……簡直就是大學噩夢般的存在。

現在有兩張表:部門表、成員表。

那如何查詢出一個結果既顯示成員又顯示部門呢?

就需要引入笛卡爾積的概念:

格式:select * from member,department;

查出來的數據就相當於成員表與部門表的乘積。

也就是將成員表裡的每一條數據都和部門表中的每一條匹配連接。

成員表一共有7條數據部門表一共有4條數據那根據笛卡爾積查詢出來的數據一共4*7=28條那麼現在問題來了:這就變成排列組合了,查詢到的結果冗餘。如何避免結果冗餘?

將這兩張表相同的地方作為查詢條件:

①隱式內連接

select * from+表A+表B+where+A與B相交的部分;

②顯示內連接

select * from+表A+inner join+表B+on+A與B相交的部分;

inner join,也就是內連接的意思。on,在這裡就相當於where,後面接查詢條件,其中on也可以替換成where。那這兩者有沒有區別呢?

基本沒區別,就只是語法不一樣,個人覺得:

第一種語法更好理解。第二種語法看上去更加地專業。二、三種外連接

外連接又分為左外連接和右外連接。

左外連接:顯示左表的全部記錄以及右邊符合連接條件的記錄。右外連接:原理同上,只不過表相反。

①左外連接

select * from+表A+left outer join+表B+on+A與B相交的部分;

left,左邊outerjoin:外連接也就是左邊表A全部的數據,同時加上表B中與之相交的部分。

②右外連接

select * from+表A+right outer join+表B+on+A與B相交的部分;

right ,右邊也就是右邊表B全部的數據,同時加上表A中與之相交的部分。

③全外連接

select * from+表A+full outer join+表B+on+A與B相交的部分;

全外連接裡的關鍵單詞為full。

但是這個語法在MySQL資料庫中不支持,Oracle資料庫才支持。那MySQL中是如何辦的?

就是將左外連接和右外連接結合起來了。

三、四種連接方式圖解

表A與表B,其中它們相互重合的部分為C。

四種連接方式圖解如下:

①內連接

就相當於C。

將這兩張表重合的部分查詢出來。

②左外連接

就相當於A+C。

左邊的表加上另一張表與之相交的部分。

③右外連接

就相當於C+B。

右邊的表加上另一張表與之相交的部分。

④全外連接

就相當於A+B+C。

兩張表的數據相結合,其中相關聯的部分要結合起來。在MySQL資料庫中全外連接是如何表示的?

全外連接=左外連接+右外連接;

所以多了一個C,那麼就要去重。

語法格式也就是左外連接和右外連接相加。

union :去掉重複的數據。union all :不去掉重複的數據。其中注意第一條查詢語句不用加分號。四、關聯子查詢

現有一個需求:要查詢出年齡最小的部門成員信息。

①常規方法

先查詢出最小的年齡是多少(通過聚合函數)

再根據查詢到的最小年齡查詢對應的成員信息

這樣做自然是能解決需求的,但是有一個問題:

查詢要訪問資料庫兩次,並且第二次查詢需要等到第一次的查詢結果出來後才能寫sql語句。②子查詢

等於是將常規方法中的兩步結合成一步了。

語法:A查詢語句作為B查詢語句的條件,那麼A查詢稱之為子查詢,B查詢稱之為主查詢。

子查詢都要寫在 () 裡,且執行要先於主查詢。

③all的用法

前面的兩個方案中都是使用了聚合函數min()來找出最小的年齡是多少。

而all也能達到這樣的目的,語法為:

age<=all(select age from member)。

翻譯過來就是:年齡小於或等於從member表中查到的所有年齡,也就是最小年齡了。

五、in、any和some的用法

昨天程式設計師表和項目表的多對多表關係。

看中間表

第一行:劉小愛開發微軟,money為10000;第二行:劉小愛開發蘋果,money為20000;……這樣看下來就一目了然。現有一個需求:

查詢money大於10000的程式設計師信息。

分析:

第一步:先從中間表coder_project中查詢出money大於10000的coder_id;

第二步:根據查詢到的coder_id查詢對應的coder信息。

學了子查詢,可以將這兩步並為一步。

子查詢查出coder_id,主查詢再查出程式設計師信息。

①In的使用

in就是表示包含子查詢查出的數據。

當子查詢結果只有一個時,可以用=,也可以用in。當子查詢結果有多個時,不可以用=,只能用in。所以說in的使用其實包含了=。

②any的使用

雖然子查詢結果有多個,我就是要用=,怎麼辦?

就可以用any,any表示任意的意思,也就是=子查詢查出的任意一個數據。

③some的使用

同any一樣的道理:也就是=子查詢查出的一些數據。some作用和any一樣。

六、as的使用

需求: 查詢money大於10000的程式設計師信息和對應的money。

思路分析

第一步:我們從中間表coder_project中可以找到滿足條件的coder_id和money,結果就是一張新的臨時表,取名temp。

第二步:根據code_id(臨時表)找出所有對應的程式設計師信息(coder表)和money(臨時表)。

①思路分析

第一步:

將查詢到的結果作為了一張臨時表temp,但是這張表本身是不存在的,我們沒法直接在第二步中用,會報錯。

temp表其實就是中間表coder_project中的一部分滿足條件的數據。

第二步:

我們需要對應程式設計師的所有信息(也就是coder.*)我們需要temp表中的money從temp表、coder表中查詢coder表中的id和temp表中的coder_id相同,也就是內連接相等的部分。②as定義臨時表

利用子查詢的思路,將第一步的結果作為子查詢,然後給它起一個別名,也就是temp表,這樣就能直接使用了。

思路捋清晰了,as定義臨時表也就很好懂了。

最後

給這兩天的學習做一個總結

謝謝你的觀看。

如果可以的話,麻煩幫忙點個讚,謝謝你

相關焦點

  • 笛卡爾與培根傳播了新的宇宙知識,牛頓建立光學,發現萬有引力
    笛卡爾與培根傳播了新的宇宙知識,牛頓建立光學,發現萬有引力大家應該都對牛頓、笛卡爾、伽利略、培根這些偉人們不陌生吧,他們的出現使得世界的天文、數學、物理等眾多科學方面向前邁進了一大步。那麼今天,小編就來給大家講一講有關於歐洲的科學革命的事情。快點跟我一起看一看吧!
  • 「牛頓第一定律」竟然是由伽利略首先發現的,那牛頓呢?
    實驗分析:銅球從左邊斜面滑下之後衝上右邊的斜面我們很好理解,就跟坐過山車似的,從一個坡上下來必定會衝上另一個斜坡。由於我們的斜面和銅球都非常的光滑,我們會發現銅球每次都會儘量達到與釋放高度相同的高度,可是我們讓斜面卻越來越緩,這就會導致,小球必須有過更長的路程才能達到釋放的高度。
  • 笛卡爾的悽美愛情故事,真實存在嗎?
    笛卡爾是誰?他和我們其實是「老相識」了。讀書時,我們學過平面直角坐標系,而它也叫笛卡爾坐標系,因為它是由笛卡爾創建的。另外,笛卡爾有句如雷貫耳的名言——我思故我在。沒錯,笛卡爾既是數學家,又是哲學家。據說,晚年的笛卡爾窮困潦倒,流落異鄉。窮且益堅,貧窮並不妨礙他演算數學題。某天,公主邂逅了他,贈予食物,並向他請教。然後,笛卡爾成了公主的數學老師。公主天資聰穎,進步神速。萬萬沒想到,笛卡爾和公主之間,竟然暗生情愫。國王察覺以後,很生氣,後果很嚴重。
  • 隱秘的角落劇情解析:笛卡爾的兩個故事 笛卡爾的愛心函數故事
    《隱秘的角落》笛卡爾的兩個故事《隱秘的角落》中,張東升在少年宮為學生講了笛卡爾和他浪漫的「心形線」。小編想要告訴大家的是,數學家和公主的愛情故事純屬鬼扯,根本就不存於歷史中,最多只能當個魔改的小短文看。
  • 倫敦瘟疫之年是牛頓的奇蹟之年嗎?
    吳國盛教授講述說,「蘋果神話」主要有四個來源:    第一個來源,是老年牛頓自己說的。他在去世之前的七八年間寫了一份東西,說1665年、1666年這兩年是他一輩子發明最旺盛的時期,其中有一項發明就是思考了重力延伸到月球軌道這個問題,但我們看這份手稿裡並沒有提到蘋果。
  • 我思故我在 | 笛卡爾
    笛卡爾強調科學的目的在於造福人類,使人成為自然界的主人和統治者。他反對經院哲學和神學,提出懷疑一切的「系統懷疑的方法」。所以他不會說「我看故我在」、「我聽故我在」。從這裡他悟出一個道理:我們所不能懷疑的是「我們的懷疑」。意指:我們無法去懷疑的,是我們正在「懷疑」這件事時的「懷疑本身」,只有這樣才能肯定我們的「懷疑」是有真實性的,並非虛假的產物。
  • 笛卡爾積
    什麼是笛卡爾積?笛卡爾積是指在數學中,兩個集合X和Y的笛卡尓積(Cartesian product),又稱直積,表示為X × Y,第一個對象是X的成員而第二個對象是Y的所有可能有序對的其中一個成員。笛卡爾積又叫笛卡爾乘積,是一個叫笛卡爾的人提出來的。 簡單的說就是兩個集合相乘的結果。
  • 笛卡爾,解析幾何的奠基人
    牛頓,說過:我們都是站著巨人肩膀上的。科學史中每一個不經意的發現 都有可能推到人類進步一大截,而或啟迪一群人的發明創造。某天一起吃飯,同行的人說:「人家有信仰的才好嘛!你信仰什麼我們信仰什麼,我們信仰錢,毫無意義。」這麼一說我可能覺的很對,雖然我剛畢業對於銅臭味沒那麼迷戀,乍一聽覺得不不對,怎麼能只信仰金錢。信仰金錢揣進自己的口袋總比信仰金錢揣進別人的口袋好吧。我思故我在,要唯心,認識到自我的價值。
  • 笛卡爾:雞湯勵志文的始祖
    笛卡爾在保姆的照顧下,漸漸長大,而他的父親則娶了新夫人。一如所有「後娘不善」的橋段,笛卡爾很少能見到父親。幸好,他出生在貴族家庭,生存無憂,且得到了良好的教育。笛卡爾從小是個平庸的孩子,家庭的不幸讓他沉默寡言,經常自問:「我是誰?我為什麼存在?」
  • 牛頓到底有多牛?看他如何想到引力的平方反比定律,你就知道了
    笛卡爾當時想開創新的物理學,想完成牛頓的工作,但他最終還是沒有成為牛頓這樣的人。不過笛卡爾還是提出了一些驚人的見解,為牛頓後來的工作鋪平了道路。舉個例子就是:在笛卡爾看來蘋果和月球沒有任何區別。徹底否定了亞里斯多德幾千年來認為的,天地之別的概念。這個思想啟發了牛頓,敢把月球繞地球的運動,和蘋果在地面的下落聯繫起來進行研究。其次笛卡爾認為,物體在沒有受到外力的情況下,會保持自己原有的狀態(靜止或者勻速直線運動),而且數量守恆。
  • 牛頓第一定律,在初高中是很重要的,掌握這個知識點物理將變簡單
    在初中下冊開始接觸牛頓第一定律,相信我們很多同學能夠把它背下來,但是在應用這個知識點這一塊,顯得很是生疏。這個知識點如果只是在初中學也就好了,可是到了高中還要學它。這就讓人有點難過了,不過這個知識點要理解也很簡單。我們只要抓住這3個點,這個定理是怎麼發展過來的?
  • 【物理數學】數學家的故事丨從笛卡爾到解析幾何
    今天,就讓我們走進解析幾何之父——笛卡爾了解他的故事吧!堪稱17世紀的歐洲哲學界和科學界最有影響的巨匠之一,被譽為"近代科學的始祖"。少年時期少年時期他上過一所環境優雅的耶穌會學校──尖塔中學。二十歲在普瓦提埃大學獲得法律學學位。雖然笛卡爾受過良好的教育,但他卻認為除了數學以外任何其它領域的知識皆是有懈可擊的。從此,他沒有繼續接受正規教育,而是決定漫遊整個歐洲,開闊視野,見悉世面。
  • 思想家系列——笛卡爾
    但他對所學的東西頗感失望,因為在他看來教科書中那些微妙的論證,其實不過是模稜兩可甚至前後矛盾的理論,只能使他頓生懷疑而無從得到確鑿的知識,惟一給他安慰的是數學。這裡有一段關於哲學家笛卡爾論星星的趣話。有一次笛卡爾坐在自己屋前的臺階上,正在凝視著落日後昏暗的地平線。一個過路人走近他的身旁,問道:「喂!聰明人,請問,天上有多少顆星星?」他回答道:「蠢人!
  • 其實,不能完全說是牛頓發現了萬有引力,而是歷史選擇了牛頓!
    1665年6月到1666年,恰巧倫敦爆發瘟疫,學校停課了,無奈之下,牛頓只能從劍橋大學回到老家伍耳索普村。也正是在這段安靜的時間裡,牛頓把大學裡學過的課程做了系統的整理和思考。是什麼力量使得行星圍繞著太陽運轉?又是什麼力量,讓這些星體不互相碰撞?為什麼蘋果會落到地上而不是天上?帶著這些問題,牛頓進入了冥思苦想。
  • 初中歷史-勒內·笛卡爾
    著名的法國哲學家、科學家和數學家勒內·笛卡爾於1596年出生在都蘭省海樂村。少年時期他上過一所環境優雅的耶穌會學校──尖塔中學。二十歲在普瓦提·埃大學獲得法律學學位。雖然笛卡爾受過良好的教育,但他卻認為除了數學以外,任何其它領域的知識皆是有懈可擊的。從此,他沒有繼續接受正規教育,而是決定漫遊整個歐洲,開闊視野,見悉世面。
  • 西方哲學史中的笛卡爾
    《西方哲學史中的笛卡爾》笛卡爾可以說是近代哲學的始祖,在父親死後他繼承了一筆可觀的地產,地產被他賣掉,用錢來投資,每年大概有六千法郎左右的收入,這樣他就不會因為生計而發愁。在聽到了伽利略被秘密判罪的事,笛卡爾搬到了荷蘭,住了二十年,荷蘭在當時是一個有思想自由的國度,在荷蘭最少生命安全可以得到保障,還可以出版他寫的書。笛卡爾一心只想思考,做研究,不想和麻煩靠近,總是能躲就躲。一生寫了好幾本不錯的書,有大家熟悉的《方法論》《沉思錄》等,聽說還寫了一本巨著《宇宙論》當中可能有兩個異端學說,因為怕被迫害,到死也沒有發表。
  • 這位富有浪漫情節的數學家和富有內涵的笛卡爾的心你知道多少?
    母親去世後,父親一度遠赴他鄉,把笛卡爾送給他的祖母撫養,好在父親一直提供金錢方面的幫助,這也使得他能受到良好的教育。八歲時,笛卡爾就進入耶穌英語會學校接受教育,受到了良好的古典學還有數學的訓練,1613年他去普瓦捷大學學習法律,三年後畢業了。畢業後的笛卡爾一直在找工作,工作並不是很理想,所以他決定去歐洲各國遊歷,專心研究「世界」這本大書中的智慧。
  • 鼎鼎大名的《自然哲學之數學原理》 竟然來源於一場酒館賭局
    笛卡爾寫過一些哲學著作,其中有一本就叫《哲學原理》,牛頓這本書叫《自然哲學之數學原理》,從書名上就有參照笛卡爾,他在宇宙論以及涉及物理運動方面的想法跟笛卡爾不太一樣,是有針對性的。  其次是哥白尼的日心說,牛頓毫不猶豫地採納了日心說,日心說過渡到牛頓理論中間有一個很重要的跳板就是克卜勒的行星定律。
  • 解析幾何的真正發明權,除了笛卡爾還有他,業餘數學之王——費馬
    說到解析幾何,幾乎所有的人都會想到笛卡爾。1637年,笛卡爾在他劃時代的巨作《幾何學》中論述了代數與幾何的結合,證明了幾何結構與代數運算的等價性,建立了點與實數的對應關係,把「形」(點、線、面)和「數」統一起來,建立了曲線和方程的對應關係,標誌著解析幾何的誕生,因此,笛卡爾也被後人尊稱為解析幾何之父。