从零实现一个数据库
| 优先级 (高 → 低) | 运算符 | 说明 | 结合性 | ||
|---|---|---|---|---|---|
| 1 | () |
括号,改变优先级 | - | ||
| 2 | . |
表.列 访问 | 左结合 | ||
| 3 | :: (Postgres) / CAST(expr AS type) |
类型转换 | 左结合 | ||
| 4 | - (单目负号)、~ (按位取反)、NOT |
一元运算符 | 右结合 | ||
| 5 | ^ (幂运算, 部分 SQL 方言如 PostgreSQL 支持) |
幂运算 | 右结合 | ||
| 6 | * / % |
乘、除、取模 | 左结合 | ||
| 7 | + - |
加、减 | 左结合 | ||
| 8 | ` | ` (字符串拼接, PostgreSQL / Oracle) | 字符串连接 | 左结合 | |
| 9 | =, <=> (安全等于, MySQL), <>, !=, <, <=, >, >=, LIKE, ILIKE, IN, BETWEEN, IS NULL, IS NOT NULL |
比较运算 | 无结合性(不能链式写) | ||
| 10 | AND |
逻辑与 | 左结合 | ||
| 11 | OR |
逻辑或 | 左结合 | ||
| 12 | CASE ... WHEN ... THEN ... ELSE ... END |
条件表达式 | - | ||
| 13 | =, := (赋值,部分方言如 MySQL 支持) |
赋值 | 右结合 |