国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

為什么說SQL看起來像英語是一個錯誤的設(shè)計?

在數(shù)據(jù)庫領(lǐng)域,SQL是一門具有非常嚴格語法的編程語言,任何不符合規(guī)范的語句部分都會被數(shù)據(jù)庫拒絕。

SQL是什么?

  雖然我們知道SQL和英語非常相似,簡單的SQL語句可以直接閱讀為英語,但除了SQL之外,其他主要的編程語言并沒有這個特性。即使在語法中存在英語單詞,也僅用作某些概念或操作的記憶方法,而實際寫的是正式的程序語句,而不是英語句子。但SQL不同,它會以符合英語習(xí)慣的形式編寫整個語句,并添加許多不必要的介詞,例如FROM作為語句的操作主語,但必須寫在后面;在GROUP之后,還需要額外寫入BY。

  為什么會出現(xiàn)這種情況呢?最容易想到的原因是希望非程序員也能使用它。只要用戶能夠閱讀和書寫英語,他們就可以編寫SQL查詢數(shù)據(jù)。這顯然是一個好意圖,但結(jié)果并不令人滿意。絕大多數(shù)業(yè)務(wù)人員只知道如何使用SQL編寫非常簡單的查詢,而對于這樣的查詢,現(xiàn)在有強大的BI軟件可以提供更便捷直觀的可視化界面來輔助,而無需手寫語句。這種設(shè)計意圖失去了其意義。相反,經(jīng)常使用SQL進行計算的用戶仍然是程序員,而SQL仍然是一種編程語言,無論是否類似于英語,對于程序員來說理解上并沒有太大區(qū)別,相反,它可能帶來相當(dāng)大的困難。

  事實上,SQL是一門具有非常嚴格語法的編程語言,任何不符合規(guī)范的語句部分都會被數(shù)據(jù)庫拒絕。用戶必須仔細學(xué)習(xí)和遵守其語法規(guī)則,這與其他編程語言沒有太大區(qū)別。自然語言的真正優(yōu)勢在于其歧義性,它允許以較少嚴格的語法接受輸入。然而,SQL并不支持這個特性,并且在SQL發(fā)明的時代也無法實現(xiàn)這個特性。

  看起來像英語的優(yōu)勢無法體現(xiàn),但有許多缺點。設(shè)計類似自然語言的語法可能看起來很容易掌握,但實際上情況恰恰相反。

  類似自然語言的主要缺點是非過程化。程序邏輯通常是逐步執(zhí)行的,使用變量記錄中間結(jié)果以供后續(xù)步驟使用。但自然語言并非如此,兩個句子之間的引用關(guān)系依賴于少數(shù)固定的代詞,這是不準(zhǔn)確和不方便的。因此,盡可能將針對同一主語的動作拼寫到一個句子中,就無需使用代詞。在SQL中的相應(yīng)表示是在一個語句中有多個動作這樣,例如SELECT、WHERE和GROUP,它們在最初是沒有關(guān)聯(lián)的動作。在其他編程語言中,它們通常被設(shè)計為多個函數(shù),但在SQL中,它們都被設(shè)計為一個語句的子句。此外,像"WHERE"和"HAVING"這樣的詞語有著相同的意義,只是針對不同的對象,當(dāng)拼寫到一個句子中時,必須使用兩個詞來表示區(qū)別,這會造成困惑(許多初學(xué)者可能會對"HAVING"感到困惑)。

  無法用單個句子描述的復(fù)雜情況可以使用自然語言中的從句來描述。這在SQL中體現(xiàn)為子查詢,甚至可能存在多層嵌套子查詢,在其他編程語言中并不常見。此外,子查詢還應(yīng)該像自然語言一樣,每次都要使用SELECT...FROM,這會讓人感覺非常啰嗦,代碼會變得很長。

  逐步操作是降低理解和執(zhí)行難度的有效方法:本來只需要幾個步驟就能完成的事情,如果不逐步進行,將變得非常復(fù)雜??梢韵胂螅绻蠋熞笮W(xué)生只用一個方程來解決實際問題,孩子們會很苦惱(當(dāng)然,有些聰明的孩子可以處理這個問題)。

  例如,如果我們想要找出銷售額超過平均值兩倍的客戶,自然的思維方式是首先計算平均銷售額,然后找出銷售額超過兩倍的客戶,使用兩個語句來實現(xiàn)。而SQL的寫法則要求使用子查詢來寫成一個更長的句子。這個例子相對容易理解,只有兩層嵌套。但在實際情況中,涉及三層或五層嵌套的復(fù)雜查詢非常常見,這嚴重增加了理解的難度。

  不倡導(dǎo)逐步操作會導(dǎo)致單個SQL語句變得很長。程序員面臨的復(fù)雜SQL語句很少按行計算,通常是以千為單位。然而,對于相同的100行代碼,無論將其分成100個語句還是只有1個語句,它們的復(fù)雜性完全不同。這種類型的代碼很難理解,一旦最終編寫完成,兩個月后,程序員自己也無法理解。此外,沒有逐步操作的單個長語句很難進行調(diào)試,開發(fā)周期也更長。

  關(guān)于過程性:行業(yè)中有一種說法,即SQL是一種聲明性語言,用戶只需關(guān)心他們想要什么,而不必關(guān)心如何做;數(shù)據(jù)庫會自動找到解決方案,因此這種語言不需要支持過程性。我們之前已經(jīng)批評了這種說法。

  數(shù)據(jù)庫供應(yīng)商可能也看到了SQL的缺乏過程性,所以后來添加了CTE語法以進行補償,它相當(dāng)于提供了可以命名的中間變量。存儲過程也相當(dāng)于能夠按步驟執(zhí)行SQL,具有分支循環(huán)甚至子程序。結(jié)果仍然是回到了過程性語言的老路上,所以從一開始就設(shè)計成這樣并不好。

  對于編程語言來說,一個良好的逐步計算機制帶來的易用性遠遠超過看起來像自然語言的優(yōu)勢。文章來源地址http://www.zghlxwxcb.cn/article/654.html

