- 當資料量太龐大(ex. 十萬筆資料)時,通常會使用資料庫來管理、維護、查詢資料
資料庫優點:
(1) 方便檢索、查找:可以透過 SQL 指令查詢自己想要的資料
(2) 方便管理和維護資料的一致性:透過關聯方式同一筆資料不需要重複修改,保持資料的一致性 關聯式資料庫(Relational Database)
:市面上主要使用的資料庫系統
MySQL:市占率非常高,許多知名的網路應用程式都有使用
PostgreSQL:也非常常見的資料庫系統,對於 SQL 語法標準遵循較嚴格
MS SQL:微軟推出的付費資料庫系統
Oracle Database:由甲骨文推出的付費資料庫系統,常見於大型公司
MariaDB:由原 MySQL 團隊再次製作的關聯式資料庫系統與 MySQL 語法幾乎相容
SQLite:輕量級資料庫,資料庫內容儲存在 .sqlite 檔案中,易於移轉和操作資料庫,但比較適合教學或是中小型應用使用 - 資料庫名詞:
資料庫(Database):資料庫為多個資料表
所組成的資料集合
資料表(Table):由一筆筆紀錄
所組成,一個資料表可以有多筆資料
紀錄(Record):資料庫內儲存的一筆資料
,根據定義的屬性欄位儲存資料
主鍵(Primary Key):一筆資料的代表屬性值
,用來辨識每一筆資料,一般會使用不重複
的值當作鍵值(Ex. 學生學號、商品 ID、使用者 ID 等)
外來鍵/外鍵(Foreign Key):用來關聯到其他資料表的鍵值,可以降低重複資料維護。(Ex. 使用者 ID 欄位) - 通常使用 ER 實體關聯模型圖來定義各個資料表的欄位定義和關係以用來視覺化關係圖,但實務上不一定用的到
- SQL 主要是以
keyword
關鍵字和資料表(table)名稱
和欄位(column)名稱
當作一段完整的語句
一般分為:
DDL(Data Definition Language)資料定義語言 -> 建立、刪除資料庫和資料表等用來儲存的單位
DML(Data Manipulation Language)資料操作語言 -> 能查詢、修改資料表的紀錄,為一般商業資料分析師最常使用的指令類別為 SELECT
DCL(Data Control Language) - SQL 語法:
(1) 結尾: ;
(2) 英文字母不區分大小寫(一般使用大寫
)
(3) 單行註解: --
(4) 多行註解: /**/
包裹 - 創建資料庫:
CREATE DATABASE 資料庫名稱
COLLATE 編碼;
或是-- 事先判斷有無建立資料庫,沒有建立才新建立
CREATE DATABASE IF NOT EXISTS 資料庫名稱
COLLATE 編碼;
ps. utf8mb4_unicode_ci:處理中文排序COLLATE utf8mb4_unicode_ci;
- 創建資料表:
CREATE TABLE 資料表名稱 (
欄位名稱 欄位屬性
);
或是-- 事先判斷有無建立資料表,沒有建立才新建立
CREATE TABLE IF NOT EXISTS 資料表名稱 (
欄位名稱 欄位屬性
);
p.s. 在 SQLite 中可以簡寫資料型別,使用 TEXT
代表文字, INTEGER 代表整數,若有小數則為 REAL 或精確的數值 NUMERIC,若是使用 MySQL 則使用 VARCHAR
文字字串資料型別、INT 等資料型別。
(來源:第 12 期電腦科學概論 & 程式設計思維入門共學營) - 刪除資料庫/資料表:
DROP DATABASE/TABLE 資料庫/資料表名稱;
- 修改資料表結構:
-- 新增欄位
ALTER TABLE 資料表名稱 ADD 欄位名稱 屬性;
-- 移除欄位
ALTER TABLE 資料表名稱 DROP 欄位名稱;
INSERT INTO
:建立好資料庫 & 資料夾後使用
插入單筆資料:INSERT INTO users VALUES (
'Jack', 20, 'Male'
);
出入多筆資料:INSERT INTO users (name, age, gender) VALUES
( 'Jack', 20, 'Male'),
( 'Amy', 13, 'Female'),
( 'May', 42, 'Female'),
( 'Leo', 30, 'Male');
SELECT * FROM users;
- 查詢資料:
SELECT 欄位名稱 FROM 資料表名稱;
-- 查詢所有欄位,* = 全部
SELECT * FROM users;
-- 依屬性提取特定欄位
SELECT age
FROM users;
-- 條件限定 WHERE
SELECT age
FROM users
WHERE age > 30;
WHERE age > 30 AND gender == 'Female';
-- 排序:DESC(大 -> 小), ASC(小 -> 大)
SELECT * FROM users
ORDER BY age DESC;
-- 函式:數量 COUNT、加總 SUM、平均值 AVG、最大值 MAX 和最小值 MIN
SELECT COUNT(*) -- COUNT 計算 NULL 以外的資料筆數
FROM users;
-- 資料分群 GROUP BY:依屬性分群
SELECT gender, COUNT(*)
FROM users;
GROUP BY gender;
- 更新資料 UPDATE:
UPDATE users
SET age = 20
WHERE username = 'Tony';
- 刪除資料 DELET:
DELETE FROM users
WHERE username = 'Tony';