![]()
你第一次寫SQL時,有沒有試過把CREATE和INSERT搞混?或者UPDATE忘了加WHERE,整表數據瞬間歸零?
這不是笨。是SQL的設計本身就把"搭架子"和"填內容"做成了兩套完全不同的語法體系,而多數教程偏偏混在一起講。
DDL vs DML:一個蓋房,一個住人
作者把DDL(數據定義語言)比作蓋房子,DML(數據操作語言)比作搬家具。這個類比精準得有點扎心——你確實沒法在沒墻的地方掛畫,也沒法用錘子調整沙發位置。
DDL管的是CREATE、DROP、ALTER這些。它們動的是表結構,是schema(模式),是數據庫的"不動產"。執行一次,長期生效,誤操作的代價通常是重建。
DML管的是INSERT、UPDATE、DELETE。它們動的是行數據,是記錄本身,是日常的"進進出出"。這里才是你寫SQL的90%時間,也是WHERE子句救你命的地方。
作者列了一張對照表:DDL影響Tables and Schemas,DML影響Rows/Records。這個區分寫進腦子里,能避開一半的新手坑。
實戰鏈條:從CREATE到CASE WHEN
作者的作業流程很典型,也是工業界的標準起手式。
第一步CREATE。設好schema路徑,定義列名和數據類型,表才算"合法存在"。這時候表里是空的,只有結構,沒有內容。
第二步INSERT。把記錄填進去。到這里,基礎數據層才算完工。
第三步UPDATE。發現Mombasa寫成Nairobi?不用刪了重寫,直接定位改。但作者沒說的是:UPDATE不加WHERE等于自殺。這是SQL新手最常見的葬禮現場。
第四步DELETE。清理冗余數據。同樣,WHERE是你的安全帶。
作者提到的WHERE運算符清單很實用:=做精確匹配,>做數值篩選,BETWEEN處理區間,IN匹配列表,LIKE做模糊查詢。這些組合起來,能覆蓋80%的日常過濾需求。
CASE WHEN:SQL里的"臨時加工廠"
作者說CASE WHEN是"most interest"的部分。這種興奮感很真實——它確實是SQL從"存儲工具"進化成"計算工具"的關鍵一躍。
CASE WHEN的本質是條件分支。不改動原表,直接在查詢結果里造出新列。比如按年級把學生標成"Senior"或"Junior",原表的class字段紋絲不動,輸出結果已經分類完畢。
作者的原話是:"It was as though SQL had ceased to be simply about data storage, and began to become about processing that data."
這個觀察點到了SQL的核心張力。早期SQL確實是存取語言,但現代分析場景要求它在查詢層完成轉換、歸類、計算。CASE WHEN就是最早的"輕量級ETL"(數據抽取轉換加載),讓分析師不用出SQL環境就能做特征工程。
作者也坦承了卡點:WHERE條件的組合,特別是多條件嵌套時,容易把自己繞進去。這很正常。SQL的邏輯執行順序和書寫順序不一致,WHERE在FROM之后、SELECT之前跑,這個"時間差"是很多bug的源頭。
一個被忽略的細節
原文只提了DDL和DML,但開頭其實列出了五類SQL語句。DQL(查詢)、DCL(權限)、TCL(事務)被暫時擱置。
這個選擇很聰明。對新手來說,先建立"結構操作"和"數據操作"的肌肉記憶,比一次性吞下完整分類體系更有效。SELECT雖然用得最多,但它不改變數據庫狀態,心理負擔確實低一些。
作者最后沒給結論,只說到CASE WHEN的興奮和WHERE的糾結。這種半成品感恰恰是最真實的編程學習狀態——你剛覺得掌握了一個武器,立刻發現它的邊界。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.