插入/添加数据
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com'); -- 插入单条记录
INSERT INTO users (name, email) VALUES
('Charlie', 'charlie@example.com'),
('David', 'david@example.com'); -- 插入多条记录
INSERT INTO users (name, email)
SELECT name, email FROM old_users WHERE age > 20; -- 从其他表复制
查询数据
SELECT * FROM users; -- 查询所有记录
SELECT name, email FROM users; -- 查询指定字段
SELECT DISTINCT name FROM users; -- 去重查询
SELECT * FROM users WHERE age > 20 ORDER BY name DESC; -- 带条件和排序
SELECT * FROM users LIMIT 10; -- 限制结果集大小
删除数据
DELETE FROM users WHERE id = 1; -- 删除单条记录
DELETE FROM users WHERE age > 30; -- 带条件删除
DELETE FROM users; -- 删除所有记录
更新数据
UPDATE users SET email = 'new@example.com' WHERE id = 1; -- 更新单条记录
UPDATE users SET age = age + 1 WHERE name LIKE 'A%'; -- 带条件更新
UPDATE users SET age = 25 WHERE id IN (1, 2, 3); -- 使用IN运算符
UPDATE users SET age = 25 WHERE age BETWEEN 20 AND 30; -- 使用BETWEEN运算符
多表操作
跨表操作属于对选择数据的进阶操作。在数据表设计过程中,为了避免将所有数据都存在一个数据表中,往往一张事物表存储的信息是唯一的,如电商业务中:用户基本信息表,商品基本信息表,订单表,库存表等,在实际业务分析中,如某次购买活动中的购买用户画像分析,就需要同时提取到订单表信息和用户基本信息进行关联分析,这时候就需要通过跨表关联进行数据的提取和汇总。
常见的跨表关联,主要以join的形式出现,但也有时会将某张表作为where内条件进行使用。
SELECT u.name, o.order_id
FROM users u
JOIN orders o ON u.id = o.user_id; -- 内连接
SELECT u.name, o.order_id
FROM users u
LEFT JOIN orders o ON u.id = o.user_id; -- 左连接
常见函数
时间函数
在处理mysql数据时,由于数据表基本存储的都是事件信息,所以需要根据分析需求去计算不同事件信息之间的时间关系,时间函数就变得尤为重要。时间函数主要包括时间提取/转换和时间计算两个方向。
- 常见的时间提取函数主要包括:
| 函数 |
意义 |
例子 |
| NOW() |
返回当前日期和时间 |
'2025-12-17 14:11:29' |
| CURRENT_TIMESTAMP() |
等同于NOW() |
CURRENT_TIMESTAMP() → '2025-12-17 14:11:29' |
| SYSDATE() |
返回当前日期和时间 |
SYSDATE() → '2025-12-17 14:11:29' |
| LOCALTIME() |
返回当前日期和时间 |
LOCALTIME() → '2025-12-17 14:11:29' |
| LOCALTIMESTAMP() |
返回当前日期和时间 |
LOCALTIMESTAMP() → '2025-12-17 14:11:29' |
- 时间日期函数
| 函数 |
意义 |
例子 |
| CURDATE() |
返回当前日期 |
CURDATE() → '2025-12-17' |
| CURRENT_DATE() |
等同于CURDATE() |
CURRENT_DATE() → '2025-12-17' |
- 日期时间格式化
| 函数 |
意义 |
例子 |
| DATE_FORMAT(date, format) |
格式化日期时间 |
DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') → '2025-12-17 14:11:29' |
| UNIX_TIMESTAMP() |
返回当前时间戳 |
UNIX_TIMESTAMP() → 1734432689 |
| FROM_UNIXTIME(timestamp) |
时间戳转日期时间 |
FROM_UNIXTIME(1734432689) → '2025-12-17 14:11:29' |
主要是计算天数间隔,如注册距今天数,最近一次购买距今天数,或者两次购买时间间隔天数等,为后续分组分析做数据提取计算。
| 函数 |
意义 |
例子 |
| TIMESTAMPDIFF(unit, start_time, end_time) |
计算时间差(精确到秒) |
TIMESTAMPDIFF(MINUTE, '2025-12-17 14:00:00', NOW()) → 11 |
| DATEDIFF(end_date, start_date) |
计算日期差(天) |
DATEDIFF('2025-12-18', CURDATE()) → 1 |
| ADDDATE(date, INTERVAL expr type) |
日期加减 |
ADDDATE(CURDATE(), INTERVAL 1 DAY) → '2025-12-18' |
| SUBDATE(date, INTERVAL expr type) |
日期减法 |
SUBDATE(CURDATE(), INTERVAL 1 HOUR) → '2025-12-17 13:11:29' |
字符处理函数