如標題,這篇想和大家聊聊如何用SQL的語法做資料庫的查詢
請注意,SQL的函數皆為「全大寫的英文字母」
以下資料表和範例是我之前練習過的題目,看起來有點複雜,但其實用法很固定,其格式也大同小異
首先,這裡有三張資料表,由上到下依序為employees
、members
、transactions
employees:
members:
transactions:
現在我們點擊上方的「SQL」,會看到一個輸入程式的執行框,在此輸入完按執行即可
現在,我們會使用以上三張資料表的資料做「查詢」,並且透過以下六個範例來解釋SQL的語法架構
每次查詢完都會跑出一張「新的資料表」,至於跑出什麼內容,全看你的語法怎麼下
Ex 1:
首先,你會看到SELECT
和FROM
SELECT是用來「取得」資料表裡的資料,其寫的名稱即為新資料表的欄位名稱
FROM則表示要從「哪個」資料表裡取得資料
這裡SELECT為*
,FROM為employees
,表示將從employees這張資料表裡,查詢「全部欄位」的資料
所以它印出的新資料表會和「原本」的資料表employees
一樣:
Ex 2:
這裡我們把欄位名稱分別打出來
但請注意(salary*12) as annual_salary
這行,意思是,對資料表employees的salary
這個欄位*12倍
,並將結果存在annual_salary
這個欄位裡
所以annual_salary
這個欄位的資料會等於salary*12倍
Ex 3:
這裡多了WHERE
和ORDER BY
WHERE的後面寫的是「欲查詢的條件」有哪些
ORDER BY則表示要從哪個欄位的資料去做「排序」,預設為「由小排到大」,如果在欄位名稱後面加上DESC
,則表示「由大排到小」
這裡WHERE為(age<=30) AND (position IN (‘主管’, ’職員’))
,表示將從employees這張資料表裡的欄位age
取小於等於30
的資料,且在欄位position裡是主管or職員
的資料,因為是AND
,故需「兩者皆符合」才印出ORDER BY salary DESC
則表示依照salary
這個欄位的資料,依序由大排到小
所以它印出的結果只有position是主管、職員
,且age小於等於30
的資料
Ex 4:
這裡我們FROM了兩張資料表,分別是transactions
和members
請注意看SELECT的members.name as name
,意思是,「新資料表」的欄位name
的資料是從資料表members裡的欄位name
獲得的,其餘「皆」是從資料表transactions
裡獲得的
所以,如果想「指定」哪張資料表的哪個欄位,只要加上.
就好,ex: members.name
這裡WHERE表示transTime
須為’2020-03-17 21:36:18’
且transaction.transMid = members.mid
,才將其印出
ORDER BY則指定依members.mid
這個欄位的資料,依序由大排到小
所以它印出的transTIme的資料皆為2020-03-17 21:36:18
Ex 5:
這裡多了EXTRACT()
EXTRACT()函數是用來取出日期or時間
中的特定部分,語法為:EXTRACT(欲取得的部分 as 欄位名稱)
,在「欲取得的部分」需全部為「大寫的英文字母」
這裡分別要取出transactions裡的欄位transTime
的year、month、day,所以在EXTRACT()裡的「欲取得的部分」則依序填入YEAR
、MONTH
、DAY
,再分別指向「新資料表」的欄位year、month、day
因為transactions這張資料表裡的欄位transMid
裡有編號1、2、3、4
,而members裡的欄位mid
只有編號1、2、3
,所以在WHERE須加上transactions.transMid = members.mid
,以防印出在欄位transMid
為「編號4」的資料
這裡可以看到tNo
裡沒有s141016
、s141017
,因為它們在欄位transMid
的編號為4
Ex 6:
這裡多了COUNT()
和GROUP BY
COUNT()是計算此資料在資料表裡出現的次數
GROUP BY為「群組指令」,那種算平均值
、最大最小值
、總和
……等需整個欄位做比較的,都需要用GROUP BY「指定」欄位名稱
這裡我們要計算在資料表members裡的陳阿龍
、吳阿珠
、陳阿明
在資料表transactions裡出現的次數為何,所以在WHERE要下transactions.transMid = members.mid
GROUP BY指定計算資料表transactions裡的欄位transMid
ORDER BY先從新資料表裡的欄位count
由大排到小,再從欄位name
由大排到小
結果如下圖所示:
以上就是今天的介紹
看起來有點複雜,但SQL的查詢其實就環繞著SELECT
、FROM
、WHERE
、ORDER BY
、GROUP BY
等
如果你能搞懂以上六個範例的語法架構,那你對SQL的查詢語法架構大致上就沒問題了,只是需要依照其他題目的要求去換函數做使用
如果對以上用法還不太清楚,可以去看一下我貼的參考資料喔!
裡面對SQL的查詢語法有很詳盡的解說