久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何提升查詢(xún)技能

共計(jì) 3200 個(gè)字符,預(yù)計(jì)需要花費(fèi) 8 分鐘才能閱讀完成。

這篇文章主要介紹“如何提升查詢(xún)技能”,在日常操作中,相信很多人在如何提升查詢(xún)技能問(wèn)題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”如何提升查詢(xún)技能”的疑惑有所幫助!接下來(lái),請(qǐng)跟著丸趣 TV 小編一起來(lái)學(xué)習(xí)吧!

讓我們以一個(gè)虛構(gòu)的業(yè)務(wù)為例。假設(shè)你是亞馬遜電子商務(wù)分析團(tuán)隊(duì)的一員,需要運(yùn)行幾個(gè)簡(jiǎn)單的查詢(xún)。你手頭有兩個(gè)表,分別為“product(產(chǎn)品)”和“discount (折扣)”。

1. 計(jì)算 NULL 字段的數(shù)目

為了計(jì)算 null 字段的數(shù)目,要掌握 COUNT 函數(shù)的工作原理。假設(shè)計(jì)算產(chǎn)品數(shù)量時(shí),要求計(jì)入表格“product”的“product id”主鍵列中遺漏的字段。

SELECT COUNT(product_id) FROM product;Result: 3

由于要求計(jì)入“product id”列中的 null 值,查詢(xún)結(jié)果應(yīng)該為 4,但 COUNT()函數(shù)不會(huì)將 null 值計(jì)數(shù)。

解決方法:使用 COUNT(*)函數(shù)。該函數(shù)可以將 null 值計(jì)數(shù)。

Select Count(*) From product;Result: 4

這個(gè)操作很簡(jiǎn)單,但是在編寫(xiě)復(fù)雜的查詢(xún)時(shí)總會(huì)被忽略。

2. 使用保留字作為列名

SELECT product_id, RANK() OVER (ORDER BY price desc) As Rank FROM product;

由于列名“Rank”是 Rank 函數(shù)的保留字,該查詢(xún)結(jié)果出錯(cuò)。

解決方法:

SELECT product_id, RANK() OVER (ORDER BY price desc) As  lsquo;Rank rsquo; FROM product;

加上單引號(hào),即可得到想要的結(jié)果。

3.NULL 的比較運(yùn)算

SELECT product_name FROM product WHERE product_id=NULL;

由于使用了比較運(yùn)算符“=”,此處運(yùn)算會(huì)出現(xiàn)異常,使用另一比較運(yùn)算符“!=”運(yùn)算也會(huì)出現(xiàn)異常。這里的邏輯問(wèn)題在于,你編寫(xiě)的查詢(xún)得出的是“product id”列的值是否未知,而無(wú)法得出這一列的值是否是未知的產(chǎn)品。

解決方法:

SELECT product_name FROM product WHERE product_id ISNULL;

4.ON 子句過(guò)濾和 WHERE 子句過(guò)濾的區(qū)別

這是一個(gè)非常有趣的概念,會(huì)提高你對(duì)于 ON 子句過(guò)濾和 WHERE 子句過(guò)濾之間區(qū)別的基本理解。這并不完全是一個(gè)錯(cuò)誤,只是演示了兩者的用法,你可以根據(jù)業(yè)務(wù)需求選擇最佳方案。

SELECT d.product_id, price, discount FROM product p RIGHT JOIN discount d ON p.product_id=d.product_id WHERE p.product_id

結(jié)果:

在這種情況下,過(guò)濾條件在兩個(gè)表格連接之后生效。因此,所得結(jié)果不包含 d.product_id 1 的行(同理,顯然也不包含 p.product 1 的行)。

解決方法:使用 AND,注意結(jié)果上的不同。

SELECT d.product_id, price, discount FROM product p RIGHT JOIN discount d ON p.product_id=d.product_id AND p.product_id

結(jié)果:

在這里,條件語(yǔ)句 AND 在兩個(gè)表格連接發(fā)生之前計(jì)算。可以把此查詢(xún)看作只適用于一個(gè)表 (“product”表) 的 WHERE 子句。現(xiàn)在,由于右連接,結(jié)果中出現(xiàn)了 d.product_id 1 的行(顯然還有 p.product_id 1 的行)。

請(qǐng)注意,ON 子句過(guò)濾和 WHERE 子句過(guò)濾只在左 / 右 / 外連接時(shí)不同,而在內(nèi)連接時(shí)相同。

5. 在同一查詢(xún)的 WHERE 子句中使用 Windows 函數(shù)生成的列 使用 CASE WHEN 子句

