常见Data type资料型态比较表
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; |
1. 新增资料:INSERT
功能:将新记录插入到资料表中。语法:
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);
2.查找资料:SELECT
功能:从资料表中读取数据。
#查询“特定”所有用户的名称和电子邮件
SELECT column1, column2 FROM table_name;
SELECT name, age FROM users;
#
Alex 10
Bill 15
Cally 18
#查询“所有”栏位
SELECT * FROM table_name;
SELECT * FROM users;
注解:使用 * 查询所有栏位,但会影响效率,建议仅查询需要的栏位。
3.可使用 AS 给查询结果赋于新的栏位标题
在 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/
4. WHERE 筛选资料
子句是 SQL 中用来筛选记录的重要工具,能够根据特定条件从资料表中提取所需的数据
SELECT column1, column2, ...
FROM table_name
WHERE condition;
- column1, column2: 要选择的字段名称,可以为多个字段。
- table_name: 要查询的表名称。
- condition: 筛选条件,决定哪些行会被选取。
假设有一个名为 customers 的资料表,包含以下数据:
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 \'王%\'; -- 姓名以「王」开头的顾客
5.比较运算子: >、≤、=
假设有一个名为 products 的资料表,包含以下数据:
-- 商品资料表
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
*/
6.逻辑运算子:AND、OR
多个条件的筛选可以使用逻辑运算符(如 AND 和 OR)来组合多个筛选条件:AND: 同时满足两个或多个条件。 WHERE category = \'3C\' AND price > 1000OR: 满足任一条件。 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/
7.集合与范围运算子:IN、NOT IN、BETWEEN
BETWEEN | 在指定的范围内 | WHERE price BETWEEN 100 AND 500; |
IN | 包含在列出的值中 | WHERE category IN (\'3C\', \'配件\') |
NOT IN | 不包含在列出的值中 | WHERE category NOT IN (\'3C\') |
预算在 100~500 元
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/
8.update 更新栏位
更新情境
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\'
使用字串查找时 注意只能用单引号
9.delete
删除情境
DELETE FROM products
WHERE name =\'top\';
DELETE FROM products
WHERE category =\'3C\';
UPDATE products
SET
stock =0,
status =\'inactive\'
WHERE name =\'dress\'
使用字串查找时 注意只能用单引号