“SQL 被低估了!”
一直以來,結(jié)構(gòu)化查詢語言 SQL 憑借著快速、無需編碼、可移植性、明確界定標(biāo)準(zhǔn)等特性深受開發(fā)者喜愛。且自從被加入 TIOBE 編程語言排行榜以來,SQL 就一直保持在 Top 10 的范圍內(nèi)。
對(duì)此,你怎么看?
以下為譯文:
在我的職業(yè)生涯中我學(xué)習(xí)了很多技術(shù),但是我覺得最實(shí)用的技術(shù)當(dāng)屬 SQL。對(duì)我來說,SQL 是最有價(jià)值的技術(shù),原因有以下幾個(gè)方面:
SQL 在不同的職責(zé)和學(xué)科中都很有價(jià)值。
只需學(xué)習(xí)一次,一勞永逸。
你可以成為超級(jí)英雄。掌握這門技術(shù),會(huì)讓你變得非常強(qiáng)大,因?yàn)楹芏嗳硕紱]能熟練掌握這門技術(shù)。
SQL 是一個(gè)可以隨處使用的工具
無論你的職責(zé)是什么,你都可以通過 SQL 讓你工作變得更輕松。目前作為一名產(chǎn)品經(jīng)理,我的工作重心在于查看數(shù)據(jù)、分析我們?cè)诋a(chǎn)品方面的影響以及塑造產(chǎn)品規(guī)劃藍(lán)圖。如果我們剛剛發(fā)布了一個(gè)新功能,那么相關(guān)的數(shù)據(jù)(比如是否有人查看這個(gè)功能等)可能都保存在關(guān)系數(shù)據(jù)庫(kù)中。如果我正在追蹤一些關(guān)鍵性的指標(biāo)(例如月度增長(zhǎng)),那么很可能這些數(shù)據(jù)也保存在關(guān)系數(shù)據(jù)庫(kù)中。另外,我們所有的工作(例如系統(tǒng)記錄)都需要使用 SQL。掌握如何使用 SQL 可以為我節(jié)省大量的工作,因?yàn)槲覠o需向他人詢問具體的數(shù)字。
但是,即使在成為產(chǎn)品經(jīng)理之前,我也會(huì)使用 SQL 來了解系統(tǒng)內(nèi)部的情況。作為一名工程師,通常我可以通過 SQL 更快地獲取我想要的信息,而無需使用 Ruby 或 Python 編寫腳本。當(dāng)我的 webapp 變得非常遲緩時(shí),我必然需要了解其所執(zhí)行的 SQL 以及優(yōu)化的方法。當(dāng)然,這遠(yuǎn)遠(yuǎn)超出了對(duì) SQL 基本的理解……但是為查詢添加索引就可以解決問題,而無需增加緩存,這還是非常值得花費(fèi)額外的時(shí)間學(xué)習(xí)。
SQL 的知識(shí)具有持久性
我記得大約在20年前,我創(chuàng)建了第一個(gè)網(wǎng)頁(yè)。我感覺非常欣喜,還加入了一些 Javascript 來強(qiáng)化頁(yè)面,提示用戶點(diǎn)擊是/否或提供一些輸入。后來,大約在10年前,jQuery 問世了,雖然有時(shí)它很冗長(zhǎng),但是學(xué)習(xí)新功能可以讓頁(yè)面整體上更加美觀,所以我重新學(xué)習(xí)了 JS 的 jQuery 方法。再到后來,Angular - > React / Ember 相繼出現(xiàn),現(xiàn)在為了將基本的 Javascript 引入我的網(wǎng)站,我需要一整套的流程,而現(xiàn)實(shí)情況是我所做的仍然只是讓用戶點(diǎn)擊是/否——與20年前一樣。
相反,SQL 卻沒有太多改變。雖然它已經(jīng)發(fā)生了改變——成為了現(xiàn)代的 SQL,但是我仍然認(rèn)為與其他技術(shù)相比,這點(diǎn)變化幾乎微不足道。沒錯(cuò),每隔幾年就會(huì)一個(gè)新的標(biāo)準(zhǔn)問世,偶爾還有新的內(nèi)容(比如支持窗口函數(shù)或CTE),但是 SQL 的基礎(chǔ)知識(shí)始終如一。只需學(xué)習(xí)一次 SQL,你就可以在工作中反復(fù)使用,而無需重新學(xué)習(xí)。請(qǐng)不要誤會(huì),我喜歡學(xué)習(xí)新的東西,但我寧愿學(xué)習(xí)一些真正的新東西,而不僅僅是完成同樣任務(wù)的另一種方法。
SQL 的獨(dú)一無二
大多數(shù)應(yīng)用程序開發(fā)人員都未能熟練地掌握 SQL,他們沒有認(rèn)真學(xué)習(xí)這項(xiàng)技術(shù)。正因?yàn)檎嬲莆?SQL 的人非常少,所以可能你看起來更加出眾。我原來的公司擁有數(shù)百名的工程師,每周都有好多人(從初級(jí)工程師到高級(jí)首席工程師)來問我:“你能幫我看看這個(gè)查詢?cè)撛趺磳憜?#xff1f;”因?yàn)槟阏莆樟四稠?xiàng)很少人掌握的技術(shù),所以你可以幫助別人,而當(dāng)你遇到困難需要他們幫助時(shí),他們也會(huì)義不容辭。
如果你還未能精通 SQL 的話,或許可以馬上行動(dòng)起來。
你怎么看?
對(duì)此,網(wǎng)友們也各抒己見:
評(píng)論1:
SQL 是我見過的最令人嘆為觀止的一個(gè)概念。它有將近五十年的歷史,而且沒有絲毫要被取代的跡象。我們創(chuàng)造無數(shù)的其他技術(shù)來存儲(chǔ)和處理數(shù)據(jù),但似乎我們總是在設(shè)法利用這些技術(shù)(例如 Hive,Presto,KSQL等)重建 SQL。
我在經(jīng)營(yíng)一家創(chuàng)業(yè)公司,為客戶構(gòu)建分析基礎(chǔ)架構(gòu)。我們非常重視 SQL,而本文的內(nèi)容非常真實(shí)。
與普通的軟件工程師相比,分析師和數(shù)據(jù)科學(xué)家在工作中編寫的 SQL 越來越多。
MMP 數(shù)據(jù)倉(cāng)庫(kù)(redshift,bigquery,snowflake等)的出現(xiàn),使得即使預(yù)算有限的公司也能夠使用 SQL 來存儲(chǔ)和查詢大量數(shù)據(jù)。SQL 比以往任何時(shí)候都更強(qiáng)大,更有價(jià)值。
如果注意觀察某個(gè)普通的企業(yè),你會(huì)發(fā)現(xiàn)大多數(shù)軟件工程師都不擅長(zhǎng) SQL。他們?cè)趺茨苓@樣?大多數(shù)復(fù)雜查詢都是分析查詢。ORM 可以處理應(yīng)用程序代碼需要處理的大多數(shù)基本功能。
但是,本文沒有提到一點(diǎn):許多后臺(tái)的工程師已經(jīng)抽象出了 SQL,當(dāng)然還有前端和移動(dòng)。所以即便你不太了解 SQL 也可以成為一名優(yōu)秀的開發(fā)人員。
另一方面,擁有初級(jí)或中級(jí)分布式文件系統(tǒng)、流媒體數(shù)據(jù)或各種其他 NoSQL技術(shù)知識(shí)的“數(shù)據(jù)工程師”涌現(xiàn)了出來。通常他們對(duì)原始 SQL 的了解甚至比初級(jí)工程師更少,因?yàn)?SQL 位于他們強(qiáng)大的數(shù)據(jù)工具的底層。
但是,如果你真正掌握了 SQL,再加上如今掌握這項(xiàng)技術(shù)的少之又少,所以你可以擁有巨大的權(quán)力。可能比以往任何時(shí)候都強(qiáng)大。
評(píng)論2:
眾所周知,SQL 是關(guān)系數(shù)據(jù)庫(kù)語言,其基礎(chǔ)是關(guān)系代數(shù)與集合論,因?yàn)橛辛诉@樣強(qiáng)大的后盾與堅(jiān)固的基礎(chǔ),所以 SQL 可以經(jīng)受住時(shí)間的考驗(yàn)而長(zhǎng)久不衰。也正是因?yàn)檫@個(gè)原因,歷經(jīng)多年乃至在不同的職責(zé)下你也不需要重新學(xué)習(xí)。
但是,這并不是說 SQL 就是完美的,事實(shí)上 SQL 距離“完美”還差得非常遠(yuǎn)。因?yàn)?SQL 還有很多未能很好地支持,甚至背離關(guān)系模型之處。
舉個(gè)最簡(jiǎn)單的例子,關(guān)系模型基于二值邏輯(即真/假),而 SQL 是三值邏輯:真、假、NULL。平白多出一個(gè) NULL,其引發(fā)的問題也非常多,例如:
(A = B) OR (A<>B)
很顯然這是一個(gè)恒真表達(dá)式,要么相等,要么不相等,還有第三種選擇嗎?有!在 SQL 中,如果 A 為 NULL 或 B 為 NULL,則這個(gè)表達(dá)式的結(jié)果為 NULL。
除此之外,還有 SQL 中有重復(fù)數(shù)據(jù),但是集合論中沒有,重復(fù)的數(shù)據(jù)在集合中會(huì)被視作一個(gè)。
最后再說一個(gè),集合中的數(shù)據(jù)項(xiàng)沒有順序,而 SQL 表中的列有從左到右的順序。
所以,我們希望 SQL 能夠緊緊圍繞關(guān)系代數(shù)與集合論,取得更好的成長(zhǎng)與發(fā)展。
工作一到五年的程序員朋友面對(duì)目前的技術(shù)無從下手,感到很迷茫,高清思維導(dǎo)圖及相關(guān)視頻資料獲取方式關(guān)注+轉(zhuǎn)發(fā)+加群:714526711里面有阿里Java高級(jí)大牛直播講解知識(shí)點(diǎn),分享知識(shí),課程內(nèi)容都是各位老師多年工作經(jīng)驗(yàn)的梳理和總結(jié),帶著大家全面、科學(xué)地建立自己的技術(shù)體系和技術(shù)認(rèn)知!
轉(zhuǎn)載于:https://blog.51cto.com/14207296/2356982
新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎(jiǎng)!定制產(chǎn)品紅包拿不停!總結(jié)
以上是生活随笔為你收集整理的“SQL 被低估了!”的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python学习之老男孩python全栈
- 下一篇: Redis命令——键(key)