到此這篇關(guān)于為什么說SQL看起來像英語是一個錯誤的設(shè)計?的文章就介紹到這了,更多相關(guān)內(nèi)容可以在右上角搜索或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

原文地址:http://www.zghlxwxcb.cn/article/654.html

如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請聯(lián)系站長進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 關(guān)于為什么圖像為BGR格式在窗口上看起來也是正常的顏色

    在OpenCV中, cv2.imshow() 函數(shù)會根據(jù)圖像的通道順序自動進行顏色通道的轉(zhuǎn)換,以正確顯示圖像。 當(dāng)使用BGR格式的圖像作為輸入時, cv2.imshow() 函數(shù)會自動將其轉(zhuǎn)換為RGB格式進行顯示。這樣做的目的是為了與許多其他圖像處理庫和常見的圖像顯示方式保持一致,因為在這些情況

    2024年02月11日
    瀏覽(26)
  • 媲美ChatGPT的Bard你用了嗎,看起來還不錯!

    媲美ChatGPT的Bard你用了嗎,看起來還不錯!

    在這個技術(shù)日新月異的時代,人工智能已成為我們生活中不可或缺的一部分。聊天機器人,以其獨特的表現(xiàn)形式,備受人們追捧。在這里,筆者要向大家推薦幾個不錯的聊天機器人網(wǎng)站,其中包括Google Bard??纯此约涸趺茨7履澄恍≌f家介紹的—— Google Bard:網(wǎng)絡(luò)盲道的“

    2024年02月15日
    瀏覽(24)
  • 【vimsolo】讓vim看起來像VSCode:顏色主題和狀態(tài)欄的配置

    【vimsolo】讓vim看起來像VSCode:顏色主題和狀態(tài)欄的配置

    習(xí)慣了 VSCode 默認的配色:黑色主題,藍色狀態(tài)欄。偶爾使用 Vim 時想讓 vim 偽裝的像 VSCode,不考慮花里花哨的插件和動態(tài)效果, 靜態(tài)效果上讓 vim 看起來像 VSCode ,怎樣實現(xiàn)呢? vimsolo = vim + solo,除了顏色主題可以用第三方插件, 其他配置都用 .vimrc 手工完成,不依賴庫插件

    2024年02月05日
    瀏覽(25)
  • 玩轉(zhuǎn) PI 系列-看起來像服務(wù)器的 ARM 開發(fā)板矩陣-Firefly Cluster Server

    玩轉(zhuǎn) PI 系列-看起來像服務(wù)器的 ARM 開發(fā)板矩陣-Firefly Cluster Server

    基于我個人的工作內(nèi)容和興趣,想要在家里搞一套服務(wù)器集群,用于容器/K8s 等方案的測試驗證。 考慮過使用二手服務(wù)器,比如 Dell R730, 還搞了一套配置清單,如下: Dell R730 3.5 尺寸規(guī)格硬盤 CPU: 2686v4*2 內(nèi)存:16g*8 存儲:480Gintel ssd 系統(tǒng)盤 + 6tsas 希捷* 2 個數(shù)據(jù)盤 RAID 卡:h73

    2024年02月11日
    瀏覽(17)
  • Vue/Uni-app/微信小程序 v-if 設(shè)置出場/退出動畫(頁面交互不死板,看起來更流暢)

    天夢星服務(wù)平臺 (tmxkj.top) https://tmxkj.top/#/ 在Vue.js中,使用 v-if 進行條件渲染時設(shè)置動畫可以通過 transition 組件來實現(xiàn)。 具體操作步驟如下: 包裹條件渲染的元素 :您需要將要通過 v-if 控制顯示隱藏的元素包裹在 transition 標(biāo)簽內(nèi)。 命名過渡效果 :給 transition 標(biāo)簽添加 name 屬

    2024年04月28日
    瀏覽(20)
  • 為什么網(wǎng)吧的電腦用起來不卡?

    因為自己的電腦不適合打游戲,但我又想打,所以我對網(wǎng)吧的電腦開始研究起來 之前我在自己的筆記本上打游戲的時候,會出現(xiàn)人物名字和人物的位置不匹配的情況,有一次打游戲正打的火熱,電腦卻突然藍屏并嗡嗡的響,我頓時一臉懵逼,于是長按電源鍵10秒才關(guān)機。 我就

    2024年02月10日
    瀏覽(32)
  • 一起來看看元宇宙為什么有必要與IPFS進行精確組合?

    一起來看看元宇宙為什么有必要與IPFS進行精確組合?

    基本上,元宇宙的所有產(chǎn)品都將是NFT,但這將導(dǎo)致越來越多的NFT數(shù)據(jù),這也是元宇宙尋求突破的地方。 重要的是,數(shù)據(jù)必須永久存儲,數(shù)據(jù)不能被操作以確保唯一性。也許你已經(jīng)猜到了,在區(qū)塊鏈中有滿足這些要求的,即IPFS分布式存儲。 Filecoin是一個激勵層,運行在IPFS和區(qū)

    2024年02月10日
    瀏覽(29)
  • SQL中為什么不要使用1=1?

    最近看幾個老項目的SQL條件中使用了1=1,想想自己也曾經(jīng)這樣寫過,略有感觸,特別拿出來說道說道。 編寫SQL語句就像炒菜,每一種調(diào)料的使用都會影響菜品的最終味道,每一個SQL條件的加入也會影響查詢的執(zhí)行效率。那么 1=1 存在什么樣的問題呢?為什么又會使用呢? 在動

    2024年02月21日
    瀏覽(22)
  • 為什么SQL日志文件很大,該如何處理?

    為什么SQL日志文件很大,該如何處理?

    SQL Server 日志文件是記錄所有數(shù)據(jù)庫事務(wù)和修改的事務(wù)日志文件。用 SQL 術(shù)語來說,此日志文件記錄對數(shù)據(jù)庫執(zhí)行的所有 INSERT 、 UPDATE 和 DELETE查詢操作。 如果數(shù)據(jù)庫聯(lián)機或恢復(fù)時日志已滿,SQL Server 通常會發(fā)出 9002 錯誤。在這種情況下,數(shù)據(jù)庫只能讀取而不能更新。此篇文章

    2024年02月06日
    瀏覽(33)
  • 為什么一個矩陣乘以一個滿秩矩陣后秩不變

    A為N階方陣,r(A) =p ,其中p n. B為N階方陣,r(B)=n. 證明: r(AB) = p. 定理1:矩陣B可逆,則存在有限個初等矩陣 P 1 , P 2 , P 3 . . . P n P_1,P_2,P_3...P_n P 1 ? , P 2 ? , P 3 ? ... P n ? ,使得 A = P 1 P 2 . . . . P n A=P_1P_2....P_n A = P 1 ? P 2 ? .... P n ? 定理2:矩陣B滿秩,則矩陣B可逆 定理3:進行

    2024年02月10日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包