注意,不要在同一查詢(xún)的 WHERE 子句中使用通過(guò) Windows 函數(shù)生成的列名以及 CASE WHEN 子句。

SELECT product_id, RANK() OVER (ORDER BY price desc) AS rk FROM product WHERE rk=2;

因?yàn)榱?rk 由 Windows 函數(shù)生成,并且在同一查詢(xún)的 WHERE 子句中使用了該列,這個(gè)查詢(xún)結(jié)果會(huì)出現(xiàn)異常。

解決方法:這一問(wèn)題可以通過(guò)使用臨時(shí)表或者子查詢(xún)解決。

WITH CTE AS ( SELECT product_id, RANK() OVER (ORDER BY price desc) AS rk FROM product ) SELECT product_id FROM CTE WHERE rk=2;

SELECT product_id FROM ( SELECT product_id, RANK() OVER (ORDER BY price desc) AS rk FROM product; ) WHERE rk=2;

同樣的方法也適用于使用 CASE WHEN 子句創(chuàng)建的列。請(qǐng)記住,Windows 函數(shù)只能出現(xiàn)在 SELECT 或 ORDER BY 子句中。

6.BETWEEN 的使用不正確

如果不清楚 BETWEEN 的有效范圍,也許會(huì)得不到想要的查詢(xún)結(jié)果。BETWEEN x AND y 語(yǔ)句的有效范圍包含 x 和 y。

SELECT * FROM discount WHERE offer_valid_till BETWEEN  lsquo;2019/01/01 rsquo; AND  lsquo;2020/01/01 rsquo; ORDER BY offer_valid_till;

結(jié)果:

在查詢(xún)中,也許我們只想得到 2019 年的所有日期,但是結(jié)果中還包含了 2020 年 1 月 1 日。這是因?yàn)?BETWEEN 語(yǔ)句的有效范圍包含 2019/01/01 和 2020/01/01。

解決方法:相應(yīng)地調(diào)整范圍可以解決這個(gè)問(wèn)題。

SELECT * FROM discount WHERE offer_valid_till BETWEEN  lsquo;2019/01/01 rsquo; AND  lsquo;2019/12/31 rsquo; ORDER BY offer_valid_till;

結(jié)果:

現(xiàn)在,所有查詢(xún)結(jié)果均為 2019 年的日期。

7. 在 GROUP BY 語(yǔ)句后使用 WHERE 子句

在編寫(xiě) GROUP BY 語(yǔ)句時(shí),請(qǐng)注意 WHERE 子句的位置。

SELECT category, AVG (price) FROM product p INNER JOIN discount d ON p.product_id=d.product_id GROUP BY category WHERE discount_amount

由于將 WHERE 子句放在 GROUP BY 語(yǔ)句后,此查詢(xún)是錯(cuò)誤的。這是為什么呢?

WHERE 子句用于過(guò)濾查詢(xún)結(jié)果,這一步要在將查詢(xún)結(jié)果分組之前實(shí)現(xiàn),而不是先分組再過(guò)濾。正確的做法是先應(yīng)用 WHERE 條件過(guò)濾減少數(shù)據(jù),再使用 GROUP BY 子句通過(guò)聚合函數(shù)將數(shù)據(jù)分組(此處使用聚合函數(shù) AVG)。

解決方法:

SELECT category, AVG (price) FROM product p INNER JOIN discount d ON p.product_id=d.product_id WHERE discount_amount 10 GROUP BY category;

請(qǐng)注意主要 SQL 語(yǔ)句的執(zhí)行順序:

FROM 子句

WHERE 子句

GROUP BY 子句

HAVING 子句

SELECT 子句

ORDER BY 子句

到此,關(guān)于“如何提升查詢(xún)技能”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注丸趣 TV 網(wǎng)站,丸趣 TV 小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-27發(fā)表,共計(jì)3200字。
轉(zhuǎn)載說(shuō)明:除特殊說(shuō)明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒(méi)有評(píng)論)
主站蜘蛛池模板: 昌吉市| 桃源县| 屏东县| 峡江县| 瓦房店市| 高尔夫| 靖边县| 定日县| 西藏| 苍梧县| 伊川县| 鄂托克前旗| 贺州市| 耒阳市| 法库县| 吴忠市| 改则县| 冷水江市| 新乡县| 塔城市| 巴彦县| 丰顺县| 凤台县| 长海县| 台东县| 读书| 岱山县| 金沙县| 汽车| 伊春市| 威海市| 孝感市| 增城市| 星子县| 蕉岭县| 蒙阴县| 前郭尔| 蚌埠市| 宽城| 翁源县| 呼伦贝尔市|