亚洲乱色熟女一区二区三区丝袜,天堂√中文最新版在线,亚洲精品乱码久久久久久蜜桃图片,香蕉久久久久久av成人,欧美丰满熟妇bbb久久久

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

SQL中幾個常見的易錯點

admin
2025年11月6日 15:14 本文熱度 495

今天給大家分享一下我自己和身邊人摔過的跤,來看看這幾個“易錯知識點”,你中過招沒?

1. NULL值:它不是“0”或“空字符串”,是“未知”

這大概是所有SQL初學(xué)者的第一個噩夢。NULL不等于零,也不等于空字符串,它表示“未知”。所以,用 去判斷NULL,基本是白費力氣。=

-- 錯誤示范:這樣查不出任何結(jié)果
SELECT * FROM Employees 
WHERE ManagerId = NULL;

-- 正確姿勢:使用 IS NULL 或 IS NOT NULL
SELECT * FROM Employees 
WHERE ManagerId IS NULL;

-- 另一個常見坑:任何與NULL的運算,結(jié)果還是NULL
SELECT 10 + NULL-- 結(jié)果是 NULL
SELECT 'Hello ' + NULL-- 結(jié)果還是 NULL

想象一下,你要算團隊平均獎金,如果有人獎金是NULL,你沒處理,整個平均值可能就廢了。

-- 假設(shè)Bonus列有NULL值
SELECT AVG(Bonus) FROM Employees; -- 結(jié)果可能不準(zhǔn),因為NULL不參與運算
SELECT AVG(ISNULL(Bonus, 0)) FROM Employees; -- 先用ISNULL把NULL轉(zhuǎn)成0再算

2. 在WHERE子句里對字段做計算

這個坑性能損耗極大。當(dāng)你對表字段使用函數(shù)或者運算時,SQL很可能就無法使用索引了,導(dǎo)致全表掃描。

-- 錯誤示范:假設(shè)CreateTime字段有索引
SELECT * FROM Orders 
WHERE YEAR(CreateTime) = 2023;

-- 正確姿勢:讓計算發(fā)生在等式的另一邊,保持字段“干凈”
SELECT * FROM Orders 
WHERE CreateTime >= '2023-01-01' AND CreateTime < '2024-01-01';

上面兩句結(jié)果一樣,但下面那句能命中索引,查詢速度天差地別。記住,要把字段當(dāng)“祖宗”一樣供著,盡量別對它動手動腳。

3. JOIN 和 WHERE 的過濾順序

很多人以為LEFT JOIN(左連接)時,條件寫在ON里和寫在WHERE里是一樣的。大錯特錯!

-- 場景:找出所有員工,以及他們的部門名(即使沒有部門也顯示)
-- 假設(shè)我們只想看‘技術(shù)部’的員工,但其他部門的員工也要顯示為NULL

-- 錯誤寫法:這樣寫,LEFT JOIN 實際上變成了 INNER JOIN
SELECT e.Name, d.DepartmentName
FROM Employees e
LEFT JOIN Departments d ON e.DepartmentId = d.Id
WHERE d.DepartmentName = '技術(shù)部'-- WHERE子句會過濾掉部門為NULL的行!

-- 正確寫法:把針對右表的過濾條件放在ON里
SELECT e.Name, d.DepartmentName
FROM Employees e
LEFT JOIN Departments d ON e.DepartmentId = d.Id AND d.DepartmentName = '技術(shù)部';

簡單記:ON是連接前過濾,WHERE是連接后過濾。對于LEFT JOIN,放在ON里能保住左表的所有記錄,放在WHERE里就可能“誤殺”。

4. COUNT(*) 和 COUNT(字段名) 的區(qū)別

這倆兄弟看著像,脾氣可不一樣。

-- 統(tǒng)計表中有多少條記錄
SELECT COUNT(*) FROM Employees; -- 計算所有行的數(shù)量,不管列里是不是NULL

-- 統(tǒng)計某個字段非空值的數(shù)量
SELECT COUNT(ManagerId) FROM Employees; -- 只計算 ManagerId 不是 NULL 的行

所以,如果你的字段允許為NULL, COUNT(字段名)的結(jié)果很可能就小于 COUNT(*)。 用的時候得心里有數(shù)。

5. 字符串比較的大小寫和空格

SQL的默認設(shè)置下,字符串比較是不區(qū)分大小寫的,但這依賴于你的數(shù)據(jù)庫排序規(guī)則(Collation)。有時候你覺得它該區(qū)分,它卻不區(qū)分,很讓人困惑。

-- 在默認不區(qū)分大小寫的數(shù)據(jù)庫里,這個查詢會返回 'apple', 'APPLE', 'Apple' 所有行
SELECT * FROM Fruits WHERE Name = 'apple';

-- 如果你真想精確匹配大小寫,可以這樣做:
SELECT * FROM Fruits WHERE Name = 'apple' COLLATE SQL_Latin1_General_CP1_CS_AS; -- CS表示Case Sensitive(區(qū)分大小寫)

另外,結(jié)尾的空格也經(jīng)常被忽略。

-- ‘Hello’ 和 ‘Hello ’(后面有個空格)在比較時很可能被認為是相等的。

最后說一句

這些知識點單拎出來看都不難,但混在復(fù)雜的業(yè)務(wù)邏輯里,一不小心就會成為隱蔽的bug。 我自己的經(jīng)驗是,多寫多錯,多錯多記,下次下筆之前,心里先打個問號:“這里有沒有我熟悉的坑?”

扎實的基礎(chǔ),往往就體現(xiàn)在對這些細節(jié)的處理上。 共勉!


該文章在 2025/11/6 15:14:40 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved