瀏覽標籤:

PostgreSQL

SQL語法替換部分字串

版本 PostgreSQL 11

UPDATE 
   table_name
SET 
   path = REPLACE (
      path,
     'http://',
     'https://'
   );

製作浪浪的事認養平台時,有時候因為需要整理資料,會用到這個SQL因此紀錄在此,由於它會更新到資料,謹慎使用。

如上SQL語法表示 table_name 資料表,將path 欄位中找到http:// 替換成 https://

資料表設計規則-命名規則

之前有提到過小弟我是在開發WEB的工程師,經過幾次的案子會發現,注意一些小細節,建立好一個原則,對於大型的專案有很大的幫助。一開始可能覺得很麻煩,就跟後端程式碼的Coding Style一樣,縮排要空幾格、逗號之後空一格、名稱格式…感覺沒什麼用,資料庫也是一樣,如果隨便命名資料表,依照當下心情去決定,或是不想設定條件約束,設定後礙手礙腳,不好操作。

不過只要知道原理,以及命名有一個原則,等到有非常多資料表在資料庫中時,就會感受到這些小細節帶給你的好處!

閱讀更多

JOIN 介紹

今天來介紹JOIN,有以下幾個模式!

  1. JOIN
  2. LEFT JOIN
  3. RIGHT JOIN
  4. FULL OUTER JOIN
  5. CROSS JOIN
SELECT aga.area_pkid, a.name, aga.subid, aga.place, aga.kind 
FROM adoption_gov_animals AS aga LEFT JOIN areas AS a 
ON aga.area_pkid = a.id;
閱讀更多

JOIN 資料表的結合

為什麼拆開了!又要結合~你真的很野小,雖然只是把地區編號不重複的查詢出來,並補上資料,拆成areas 資料表,感覺起來好像沒有什麼,但是如果去拆分csv原始檔 後面的 動物所屬收容所代碼名稱,就會感受到拆解出來可以結審很多空間。

但在拆解後面的資料前,我們先嘗試把兩張資料表結合再一起吧!雖然是結合起來,但並不是真的合成一張表,是用 JOIN這個陳述,查詢出來並不是建立一個資料表

閱讀更多

整理資料表(一) 什麼是關聯式資料表?

關聯式資料庫的概念,是由多個互相有關係的資料表儲存資料並建立關聯。每個資料表是一個實體物件資料,像是我們的animals 資料表,裡面每一筆資料都是物件資料,內容包含動物的所有特性。

我們來整理一下前幾天匯入的另外一張資料表 adoption_gov_animals。如果沒匯入請到前天的文章執行一下SQL

拆分種類資料

adoption_gov_animals 中有一個欄位資料是紀錄動物種,可以用下方SQL執行看看,公開資料有多少種類。

SELECT DISTINCT kind FROM adoption_gov_animals;

顯示結果是有三種,我們把它拆出來到另外一張資料表。先建立一張資料表 types 裡面包含主鍵 id ,以及 name 欄位。其他欄位是紀錄新建以及更新時間。

CREATE TABLE types (
  id bigserial PRIMARY KEY,
  name varchar(20),
  created_at timestamp,
  updated_at timestamp
);

建立完成資料表以後,我們把資料寫入 types 資料表

INSERT INTO types(name,updated_at,created_at)
SELECT DISTINCT kind, now(), now() FROM adoption_gov_animals;

成功!我們有一張 分類資料表了!來記錄每一種分類,例如:貓|狗|鳥…

我們建立一個新的欄位在 adoption_gov_animals 欄位名稱為 types_id 來紀錄兩個的關係,欄位類型要跟 types 資料表的 id 一樣(bigint)

閱讀更多

PostgreSQL COPY 匯入資料

今天來嘗試匯入資料的功能,這個超級方便,先想辦法下載資料吧!

打算用 行政院農業委員會資料公開平台下載動物認養資料(.csv)測試 https://data.coa.gov.tw/Query/AdvSearch.aspx?id=QcbUEzN6E6DL

如果用 INSERT 插入資料的陳述句,要寫上百條,上千條資料,苦惱、麻煩、不想做,還好有一個方便的功能 COPY 陳述句,這是 PostgreSQL專有的功能,可以匯入有分隔符號,一行一筆資料的檔案。

  1. 準備好原始要匯入的檔案 今天以 .csv 當範例
  2. 建立好資料表(因為PostgreSQL 只會全部讀入,所以欄位資料一定要夠,並且依照原始檔csv內容去新建)
  3. 利用 COPY 程式碼匯入資料
閱讀更多