iT邦幫忙

2022 iThome 鐵人賽

DAY 11
1
自我挑戰組

資料庫新手入門--以PostgreSQL為例系列 第 11

Day 11 資料怎麼弄(CRUD)

  • 分享至 

  • xImage
  •  

資料庫是管理資料的工具,身為使用者最基本的是要寫入資料,
然後有可能需要修改資料,不過只有這樣的話,資料庫也沒有屁用,
重要的還是要能查資料麻,不然我蒐集一堆資料幹嘛勒?
最後資料不小心多寫或者用不到,我們也要能刪除資料。

硬是要用四個字去寫,我個人是偏好寫改查刪,
維基百科則是使用增刪查改,但是為什麼要用四個字,
這是因為英文用了CRUD來縮寫,我們也要輸人不輸陣 (亂講話欠揍!
關於CURD的解釋,我覺得維基百科講得很好,
尤其是那個基本用途與別名表,真香阿!

https://zh.wikipedia.org/zh-tw/增刪查改

CRUD語法

-- (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)

來個例子,我們建立一個探針卡紀錄表,這張表的資訊紀錄資料被建立的日期,
探針卡被送回客戶端的日期、客戶名稱、產品名稱、維護成本、是否生產中、
是否保養中。

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)

  1. 更新哪張資料表(UPDATE)
  2. 更新的欄位是要改成什麼內容(SET)
  3. 更新那些資料,或者很多時候是更新哪一筆資料(WHERE)
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)

  1. 刪除哪張表單的資料(DELETE)
  2. 刪除這張表單的哪些資料(WHERE)
DELETE FROM probe_card
WHERE id = 13;

讀取資料(SELECT)

  1. 讀取哪些欄位(SELECT)
  2. 這些欄位是哪張表單的?(FROM)
SELECT *
FROM probe_card;

改變查詢的欄位名稱(AS)

有時候我們希望抓出來的資料要再進行一些變化,
譬如維修成本系統紀錄的金額是未含稅,
但是老闆想要知道到底真正花了多少錢,
所以我們將金額成以1.05倍,並且用AS重新命名這個欄位。

放心,這些操作並不會影響存在資料庫的資料!

SELECT 
id,
product_name,
cost * 1.05 AS total_cost
FROM probe_card;

上一篇
Day 10 資料表的設定兩三事
下一篇
Day 12 資料過濾
系列文
資料庫新手入門--以PostgreSQL為例30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言