數據分析系列——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都有哪些使用不多但是卻異常強大的圖層函數