SQL 語句易錯點講解
阿新 • • 發佈:2018-10-12
我想 world pan region 條件 比較 進行 哪些 過濾
1.NULL 值不要與其他具體值進行比較,NULL也不能與NULL進行比較
比如: 哪些國家的GDP 比在歐洲任何一個國家的GDP都高
錯誤示範"
SELECT name FROM bbc WHERE gdp > ALL (SELECT gdp FROM bbc WHERE region = ‘Europe‘ AND gdp<>NULL);
用 gpd <> NULL 這樣是無法排除 gdp 是 NULL的情況
正確做法:
SELECT name FROM bbc WHERE gdp > ALL (SELECT gdp FROM bbc WHERE region = ‘Europe‘ AND gdp>0);
另外: NULL = NULL 這樣比較是沒有用的
2.WHERE 和 HAVING 分不清楚
WHERE 過濾行,而HAVING 過濾分組
給出兩個例子分別HAVING 和WHERE
表格格式:
world(name, continent, area, population, gdp)
例1: 每個大陸有多少個 人口在200000000的國家.
SELECT continent,count(name) FROM world WHERE population > 200000000 GROUP BY continent
例2; 展示總人口在500000000的大陸
SELECT continent,sum(population) FROM world GROUP BY continent HAVING sum(population) >= 500000000;
從上面的例子,我們可以 把 WHERE 比作過濾發生在分組前,而HAVING 是分組後進行過濾
比如WHERE 先把人口 200000000 的 行 先過濾了,而HAVING是在分組之上,把組內不符合條件的 數據 過濾
另外一個例子: 我想要知道總和面積大於
BBC表格:
15000000 的區域 和 區域總和面積
SELECT region, SUM(area) FROM bbc WHERE SUM(area) > 15000000 GROUP BY region
WHERE 無法根據區域總和來過濾行.
正確做法應該是:
SELECT region, SUM(area) FROM bbc GROUP BY region HAVING SUM(area) > 15000000
SQL 語句易錯點講解