
【每周一期-數(shù)據(jù)蔣堂】從SQL語法看離散性
所謂離散性,是指集合的成員可以游離在集合之外存在并參與運(yùn)算,游離成員還可以再組成新的集合。從離散性的解釋上可以知道,離散性是針對集合而言的一種能力,離開集合概念單獨(dú)談離散性就沒有意義了。
離散性是個(gè)很簡單的特性,幾乎所有支持結(jié)構(gòu)(對象)的高級語言都天然支持,比如我們用Java時(shí)都可以把數(shù)組成員取出來單獨(dú)計(jì)算,也可以再次組成新的數(shù)組進(jìn)行集合運(yùn)算(不過Java幾乎沒有提供集合運(yùn)算類庫)。
但是SQL的離散性卻很差。
SQL體系中有記錄的概念,但并沒有顯式的記錄數(shù)據(jù)類型。單條記錄被SQL作為只有一條記錄的臨時(shí)表處理,也就是個(gè)單成員的集合。而且,SQL從表(集合)中取出記錄時(shí)總是復(fù)制出一條新記錄,和原表中的記錄已經(jīng)沒有關(guān)系了,這個(gè)特性被稱為immutable。immutable特性有助于保證代碼的正確性和簡單性,但也會(huì)喪失離散性。
缺失離散性會(huì)帶來代碼的繁瑣和效率的低下。
比如要計(jì)算張三和李四的年齡差和工資差,SQL要寫成兩句:
SELECT (SELECT age FROM employee WHERE name='張三') - ( SELECT age FROM employee WHERE name='李四') FROM dual
SELECT (SELECT salary FROM employee WHERE name='張三') - ( SELECT salary FROM employee WHERE name='李四') FROM dual
這不僅書寫麻煩,而且要重復(fù)查詢。
如果支持較好的離散性,我們可以寫成這樣:
a = employee.select@1(name="張三")
b = employee.select@1(name="李四")
agediff=a.age-b.age
salarydiff=a.salary-b.salary
查詢結(jié)果可以游離在集合外獨(dú)立存在,并可以反復(fù)使用。
immutable特性會(huì)要求每次運(yùn)算都復(fù)制數(shù)據(jù),這在只讀的運(yùn)算中還只是浪費(fèi)時(shí)間和空間影響效率,但如果要改寫數(shù)據(jù)時(shí),造成的麻煩就嚴(yán)重得多。
比如我們想對業(yè)績在前10%銷售員再給予5%的獎(jiǎng)勵(lì)。一個(gè)正常思路是先把業(yè)績在前10%的銷售員找出來,形成一個(gè)中間集合,然后再針對這個(gè)集合的成員執(zhí)行獎(jiǎng)勵(lì)5%的動(dòng)作。但由于SQL缺乏離散性,immutable特性導(dǎo)致滿足條件的記錄再形成的集合和原記錄是無關(guān)的,在中間結(jié)果集上做修改沒有意義。這樣就迫使我們要把整個(gè)動(dòng)作寫成一個(gè)語句,直接在原表中找到滿足條件的記錄再加以修改,而前10%這種條件并不容易簡單地在WHERE子句中寫出來,這又會(huì)導(dǎo)致復(fù)雜的子查詢。這還只是個(gè)簡單例子,現(xiàn)實(shí)應(yīng)用中比這復(fù)雜的條件比比皆是,用子查詢也很難寫出,經(jīng)常采用的辦法則是先把滿足條件的記錄的主鍵計(jì)算出來,再用這些主鍵到原表中遍歷找到原記錄去修改,代碼繁瑣且效率極為低下。
如果語言支持離散性,我們就可以執(zhí)行上述思路了:
a=sales.sort@z(amount).to(sales.len()*0.1) //取出前業(yè)績在10%的記錄構(gòu)成一個(gè)新集合
a.run(amount=amount*1.05) //針對集合成員執(zhí)行獎(jiǎng)勵(lì)5%動(dòng)作
從上面兩個(gè)簡單例子可以看出,缺失離散性會(huì)加劇分步計(jì)算的困難,immutable特性會(huì)降低性能并占用空間。當(dāng)然,離散性的問題還不止于此。
不能用原集合的成員構(gòu)成新集合再進(jìn)行計(jì)算,SQL在做分組時(shí)無法保持分組子集,必須強(qiáng)迫聚合,作為集合化語言,SQL的集合化并不徹底。沒有游離記錄及其集合的表示方法,只能用傳統(tǒng)的外鍵方案表示數(shù)據(jù)之間的關(guān)聯(lián)關(guān)系,寫出的代碼即繁瑣又難懂,而且運(yùn)算性能還差,缺乏離散性的SQL無法采用直觀的引用機(jī)制描述關(guān)聯(lián)。特別地,沒有離散性的支持,SQL很難描述有序計(jì)算,有序計(jì)算是離散性和集合化的典型結(jié)合產(chǎn)物,成員的次序在集合中才有意義,這要求集合化,有序計(jì)算時(shí)又要將每個(gè)成員與相鄰成員區(qū)分開,會(huì)強(qiáng)調(diào)離散性。
這些具體內(nèi)容我們會(huì)在后續(xù)文檔中逐步詳細(xì)說明。我們要從理論上改進(jìn)SQL(或者更合適的說法是關(guān)系代數(shù)),主要工作就是在保持集合化的基礎(chǔ)上引入離散性,從而解決上述問題,讓新的語言能夠同時(shí)擁有SQL和Java的優(yōu)點(diǎn)。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗(yàn)如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對策略? 長短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場調(diào)研是企業(yè)洞察市場動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03