https://www.flickr.com/photos/8058098@N07/2718571627/
設計好資料表,並建立出來後,就能在裡面添加資料了。本文整理出資料的新增、查詢、更新與刪除語法,以及查詢條件的撰寫方式。
此篇內容轉載自本人在 iThome 的文章。
一、新增資料
首先認識一下員工資料表的設計。
以下指令是新增一筆資料。
若要新增多筆資料,將 VALUE 改為 VALUES,資料之間欄位值以逗點隔開即可。其實不論幾筆資料,統一用 VALUES 也是好選擇。
二、查詢資料
(一)一般查詢
上面簡單新增了幾筆資料,而以下的指令是查詢出表中的所有資料。
SELECT * FROM `employee`;
以下是查看特定的欄位,將 * 改為 欄位名稱即可。
SELECT `name`, `salary` FROM `employee`;
以下是查詢欄位為特定值的資料,例如「emp_id」欄位為 1。加上條件時,會使用 WHERE 語法。
SELECT * FROM `employee` WHERE `emp_id` = 1;
(二)去除重複查詢
假設目前資料表的現有資料節錄如下。
emp_id | name | salary | dept_id |
---|---|---|---|
1 | Vincent | 32000 | 1 |
2 | Ivy | 38000 | 2 |
3 | Roger | 41000 | null |
4 | Dora | 38000 | 2 |
以下是找出有薪水不到 40000 的員工的部門編號。若不希望查詢結果中,出現重複的資料,則需使用 DISTINCT 語法。
SELECT DISTINCT `dept_id` FROM `employee` WHERE `salary` < 40000;
透過 DISTINCT,會讓原本內容為 1、2、2 共三筆的查詢結果,變成 1、2 兩筆,達到去除重複。
我們也可針對多個欄位,比方說想要知道每個部門中,是哪些薪水金額不到 40000。
SELECT DISTINCT `dept_id`, `salary` FROM `employee` WHERE `salary` < 40000;
只有當欄位值全部相同,才視為重複。以上的查詢結果有兩筆:「1 號部門 32000 元」、「2 號部門 38000 元」。
二、更新與刪除資料
(一)安全模式
讀者首先要知道,在更新或刪除時,若未加上條件,代表要作用於表中的所有資料。MySQL 為了保護我們不要誤刪、誤改全部資料,其「安全模式」會禁止該操作。
執行以下指令,分別可關閉、開啟安全模式。
-- 關閉 SET SQL_SAFE_UPDATES = 0; -- 開啟 SET SQL_SAFE_UPDATES = 1;
(二)更新
以下指令是將所有資料的「salary」欄位都增加 2000。
UPDATE `employee` SET `salary` = `salary` + 2000;
以下指令是將薪資未達 30000 的員工,加至該金額,並設定為 0 號部門。
UPDATE `employee` SET `salary` = 30000, `dept_id` = 0 WHERE `salary` < 30000;
(三)刪除
以下是刪除「emp_id」欄位為 4 的員工。
DELETE FROM `employee` WHERE `emp_id` = 4;
三、撰寫查詢條件
(一)比較運算子
比較運算子包含「>」、「<」、「=」、「>=」、「<=」與「!=」,相當直覺,筆者就不贅述。
以下條件是查詢薪資未達 40000 的員工。
SELECT * FROM `employee` WHERE `salary` < 40000;
以下條件是查詢 2019 年起入職的員工。雖然欄位是是日期型態,但只要以「YYYY-MM-DD」的格式撰寫字串即可。
SELECT * FROM `employee` WHERE `on_board_date` >= "2019-01-01";
以下條件是查詢女性員工。
SELECT * FROM `employee` WHERE `gender` = "F";
(二)邏輯運算子
邏輯運算子包含 AND、OR 與 NOT,也很直覺。
以下條件是查詢 2020 年以前入職,而薪資未達 40000 的員工。
SELECT * FROM `employee` WHERE `on_board_date` < "2020-01-01" AND `salary` < 40000;
若要以數值或日期的範圍作為條件,可用 BETWEEN ... AND ... 語法。以下條件是查詢未在 2018 到 2019 年入職的員工。
SELECT * FROM `employee` WHERE NOT (`on_board_date` BETWEEN "2018-01-01" AND "2019-12-31");
(三)格式匹配
這種條件是以欄位值是否符合特定格式,來進行查詢。
會使用兩個萬用字元。% 代表 0 到多個字;_ 代表 1 個字。
以下條件是查詢使用 Yahoo 信箱的員工。
SELECT * FROM `employee` WHERE `email` LIKE "_%@yahoo.com%";
其中 _% 組合出 1 到多個字的效果。
(四)多個指定值
如果查詢條件是多個指定的值,雖然用 OR 運算子串接起來也行,但不易閱讀。可改用 IN 語法。
以下條件是查詢 1、2 號部門的員工。
SELECT * FROM `employee` WHERE `dept_id` IN (1, 2);
(五)空值
當欄位沒有值,也就是 null,則那些資料並不會參與需要用到該欄位的查詢。
以下條件是查詢沒有部門編號的員工。
SELECT * FROM `employee` WHERE `dept_id` IS NULL;
下一篇:【MySQL】排序與分頁
作者 又開始更新了 讚讚d(`・∀・)b
回覆刪除謝謝支持,我只是把在 iThome 網站寫的文章陸續轉載過來啦!
刪除