iT邦幫忙

1

MySQL 學習筆記 (資料操作)

前言

新手紀錄一下學習 SQL 的過程
使用 XAMPP 內的 phpMyAdmin 作為練習平台
此篇記載 如何 增刪改查資料
如有錯,歡迎提出,新手初學

大綱

  • SELECT / DELETE / UPDATE (查刪改資料)
  • INSERT TO (新增資料)
  • FROM、WHERE、LIMIT、BETWEEN、OFFSET (指定範圍方法)
  • AND / OR / NOT (附加條件)
  • Group By (資料分群)
  • DISTINCT (找不重複值)
  • IN / LIKE (關鍵字字查詢)
  • ORDER BY (排序)
  • COUNT / MAX / SUM / UCASE (統計資料/大小寫)
  • TimeStamp (時間戳記)

SELECT / DELETE / UPDATE (查刪改資料)

  • SELECT 查詢資料
  • DELETE 刪除資料
  • UPDATE 更新資料 SET 設該欄位的新資訊
  • AS 別名
  SELECT * FROM `users`
  DELETE FROM `users` WHERE `id`='6'
  UPDATE `users` SET `age`=47 WHERE `id` = '1';
  
  -- AS 取別名
  -- 原本欄位為 first_name 改為 forename (僅修改顯示結果的欄位名)
  SELECT first_name AS forename FROM `users`

INSERT TO (新增資料)

  • now() 取得當下時間存入
  • 如果使用 timestamp 類型即可不用自行傳入
  • 傳入多筆資料以 逗號 連接
  INSERT INTO users(name,password,is_admin,register_date)
  VALUES('Mark','46',1,now());

  -- 注意欄位名字 & 數量必須符合
  INSERT INTO users(name,password,is_admin)
  VALUES('Mark','46',1),('Tim','47',0);

FROM、WHERE、LIMIT、BETWEEN、OFFSET (指定範圍)

  • SELECT 接 顯示的欄位 (米字號 代表所有欄位)
  • FROM 接 資料表名
  • WHERE 接 判斷式 / WHERE NOT
  • LIMIT 接 要顯示的筆數
  • BETWEEN 20 AND 30 (限定範圍)
  • OFFSET 限制幾筆後位移 (常用於 分頁 pagination)
  • <> 代表不等於
  SELECT * -- 欄位名         column_name
  FROM `users` -- 資料表名   table_name
  WHERE `age` > 47 -- 判斷式 condition
  LIMIT 5; -- 顯示筆數 number
  OFFSET 5; -- 取 5 ~ 10筆資料
  BETWEEN 20 AND 30; -- 其數值在 20 & 30 之間

AND / OR / NOT (附加條件)

  • AND / OR 皆可使用多個來串接
  • 可用括號 使其內容先作在比對
  SELECT * FROM `users` WHERE `name`='Mark' AND `age`<30;
  SELECT * FROM `users` WHERE `name` ='張三' OR `age`>24;
  -- 排除 張三
  SELECT * FROM `users` WHERE NOT `name`='張三';
  
  -- 取得 Tim Carter & Mark Carter
  SELECT * FROM Persons 
  WHERE (FirstName='Tim' OR FirstName='Mark')
  AND LastName='Carter'

Group By (資料分群)

  • 通常會以函式搭配使用 COUNT()、AVG()
  • GROUP BY 以哪個欄位為分類 (age表以年齡為劃分)
  -- 選出不重複的年齡且大於30,並統計各年齡的人數 
  SELECT age, COUNT(age) FROM `users` WHERE `age`>30 GROUP BY age

  -- 選出不重複的地區,並統計出各區域居住的 user 數量
  SELECT location, COUNT(location) FROM `users` GROUP BY location

DISTINCT (找尋不重複數值)

  • 找尋出現的值 (不重複)
  SELECT DISTINCT `name` FROM users;

IN / LIKE (關鍵字、部分查詢)

  • IN 找出列出的條件的符合者 (無法使用 % 和 _ )
  • % 表任意字母 (可為 0 個字母)
  • _ 表一個字母
  • NOT Like 排除 符合條件者
  -- IN 多個關鍵字查詢
  SELECT * FROM `users` WHERE `job` IN ('sales','design')

  -- 選出內容有包含關鍵字的文章
  SELECT * FROM `posts` WHERE `article` LIKE '%關鍵字%'

  -- 選出並非 M 開頭的名字
  SELECT * FROM `users` WHERE `name` NOT LIKE 'M%'

  -- 表 A 開頭 Z 結尾 且中間有一個字母的字串 
  -- ABZ 符合  AOOZ 不符合 (中間必須只有一個字母)
  SELECT * FROM `posts` WHERE `article` LIKE 'A_Z'

ORDER BY (排序)

  • ASC 順序 / DESC 倒序
  • 可排序多個
  SELECT * FROM `users` ORDER BY `id` DESC
  
  -- 先排序 first_name 後排序 last_name
  SELECT * FROM `users`
  ORDER BY first_name, last_name;

Aggregate Functions (統計資料/大小寫)

  • COUNT 計算數量
  • MAX 取得最大值 / MIN 取得最小值
  • SUM 取得總合
  • AVG 取得平均值
  • UCASE 轉成大寫 / DCASE 轉成小寫
  SELECT COUNT(id) FROM comment;
  SELECT MAX(age) FROM users;
  SELECT MIN(age) FROM users;
  SELECT SUM(age) FROM users;
  SELECT AVG(age) FROM users;
  SELECT UCASE(first_name), LCASE(last_name) FROM users;

TimeStamp (時間戳記)

  • 可建立 timestamp 為資料類型的欄位
  • 其預設值為 current_timestamp()
  • 當資料建立會自動填寫,不需要自行傳入

參考資料


1 則留言

0
圓頭人
iT邦新手 1 級 ‧ 2019-06-18 10:50:57

好清楚的筆記!!
/images/emoticon/emoticon12.gif

RocMark iT邦新手 5 級 ‧ 2019-06-18 10:52:57 檢舉

感謝~

我要留言

立即登入留言