資料型態 | 描述 | 範例值 | 範例欄位 |
---|---|---|---|
VARCHAR(n) | 可變長度字串,n 為最大長度 | 'Alice', 'Hello' | name VARCHAR(30 ) |
INTEGER | 4 字節整數,適合整數存儲 | 1, 45,-15 | age INTEGER |
BOOLEAN | true 或 false 開關狀態 | TRUE, FALSE | is_active BOOLEAN |
JSON | JSON彈性資料 | {"name","John"} | setting JSON |
TIMESTAMP | 建立/更新時間 | {"name","John"} | created_at TIMESTAMP |
DECIMAL | 小數點 計算金額 | 1199.99 | price DECIMAL(10,2) |
操作類型 | SQL 語法 | 功能說明 | 常見註解與示例 |
---|---|---|---|
新增資料 | INSERT INTO table_name (...) |
將一筆或多筆資料加入指定資料表 | 用於創建新記錄,適合用於註冊新用戶、記錄交易等。 |
INSERT INTO users (name, email, created_at) VALUES ('Alice', 'alice@example.com', CURRENT_TIMESTAMP); |
|||
INSERT INTO users (name, email, age) VALUES ('Alex', 'Alex@mail.com', 10), ('Bill', 'Bill@mail.com', 15); |
|||
查找資料 | SELECT columns FROM table_name |
查詢指定的資料表及欄位 | 搭配 * 查詢所有欄位,或列出欄位名稱以提高效率。 |
SELECT name, age FROM users; |
|||
SELECT * FROM users; |
|||
篩選資料 | WHERE condition |
根據條件篩選出符合條件的資料 | 用於匹配特定資料,支持條件運算(如 = 、> , < ),並可與邏輯運算符(AND , OR )結合使用。 |
SELECT name FROM customers WHERE city = '高雄縣'; |
|||
SELECT * FROM customers WHERE city = '台北市'; |
|||
使用 AS | SELECT column_name AS alias_name |
為查詢結果中的列指定別名 | 提高結果的可讀性和清晰度。 |
SELECT name AS user_name, email AS "Email Address" FROM users; |
|||
更新資料 | UPDATE table_name SET column = value WHERE condition |
更新指定資料表中的資料 | 根據條件更新特定欄位的值。 |
UPDATE products SET price = 30000 WHERE name = 'jacket'; |
|||
刪除資料 | DELETE FROM table_name WHERE condition |
刪除符合條件的資料 | 根據條件刪除特定記錄。 |
DELETE FROM users WHERE age < 18; |
功能:將新記錄插入到資料表中。
語法:
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
註解:
欄位名與值的順序必須一一對應。
若所有欄位都要插入數據,可以省略欄位名稱:
INSERT INTO table_name VALUES (value1, value2, ...);
INSERT INTO users (name, email, created_at)
VALUES ('Alice', 'alice@example.com', CURRENT_TIMESTAMP);
INSERT INTOO users(name,email,age)
VALUES
('Alex','Alex@mail.com',10),
('Bill','Bill@mail.com',15),
('Cally','Bill@mail.com',18);
功能:從資料表中讀取數據。
#查詢“特定”所有用戶的名稱和電子郵件
SELECT column1, column2 FROM table_name;
SELECT name, age FROM users;
#
Alex 10
Bill 15
Cally 18
#查詢“所有”欄位
SELECT * FROM table_name;
SELECT * FROM users;
註解:
使用 * 查詢所有欄位,但會影響效率,建議僅查詢需要的欄位。
在 SQL 中,AS 關鍵字用於為查詢結果中的列或整個表格起別名,這可以讓查詢結果更具可讀性和清晰度。這樣不僅能讓你對查詢的資料做更好的命名,也能在進行資料處理、報告生成或資料分析時提高可讀性。
SELECT column_name AS alias_name
FROM table_name;
範例: 假設有一個 users 資料表,並且我們希望查詢用戶的name將欄位名稱改成更User Name。
SELECT name AS user_name, email AS "Email Address"
FROM users;
SELECT
name AS user_name,
age AS user_age
FROM users
SELECT
email AS "Email Address"
FROM users
SELECT aggregate_function(column_name) AS newCol
FROM table_name;
SELECT
name AS userName,
age AS userAge,
65 - age AS retireAge
FROM users;
來動手試試看:https://pg-sql.com/
子句是 SQL 中用來篩選記錄的重要工具,能夠根據特定條件從資料表中提取所需的數據
SELECT column1, column2, ...
FROM table_name
WHERE condition;
CREATE TABLE customers (
name VARCHAR(100),
City VARCHAR(100),
address VARCHAR(50),
Phone INTEGER
);
INSERT INTO customers(name,City,address,Phone)
VALUES
('張一','台北市','XX路100號','0212345678'),
('王二','新竹縣','YY路200號','0312345678'),
('李三','高雄縣','ZZ路300號','0712345678'),
('林四','高雄縣','ZZ路300號','0712345678'),
('陳五','台北市','XX路101號','0212345679');
要查詢City為「高雄縣」的“顧客name”資料,可以使用以下 SQL 語句:
SELECT name
FROM customers
WHERE City = '高雄縣';
/*
name
李三
林四
*/
要查詢City為「高雄縣」的顧客“全部*資料”,可以使用以下 SQL 語句:
SELECT *
FROM customers
WHERE City = '台北市';
/*
name city address phone
張一 台北市 XX路100號 212345678
陳五 台北市 XX路101號 212345679
*/
來動手試試看:https://pg-sql.com/
SELECT *
FROM customers
WHERE Name LIKE '王%'; -- 姓名以「王」開頭的顧客
-- 商品資料表
CREATE TABLE products (
name VARCHAR(100), -- 商品名稱
price INTEGER, -- 原價
discount_price INTEGER, -- 折扣價
stock INTEGER, -- 庫存數量
category VARCHAR(50), -- 商品類別
status VARCHAR(20) -- 商品狀態(上架、下架)
);
INSERT INTO products (name, price, discount_price, stock, category, status)
VALUES
('dress', 25000, 23000, 50, 'women', 'active'),
('jacket', 5000, 5000, 5, 'man', 'inactive'),
('充電線', 18000, 16000, 25, '3C', 'active'),
('earing', 500, 500, 100, '配件', 'active'),
('bracelet', 300, 250, 30, '配件', 'active'),
('skirt', 200, 180, 150, 'women', 'active'),
('top', 400, 400, 0, 'women', 'inactive');
情境:哪些商品快沒貨了?庫存< 50的產品有哪些?
SELECT name, stock
FROM products
WHERE stock <= 50;
/*
name stock
dress 50
jacket 5
充電線 25
bracelet 30
top 0
*/
多個條件的篩選
可以使用邏輯運算符(如 AND 和 OR)來組合多個篩選條件:
AND: 同時滿足兩個或多個條件。 WHERE category = '3C' AND price > 1000
OR: 滿足任一條件。 WHERE category = '3C' OR category = '配件'
SELECT name, price, stock
FROM products
WHERE status = 'active'
AND category = '3C';
--使用字串查找時 注意只能用單引號
/*
name price stock
充電線 18000 25
*/
SELECT name, status, stock
FROM products
WHERE status = 'inactive'
OR stock = 0;
/*
name status stock
jacket inactive 5
top inactive 0
*/
--使用字串查找時 注意只能用單引號
來動手試試看:https://pg-sql.com/
運算子 | 意義 | 範例 |
---|---|---|
BETWEEN | 在指定的範圍內 | WHERE price BETWEEN 100 AND 500; |
IN | 包含在列出的值中 | WHERE category IN ('3C', '配件') |
NOT IN | 不包含在列出的值中 | WHERE category NOT IN ('3C') |
SELECT *
FROM products
WHERE price BETWEEN 100 AND 500;
SELECT *
FROM products
WHERE category IN ('3C','配件')
--使用字串查找時 注意只能用單引號
SELECT *
FROM products
WHERE category NOT IN ('3C','配件')
--使用字串查找時 注意只能用單引號
來動手試試看:https://pg-sql.com/
UPDATE products
SET price = 30000
WHERE name = 'jacket'
同時調整特定商品的價格和名字
UPDATE products
SET
price = 30000,
name = 'jacket new'
WHERE name = 'jacket'
UPDATE products
SET stock = stock +5
WHERE name ='top'
使用字串查找時 注意只能用單引號
刪除情境
DELETE FROM products
WHERE name ='top';
DELETE FROM products
WHERE category ='3C';
UPDATE products
SET
stock =0,
status ='inactive'
WHERE name ='dress'
使用字串查找時 注意只能用單引號