《SQL必知必會》系列 03

2021-10-02 20:25:16 字數 3799 閱讀 2172

question: 要怎樣努力,才能成為很厲害的人?

answer: 如果你注定要成為厲害的人,那問題的答案就深藏在你的血脈裡;如果你注定不是厲害的人,那你便只需要做好你自己。

為什麼對這個問題印象最深刻?因為曾經的自己非常渴望成為與眾不同很厲害的人,而且還讀了很多成功學的書,很擅長給自己打雞血,也是乙個非常熱血向上的青年。想起了幾年前讀大學時,曾代表學校來北京參加全國大學生英語辯論賽,那時是乙個帶隊老師帶著我和另乙個隊友。

記得下了火車剛到北京站的時候,好久沒到大城市的自己,望著人潮人海的北京站,對老師說了一句當時的心裡話,大意是:我以後要麼成為特別厲害的人,造福社會,要麼成為很壞的人,破壞社會。

總之就是那時的自己認為自己以後絕非尋常之輩,一定會有所作為。言語間透漏著一種初生牛犢不怕虎的感覺,聽上去很中二,但也很真實。老師很平淡的回了我一句:這兩種情況發生的概率會很小,很大可能你會成為乙個非常普通的人。然而當時的自己並不相信老師的話。

多年以後,不得不承認,老師說的還是成了現實。這個社會和世界不停的在矯正我最初的想法,讓我逐漸認識到自己本來就是乙個普通人,也做不出什麼驚天動地的大事情。

至於成為乙個厲害的人的這個想法,是什麼時候開始漸漸淡出我的世界呢?是勵志類書在我的閱讀書單裡慢慢減少的時候。剛畢業那會還常常看各種勵志的書,非常迷戀一些類似《精進》《躍遷》這些很硬核的書,後來慢慢看的就少了。當然不是書寫的不好,而是當時的自己沒有能力去消化。現在呢,看專業書會更多一點。

想起了王小波很經典的一句話:

那一天我21歲,在我一生的**時代,我有好多奢望。我想愛,想吃,還想在一瞬間變成天上半明半暗的雲。 後來我才知道,生活就是個緩慢受錘的過程,人一天天老下去,奢望也一天天消失,最後變得像挨了錘的牛一樣。可是我21歲時沒有預見到這一點。我覺得自己會永遠生猛下去,什麼也錘不了我.——《**時代》

生活是個緩慢受錘的過程,那一年恰好我也21歲,這些年自己曾經那些稜角好像是在慢慢被磨平,但是心中的渴望卻是以另外一種方式出現。因為後來讀了一本《優勢識別器2.0》之後,自己才明白為什麼當初會有那樣的想法。其實並不是必須要成為乙個很厲害的人,而是與生俱來對於成就感的追求會更多一些。

《優勢識別器2.0》是美國著名蓋洛普公司研發出來的一種測試每個人與生俱來的5種優勢的書,自己排在前五的是:思維,分析,學習,成就,搜尋。測試結果中對於成就主題的分析,就很好的解釋了自己為什麼會希望做出很多事情,因為成就感對於不同的人來說本身重要程度就不同,有些人的渴望程度會更高,而自己就屬於那一撥人中的其中乙個。

「如果你注定要成為厲害的人,那問題的答案就深藏在你的血脈裡;

如果你注定不是厲害的人,那你便只需要做好你自己」。

不再追求成為乙個厲害的人,而是去做好自己。但真正做好自己,其實也並不是一件容易的事。前提是要先認識自己,知道自己想要成為什麼樣的人。而這需要長時間的思考和實踐,閱讀和反思。不過也沒關係,來日方長,時間會把我們帶到自己想去的地方。

ok,開始今天的讀書筆記。

《sql必知必會》第十一章~第十二章

第十一章:使用子查詢

這一章主要介紹了什麼是子查詢以及如何使用子查詢。子查詢的含義就是把乙個查詢語句當作另乙個查詢語句中的一部分,可以是查詢結果範圍,也可以是檢索條件,常常使用in關鍵字。比如下面這段**:

select cust_name, cust_contact from customers where cust_id in ( select cust_id from order where order_num in (select order_num from orderitems where prod_id =『rgan01』));

實際開發中,在where 子句中使用子查詢能夠編寫出功能很強且很靈活的sql語句。對於能巢狀的子查詢的數目沒有限制,不過在實際使用時由於效能的限制,不能巢狀太多的子查詢。而且,作為子查詢的select語句只能查詢單個列,如果檢索多個列將返回錯誤。另外還可以使用子查詢作為計算字段,比如下面這段**:

select cust_name, cust_state, (select count(*) from orders where orders.cust_id = customers.cust_id) as orders from customers order by cust_name;

但其實,上面的**並不是解決這種資料檢索的最有效的辦法,後面還會學習join查詢,那時的檢索效率會更高。

