資料庫是管理資料的工具,身為使用者最基本的是要寫入資料,
然後有可能需要修改資料,不過只有這樣的話,資料庫也沒有屁用,
重要的還是要能查資料麻,不然我蒐集一堆資料幹嘛勒?
最後資料不小心多寫或者用不到,我們也要能刪除資料。
硬是要用四個字去寫,我個人是偏好寫改查刪,
維基百科則是使用增刪查改,但是為什麼要用四個字,
這是因為英文用了CRUD來縮寫,我們也要輸人不輸陣 (亂講話欠揍!
關於CURD的解釋,我覺得維基百科講得很好,
尤其是那個基本用途與別名表,真香阿!
https://zh.wikipedia.org/zh-tw/增刪查改
-- (1) 寫入一筆資料
INSERT INTO <table name> (<column name>)
VALUES (<column value>);
-- (2) 寫入多筆資料
INSERT INTO <table name> (<column name>)
VALUES (<column value>),
(<column value>);
-- (3) 寫入資料 (來源為查詢出來的資料)
INSERT INTO <table name> (<column name>)
VALUES (<query>);
-- (4) 查詢資料
SELECT <columns> FROM <table name>;
-- (5) 用條件查詢資料
SELECT <columns> FROM <table name> WHERE <condition>;
-- (6) 更新資料
UPDATE <table name>
SET <column name> = <new value>, ...
WHERE <condition>;
-- (7) 刪除資料
DELETE FROM <table name>
WHERE <condition>;
來個例子,我們建立一個探針卡紀錄表,這張表的資訊紀錄資料被建立的日期,
探針卡被送回客戶端的日期、客戶名稱、產品名稱、維護成本、是否生產中、是否保養中。
CREATE TABLE probe_card (
id SERIAL PRIMARY KEY,
date_created DATE DEFAULT CURRENT_DATE,
date_returned DATE,
customer_name VARCHAR(300) NOT NULL,
product_name VARCHAR(300) NOT NULL,
cost NUMERIC(10,2) NOT NULL CHECK (cost >= 0),
is_running BOOLEAN DEFAULT FALSE,
is_maintainance BOOLEAN DEFAULT FALSE
);
由於記錄只需要到日期,因此選用DATE型別而不是時間顆粒更細的TIMESTAMP
來個例子,我們建立一個探針卡紀錄表,這張表的資訊紀錄資料被建立的日期,
探針卡被送回客戶端的日期、客戶名稱、產品名稱、維護成本、是否生產中、
是否保養中。
INSERT INTO probe_card (date_created, date_returned, customer_name, product_name, cost, is_running, is_maintainance)
VALUES ('2013-08-12', '2015-03-31', 'MTC', 'G78M', 1789.99, FALSE, FALSE),
('2013-08-12', NULL, 'MTC', 'G78M', 234.99, FALSE, TRUE),
('2014-11-27', NULL, 'MTC', 'W70A', 699.99, FALSE, TRUE),
('2017-12-05', NULL, 'MTC', 'G85AS', 364.05, FALSE, FALSE),
('2017-12-05', NULL, 'MTC', 'G85AS', 369.99, FALSE, FALSE),
('2019-10-22', NULL, 'MTC', 'V100A', 300.00, TRUE, FALSE),
('2019-10-22', NULL, 'MTC', 'V100A', 600.00, TRUE, FALSE),
('2019-10-22', NULL, 'MTC', 'V100A', 300.00, TRUE, FALSE),
('2019-10-22', NULL, 'MTC', 'V100A', 3000.00, TRUE, FALSE),
('2021-09-11', '2021-09-14', 'MTC', 'V100AS', 69.05, FALSE, FALSE),
('2021-09-11', NULL, 'MTC', 'V100AS', 276.99, TRUE, FALSE),
('2021-09-11', NULL, 'MTC', 'V100AS', 69.05, TRUE, FALSE),
('2021-09-11', NULL, 'TSM', 'V100TADCarry', 299.99, TRUE, FALSE);
UPDATE probe_card
SET customer_name = 'MTC',
product_name = 'V100AS'
WHERE id = 13;
更新的資料是哪一筆資料或哪幾筆資料甚至是全部的資料都進行更新,
要看WHERE的條件是長什麼樣子,假設條件是可以識別唯一值的欄位,
那麼就會只更新那一筆。
打個比方,假設今天資料是一個班級的學生,老師想把數學加5分,
如果是 WHERE id = 1,那麼只有1號同學加5分
如果是 WHERE sex = F,那麼只要是女生都加5分
如果是完全沒有用WHERE,那麼就是這個班級的學生全部都加5分
所以更新資料的時候WHERE非常重要!非常重要!非常重要!
DELETE FROM probe_card
WHERE id = 13;
SELECT *
FROM probe_card;
有時候我們希望抓出來的資料要再進行一些變化,
譬如維修成本系統紀錄的金額是未含稅,
但是老闆想要知道到底真正花了多少錢,
所以我們將金額成以1.05倍,並且用AS重新命名這個欄位。
放心,這些操作並不會影響存在資料庫的資料!
SELECT
id,
product_name,
cost * 1.05 AS total_cost
FROM probe_card;