分享

自學SQL之路(三):MySQL 最常用的6種基礎語法

除了過濾與排序,還能像 Excel 樞紐分析表分組匯總

在第一篇:初學者選MSSQL好?還是MySQL?中有提到 MySQL 是一種關聯式資料庫管理系統,所謂的關聯是指將資料以資料表的形式儲存後,透過特定的欄位將一張一張資料表連結起來,最終形成一個龐大的資料庫關係網。
那麼資料表中的特定欄位是什麼呢?這裡要介紹資料庫的兩種約束條件:主鍵與外鍵。

主鍵(Primary Key)

原本就存在於資料表中,又稱唯一鍵,是用來識別每張表格中每行資料的重要欄位。主鍵欄位對於每筆資料而言就像是身分證字號一樣,是獨一無二的,而且不得為「空值」(Null)。此外,主鍵可以包含多個欄位,叫做組合鍵(Composite Key)。

外鍵(Foreign Key)

外鍵會指向另一張表的主鍵,目的是和別的表連結起來,讓資料更健全、豐富。資料表不一定有外鍵,依實際情況而定。

擁有1個主鍵的資料表(student_id)

擁有多個主鍵的資料表(student_id, course_id)

擁有1個主鍵、1個外鍵的資料表(course_id, instructor_id)

大致了解資料表與資料庫的關係之後,接下來開始進入正題:如何開始查詢資料,並且進一步下特定的條件範圍取得所需的資料呢?現在讓我們來看看有哪些重要語法你必須知道。

【SQL 基礎】

1. 取得表中資料 Select

  

SELECT * FROM 表名稱SELECT * FROM sql_store.order_items

以及:
  

SELECT 欄位名稱 FROM 表名稱SELECT product_id, quantity, unit_price FROM sql_store.order_items

2. 通過查詢條件過濾數據

  • Where
  

SELECT * FROM 表名稱 WHERE 篩選條件SELECT * FROM clients WHERE name = ‘Myworks’

  • Like
  

SELECT 欄位名稱 FROM 表名稱 WHERE 欄位名稱 LIKE 篩選條件SELECT * FROM sql_store.customers WHERE first_name LIKE 'AMBER'

  • Regexp
  

SELECT 欄位名稱 FROM 表名稱  WHERE 欄位名稱 REGEXP 篩選條件SELECT * FROM sql.store.customers WHERE first_name REGEXP '^a|n$'

3. 對資料表進行排序

  • Order by
  

SELECT 欄位名稱 FROM 表名稱 ORDER BY 欄位名稱 (遞減)SELECT * FROM sql_store.customers ORDER BY points DESC

4. 文本資料處理

  • Length 字串長度
  

SELECT LENGTH(‘字串’)SELECT LENGTH(‘sky’)

[Output:3]
  • LTrim 清除字串內左方空格
  

SELECT LTRIM(‘字串’)SELECT LTRIM(‘   report’)

[Output:report]
  • RTrim 清除字串內右方空格
  

SELECT RTRIM('字串')SELECT RTRIM('data  ')

[Output:data]
  • Trim 清除字串內所有空格
  

SELECT TRIM('字串')SELECT TRIM(‘ AB test  ‘)

[Output:ABtest]
  • Left 從左邊擷取字串
  

SELECT LEFT('字串', 字數)SELECT LEFT(‘DataOpenResource’,4)

[Output:Data]
  • Right 從右邊擷取字串
  

SELECT RIGHT('字串', 字數)SELECT LEFT(‘DataOpenResource’,12)

[Output:OpenResource]
  • Substring 擷取特定字段
  

SELECT SUBSTRING(‘字串’, 從第幾個字開始, 字數)SELECT SUBSTRING('DigitalMarketingConcept',8,16)

[Output:MarketingConcept]

5. 日期與時間函數

  • Year(Now()) 列出今年資料
  

SELECT * FROM 表名稱 WHERE YEAR(欄位名稱) = YEAR(NOW())SELECT * FROM orders WHERE YEAR(order_date) = YEAR(NOW())

  • Date_Format 選擇日期格式
  

SELECT DATE_FORMAT(NOW(),’%m %d %y’)

[Output:09 02 20]
  • Time_Format 選擇時間格式
  

SELECT TIME_FORMAT(NOW(),’%H %i %p’)

[Output:15 07 PM]

6. 匯總數據

  • 加總 Sum
  

SELECT SUM(欄位名稱) AS 自定義名稱 FROM 表名稱SELECT SUM(invoice_total) AS total FROM invoicing.invoices

  • 求平均值 Avg
  

SELECT AVG(欄位名稱) AS 自定義名稱 FROM 表名稱SELECT AVG(invoice_total) AS average FROM invoicing.invoices

  • 求最大值和最小值 Max Min
  

SELECT MAX(欄位名稱) AS 自定義名稱, MIN(欄位名稱) AS 自定義名稱 FROM 表名稱SELECT MAX(payment_date) AS highest, MIN(invoice_total) AS lowest, FROM invoicing.invoices

  • 計算數量 Count
  

SELECT COUNT(欄位名稱) AS 自定義名稱 FROM 表名稱SELECT COUNT(invoice_total) AS number_of_invoices FROM invoicing.invoices

7. 分組統計

  • 組成資料群組 Group by
  

SELECT 欄位名稱1 , SUM(欄位名稱2) FROM 表名稱 GROUP BY 欄位名稱1SELECT client_id, SUM(invoice_total) AS total_sales
FROM invoicing.invoices
GROUP BY client_id
ORDER BY total_sales

  • 分組篩選條件 Having
  

SELECT 欄位名稱1 , SUM(欄位名稱2) FROM 表名稱 GROUP BY 欄位名稱1
HAVING 篩選條件SELECT client_id, SUM(invoice_total) AS total_sales, COUNT(*) AS number_of_invoices
FROM sql_invoicing.invoices
GROUP BY client_id
HAVING total_sales > 500 AND number_of_invoices < 6

總結

透過以上 SQL 語法,你已經有能力針對某張表進行基本查詢了。但如果你需要的資料必須連接 2 張表甚至更多,應該怎麼做呢?
第四️篇➡自學SQL之路(四):MySQL 的4種進階語法 將為你解答!

自學SQL之路(四):MySQL 最常用的4種進階語法

內外部連結、子查詢、if判斷式

medium.com

  

感謝你看完這篇文章,覺得有幫助的話,請給我1~50個拍手👏
長按可以連續拍手喔(๑╹◡╹๑)也歡迎留言分享、討論想法~

分類:學習

評論
上一篇
  • 自學SQL之路(二):設定目標與學習資源
  • 下一篇
  • 自學SQL之路(四):MySQL 最常用的4種進階語法
  • 更多文章
    載入中... 沒有更多了