第十二章 聯結表

這一章介紹了什麼是聯結以及如何使用聯結進行查詢。讀完這章後,對關係型資料庫有了更深的理解。關係型資料庫的關鍵在於各個表之間可以通過某些共同的值而彼此關聯,這樣做的目的就在於增強資料庫的可伸縮性。

這一點可以使資料庫能夠適應不斷增加的工作量而不垮掉。這也是關係型資料庫優於非關係型資料庫的地方,伸縮性更好。書中有乙個很好的例子解釋了關係表:

有乙個包含產品目錄的資料庫表,其中每類物品佔一行。對於每一種物品,要儲存的資訊包括產品描述,**,以及生產該產品的**商。 現在有一**商生產的多種物品,那麼在何處儲存**商名,位址,聯絡方法等**商資訊呢?將這些資料與產品資訊分開儲存的理由是:

同一**商生產的每個產品,其**商資訊都是相同的,對每個產品重複此資訊既浪費時間又浪費儲存空間;

如果**商資訊發生變化,例如**商遷址或者**號碼變動,只需修改一次即可;

如果有重複資料(即每種產品都儲存**商資訊),則很難保證每次輸入該資料的方式都相同。不一致的資料在報表中就很難利用。

關鍵是,相同的資料出現多次絕不是一件好事,這是關聯式資料庫設計的基礎。關係表的設計就是要把資訊分解成多個表,一類資料乙個表。

所以這個例子中可以建兩個表:乙個儲存**商資訊,另乙個儲存產品資訊。

想起了上個月自己在專案中也需要設計資料表,需要儲存的資料是使用者上傳檔案的資訊和檔案內容的具體資訊。本來自己打算把它們都儲存到一張表中,但是在和一位經驗豐富的同事溝通完之後,決定用兩個表儲存。

乙個是file表,儲存檔案的檔名,上傳人,上傳日期等資訊,另乙個是file_detail表,用來儲存檔案中具體item的資訊,同時也包含file的id, 起到關聯的作用。現在終於理解了當初為什麼要用兩張表,這樣在進行具體增刪改查時,可以根據需求的不同很清晰的找到需要的資料。

那麼問題就來了,將資料分解到不同的表中,如何才能用一條select語句就檢索出資料呢?答案就是使用聯結,它是一種機制,用來在一條select語句中關聯表。

如何建立聯結?-----指定要聯結的所有表以及關聯它們的方式即可。請看下面**:

select vend_name, prod_name, prod_price from vendors,products where vendors.vend_id = products.vend_id;

使用where關鍵字建立聯結是一種檢索方式,除此以外還有join關鍵字。使用where建立的聯結是一種等值聯結,它基於兩個表之間的相等測試,也被稱為內聯結(inner join), 請看下面**:

select vend_name, prod_name, prod_price from vendors inner join products on vendors.vend_id = products.vend_id;

除了聯結兩個表以外,還可以聯結多個表,例如:

select prod_name, vend_name,prod_price, quantity from orderitems, products, vendors where products.vend_id = vendors.vend_id and orderitems.prod_id=products.prod_id and order_num =20007;

當然,在實際運用中要考慮效能的因素,聯結多個表的方式可能會非常耗費資源,因此應該多注意,不要聯結不必要的表,因為聯結的表越多, 效能下降的越厲害。當然,除了inner join這種聯結方式,還有其它的聯結,我們下回再繼續分享。

以上就是今天分享的內容。

感謝閱讀,週末愉快~

SQL必知必會

資料庫 儲存有組織的資料的容器。資料庫管理系統 dbms 資料庫軟體,資料庫是通過dbms建立和操縱的容器。表 某種特定資料型別的結構化清單。資料庫中的每個表都有自己的名字,且唯一。不同的資料庫可以使用相同的表名。表的特性 模式 資料在表中如何儲存,儲存什麼樣的資料,資料如何分解。模式可以用來描述資...

《sql必知必會》筆記

資料庫 儲存有組織的資料的容器 通常是乙個檔案或一組檔案 注意誤用混淆 資料庫軟體被稱為dbms,資料庫是通過dbms建立和操縱的容器 模式 關於資料庫和表的布局及特性的資訊。主鍵 一列或一組列,其值能夠唯一標識表中的每一行。多條sql語句必須以 分隔。sql語句不區分大小寫,select和sele...

SQL必知必會2

資料庫伺服器有 兩種儲存介質 分別為硬碟和 記憶體。記憶體屬於臨時儲存,容量有限,且當發生意外時 如斷電或者發生故障重啟 會造成資料丟失 硬碟相當於永久儲存介質,這也是為什麼我們需要把資料儲存到硬碟上。資料庫中管理儲存空間的基本單位是頁 page 不論是讀一行還是多行,都是講這些行所在的頁進行載入 ...