iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 17
0

SQL 進階語法 - like, order, distinct, sum, count

昨天我們學會了最基本的四個 SQL 語句,
但是要做到一些讀者平常用 Excel 表格篩選,
常用的邏輯計算功能,仍是稍嫌不足,
因此我們今天會學 SQL 常用的語法技巧,
幫助各位資料庫的操作可以更加熟練。

這幾個指令可以先簡單分類:
優化查詢 —> like
排序篩選 —> order, distinct
簡易計算 —> sum, count

一樣,我們使用昨日的資料庫:

id name gender age hobby
1 John male 23 basketball
2 May female 32 baseball
3 Tom both 25 sleep
4 Gary male 50 coding

Like

like 語句通常會放在 Where 內使用,
跟他同樣層級的詞,比較像是” > ”, “ < ” 這種運算符號,
用到情境非常多,舉個例子,
我們不會每次搜尋時都要去搜『完全一樣』的值,
像是 hobby ,我們可能只想要知道,只要有包含 ball 這個詞的,
就全部撈出來,那這個時候我們就會使用 like 這個詞。
用法如下:

Select * From users Where hobby Like '%ball%'

得到的結果為:

id name gender age hobby
1 John male 23 basketball
2 May female 32 baseball

這邊我們用到了『 % 』這個特殊符號,
這個符號其實代表『萬用字元』的意思,
因此不一定只能使用 % 這個符號,
只是我們最常使用這個符號。
而萬用字元,是程式碼在做字串比對時,會使用到的快樂夥伴們,
但他們實際上代表的意義千奇百怪,一點都不快樂,
如果有興趣的讀者,可以看看這個初階的教學文件

Order

order 可以幫助我們排序撈出來的資料,
而排序不限制為數字,就算是字串也可以排序唷!
另外也能設定要從小到大,還是從大到小,
我們先來看看,針對 age 這個欄位的排序:

Select * From users Order by age

得到結果為:

id name gender age hobby
1 John male 23 basketball
3 Tom both 25 sleep
2 May female 32 baseball
4 Gary male 50 coding

很明顯的看到,這是由小排到大的模式,
如果想要由大到小,就在後面加一個字『 DESC 』

Select * From users Order by age DESC

就可以改成,反排序模式囉!:

id name gender age hobby
4 Gary male 50 coding
2 May female 32 baseball
3 Tom both 25 sleep
1 John male 23 basketball

另外,其實正排序模式的詞為『ASC』,
但其實 SQL 查詢本來就是正排序模式,所以也不用特別寫唷~

Distinct

Distinct 這個詞的使用情境,是在當你想取某個欄位的『不重複資料』時,
可以好好使用的好東西。
假定我們現在要來抓取所有gender 欄位裡的資料,
並要不重複的資料,那我可以這樣寫:

Select Distinct(gender) From users 

就會得到這個結果:

gender
female
both
male

是不是很快速方便呀~~

Sum

sum 這個詞,他在 SQL 中就像是『函式』的存在,
具有簡單的邏輯,可以運算使用者的查詢結果,
而 sum 的用法,就是去『加總特定欄位的值』
那我們現在就針對,age 來做加總,
我想看看,所有 gender 是 male 資料的 age 加起來是多少:

Select Sum(age) From users Where gender = 'male'

這樣就會輸出

Sum(age)
73

另外,各位會發現欄位名稱是很醜很醜的 sum(age),
可以使用 as 語句,去設定撈出來的資料欄位名稱唷!

Select Sum(age) as total_age from users where gender = 'male'

出來的結果就會像:

total_age
73

是不是感覺更有意義了呀~

Count

count 的用法和 sum 非常相似,
它可以去計算『滿足條件的資料有幾筆』,
因此通常也都是要搭配 where 語句,
直接純使用,就是算目前資料庫總共有幾筆資料。
並且會常在圓括號內,使用 * 字號,代表一次抓取所有的欄位,
用法如下:

Select Count(*) From users Where gender = 'male'

輸出:

Count(*)
2

就會算出 gender 是 male 的資料總共有 2 筆
相同的,可以使用 as 詞句,指定結果為某個特定欄位。

Select Count(*) as total_quantity  From users Where gender = 'male'

就會有漂亮的結果囉~

total_quantity
2

如果有任何問題,或是指證文中的錯誤,歡迎寄信給我或留言在下面喔~


上一篇
[Day16] 資料庫( SQL ) 基礎語法
下一篇
[Day18] SQL 關聯語句 - join
系列文
菜鳥後端工程師的第一門課30

尚未有邦友留言

立即登入留言