NULL
什麼是NULL?
NULL 代表「無值」或「未知值」,它與 0、空字串('')是不同概念。
Null的使用時機
用來表示資料庫中某欄位尚未填入資料。
舉例:
- 新員工尚未被指派部門,須先顯示為null
- 註冊簡易帳號,尚未填入資料會顯示null
CREATE TABLE users(
id SERIAL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
team_name VARCHAR(50) NULL,
salary INTEGER NULL
);
name, email是必填欄位,而薪水非必填日後可在談論填上。此時建立後,若新增資料時未填寫name, email則會被約束無法新增。
COALESCE
用來檢查並處理null
結果。
有些語言會因爲null做其他處理而影發錯誤。
SELECT
id,
name,
email,
COALESCE(team_name, '未分配') as team_name,
COALESCE(salary, 0) as salary
FROM users;
DISTINCT
不重複函數
SELECT DISTINCT teams.name
FROM users;
SQL中用於去除重複資料的關鍵字。
count
是一個計數函數,用來計算資料表中的資料筆數。
計算總共有幾個員工
SELECT COUNT(*) as 員工人數
FROM users;
計算開發部有幾個員工
SELECT COUNT(*) as 開發部人數
FROM users
WHERE team_name = '開發部';
計算薪水大於40000並且為人事部的員工人數
SELECT COUNT(*) as 人事部高薪員工人數
FROM users
WHERE
salary > 40000
AND
team_name = '人事部';
計算函數
SUM 加總
SELECT SUM(salary) AS 員工總薪資
FROM users;
AVG 平均值
SELECT AVG(salary) AS 員工平均薪資
FROM users;
MAX 最大值
SELECT MAX(salary) AS 最高薪資
FROM users;
MIN 最小值
SELECT MIN(salary) AS 最低薪資
FROM users;
UUID介紹
SERIAL 與 UUID 差異
使用UUID
資料庫開啟UUID功能
以postgress為例,低於13版時需要操作這項指令
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
試著建立UUID
CREATE TABLE users (
-- id SERIAL PRIMARY KEY,
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
team_name VARCHAR(50) NULL,
salary INTEGER NULL
);
INSERT INTO users (name, email, team_name, salary)
VALUES
('林建宏', 'chihming.lin@company.com', '開發部', 68000),
('王雅婷', 'yating.wan@company.com', '人事部', 42000 ),
('陳美玲', 'jianhong.cheng@company.com', '人事部', 36000),
('張佳琳', 'jialin.chang@company.com', '人事部', 45000),
('黃志明', 'meiling.huang@company.com', '開發部', 48000);