多表查询
表关系
| 关系 | 说明 | 示例 |
|---|---|---|
| 一对一 | 一条记录对应一条记录 | 用户-用户详情 |
| 一对多 | 一条记录对应多条记录 | 部门-员工 |
| 多对多 | 多条记录对应多条记录 | 学生-课程 |
连接查询
内连接联合查询
子查询
标量子查询(返回单个值)常用函数
字符串函数
| 函数 | 说明 | 示例 |
|---|---|---|
| CONCAT(s1, s2, …) | 拼接字符串 | CONCAT(‘Hello’, ‘World’) |
| LENGTH(s) | 字符串长度 | LENGTH(‘Hello’) → 5 |
| UPPER(s) / LOWER(s) | 大小写转换 | UPPER(‘hello’) → ‘HELLO’ |
| TRIM(s) | 去除首尾空格 | TRIM(’ hello ’) → ‘hello’ |
| SUBSTRING(s, start, len) | 截取子串 | SUBSTRING(‘Hello’, 1, 3) → ‘Hel’ |
| REPLACE(s, old, new) | 替换 | REPLACE(‘abc’, ‘a’, ‘x’) → ‘xbc’ |
数值函数
| 函数 | 说明 | 示例 |
|---|---|---|
| CEIL(x) | 向上取整 | CEIL(1.5) → 2 |
| FLOOR(x) | 向下取整 | FLOOR(1.5) → 1 |
| ROUND(x, d) | 四舍五入 | ROUND(3.1415, 2) → 3.14 |
| MOD(x, y) | 取模 | MOD(7, 3) → 1 |
| RAND() | 随机数 | RAND() → 0.xxx |
| ABS(x) | 绝对值 | ABS(-5) → 5 |
日期函数
| 函数 | 说明 | 示例 |
|---|---|---|
| NOW() | 当前日期时间 | 2024-01-01 12:00:00 |
| CURDATE() | 当前日期 | 2024-01-01 |
| CURTIME() | 当前时间 | 12:00:00 |
| YEAR(date) | 提取年 | YEAR(‘2024-01-01’) → 2024 |
| MONTH(date) | 提取月 | MONTH(‘2024-01-01’) → 1 |
| DAY(date) | 提取日 | DAY(‘2024-01-01’) → 1 |
| DATEDIFF(d1, d2) | 日期差(天) | DATEDIFF(‘2024-01-10’, ‘2024-01-01’) → 9 |
| DATE_ADD(date, INTERVAL n unit) | 日期加减 | DATE_ADD(NOW(), INTERVAL 7 DAY) |
| DATE_FORMAT(date, format) | 日期格式化 | DATE_FORMAT(NOW(), ‘%Y-%m-%d’) |
流程控制函数
视图
视图是一个虚拟表,本身不存储数据,是对 SQL 查询的封装。- 简化复杂查询
- 数据安全(隐藏敏感字段)
- 数据独立性(表结构变化,只需修改视图)
存储过程
存储过程是一组预编译的 SQL 语句,存储在数据库中,可重复调用。基本语法
变量
条件与循环
游标
触发器
触发器在 INSERT/UPDATE/DELETE 操作前后自动执行。| 触发时机 | 可用变量 |
|---|---|
| INSERT | NEW |
| UPDATE | OLD, NEW |
| DELETE | OLD |