數據分析系列——SQL 必知必會(二)

數據分析系列——SQL 必知必會(二)

2 人贊了文章

此篇繼續學習檢索數據與過濾數據

第三章 排序檢索數據

3.1 排序數據

SELECT prod_name

FROM Products

ORDER BY prod_name;

註:(1)ORDER BY語句必須是SELECT語句中的最後一條子句;(2)ORDER BY用於檢索的列通常是為顯示而選擇的列,也可以是非選擇的列

3.2 按多個列排序

SELECT prod_id, prod_name, prod_price

FROM Products

ORDER BY prod_price, prod_name;

註:僅在多個行具有相同的prod_price時,才對產品按 prod_name進行排序。

3.3 按列位置排序

SELECT prod_id, prod_name, prod_price

FROM Products

ORDER BY 2, 3;

註:ORDER 2表示按照SELECT清單中的第二列prod_name進行排序

3.4 指定排序方向

SELECT prod_id, prod_name, prod_price

FROM Products

ORDER BY prod_price DESC;

註:DESC表示降序排列,默認為升序排列

SELECT prod_id, prod_name, prod_price

FROM Products

ORDER BY prod_price DESC, prod_name;

註:DESC只應用到直接位於其前面的列名;如果需要對多個列進行降序排列,必須對每一列指定關鍵字DESC

第四章 過濾數據

4.1 使用WHERE子句

SELECT prod_name, prod_price

FROM Products

WHERE prod_price =3.49;

註:WHERE子句在表名(FROM)之後給出

4.2 WHERE子句操作符

所有操作符:等於(=),不等於(<>,!=),小於(<),小於等於(<=),不小於(!<),大於(>),大於等於(>=),不大於(!>),在指定的兩個值之間(BETWEEN),為NULL值(IS NULL)。

(1)檢查單個值

SELECT prod_name, prod_price

FROM Products

WHERE prod_price <10;

(2)不匹配檢查

SELECT vend_id, prod_name

FROM Products

WHERE vend_id <>DLL01;

註:單引號用來限定字元串

(3)範圍值檢查

SELECT prod_name, prod_price

FROM Products

WHERE prod_price BETWEEN 5 AND 10;

註:匹配範圍內的所有值,包括指定的開始值和結束值

(4)空值檢查

SELECT prod_name

FROM Products

WHERE prod_price IS NULL;

第五章 高級數據過濾

5.1 組合WHERE子句

用來連接或改變WHERE子句中的子句的關鍵字,稱為邏輯操作符

AND操作符

SELECT prod_id, prod_name, prod_price

FROM Products

WHERE vend_id=DLL01 AND prod_price=4;

OR 操作符

SELECT prod_id, prod_name, prod_price

FROM Products

WHERE vend_id=DLL01 OR vend_id=BRS01;

求值順序

給出兩個例子:

SELECT prod_name, prod_price

FROM Products

WHERE vend_id=DLL01 OR vend_id=BRS01 AND prod_pice>=10;

SELECT prod_name, prod_price

FROM Products

WHERE (vend_id=DLL01 OR vend_id=BRS01) AND prod_pice>=10;

註:因為優先順序的原因,AND比OR優先順序高,括弧的優先順序高於AND和OR,因此第一個例子返回的是「由供應商BRS01製造的價格為10美元以上的所有產品,以及由供應商DLL01製造的所有產品,價格沒有約束」;第二個例子返回的則是「由供應商DLL01或BRS01製造的價格在10美元以上的所有產品」。

5.2 IN操作符

SELECT prod_name, prod_price

FROM Products

WHERE vend_id IN (DLL01, BRS01)

ORDER BY prod_name;

註:IN操作符用來指定操作範圍,範圍中的每個條件都可以匹配;

5.3 NOT操作符

SELECT prod_name

FROM Products

WHERE NOT vend_id = DLL01

ORDER BY prod_name;

註:NOT操作符有且只有一個功能,否定其後所跟的任何條件;總是與其他操作符一起使用;NOT關鍵字可以用在要過濾的列前,不僅是其後。

上面的例子等價於

SELECT prod_name

FROM Products

WHERE vend_id <> DLL01

ORDER BY prod_name;

第六章 用通配符進行過濾

6.1 LIKE操作符

通配符:用來匹配值的一部分的特殊字元;只能用於文本欄位,非文本數據類型欄位不能使用通配符搜索

%:表示任何字元出現任何次數

例1:查找所有以詞Fish起頭的產品

SELECT prod_id, prod_name

FROM Products

WHERE prod_name LIKE Fish%;

註:%告訴DBMS接受Fish之後的任意字元

例2:匹配任何位置上包含文本bean bag的值

SELECT prod_id, prod_name

FROM Products

WHERE prod_name LIKE %Bean bag%;

例3:找出以F起頭,以y結尾的所有產品

SELECT prod_name

FROM Products

WHERE prod_name LIKE F%y;

註:通配符%不能匹配NULL;

下劃線_:匹配單個字元

SELECT prod_id, prod_name

FROM Products

WHERE prod_name LIKE __ inch teddy bear;

註:此處__將匹配兩個字元。如「12」,「18」

方括弧[ ]:指定一個字符集,必須匹配指定位置(通配符的位置)的一個字元

例1:找出名字以J或M起頭的聯繫人

SELECT cust_contact

FROM Customers

WHERE cust_contact LIKE [JM]%

ORDER BY cust_contact;

方括弧通配符可以使用脫字型大小(^)來否定

SELECT cust_contact

FROM Customers

WHERE cust_contact LIKE [^JM]%

ORDER BY cust_contact;

與NOT的效果是一樣的:

SELECT cust_contact

FROM Customers

WHERE NOT cust_contact LIKE [JM]%

ORDER BY cust_contact;

6.2 使用通配符的技巧

(1)不要過度使用通配符,其他操作符能夠達到相同的目的,盡量使用其他通配符

(2)通配符置於開始出,搜索是最慢的

(3)注意通配符的位置

待續......


推薦閱讀:

(學習筆記)利用python進行數據分析(二):一些範例數據集
拍知心 最懂你的智能投資顧問
數據驅動增長?看了太多虛假的成功,我們來看看真實的失敗(上集)
(7)Python初入坑之pandas基礎實操六
ggplot2都有哪些使用不多但是卻異常強大的圖層函數

TAG:SQL | 數據分析 | 資料庫 |