# 1. DATE_ADD、DATE_SUB、INTERVAL 表达式在 MySQL 中的方言语法? A MySQL 用 interval 函数 B MySQL 用 DATE_ADD(date, INTERVAL expr unit) 做日期加减 ✓ 正确答案 C MySQL 用 + integer 直接加天数 D MySQL 不支持日期加减
# 2. DATE_TRUNC 与 DATE_PART 在 PostgreSQL 中的日期截取与提取用法? A DATE_TRUNC 提取字段 B DATE_TRUNC 截断到单位,DATE_PART 提取字段值,是 PostgreSQL 特有函数 ✓ 正确答案 C 两者等价 D DATE_PART 截断
# 3. 日期时间函数 NOW()、CURRENT_TIMESTAMP、CURRENT_DATE、CURRENT_TIME 在 PostgreSQL 与 MySQL 中的差异? A PostgreSQL 中 NOW() 等价 CURRENT_TIMESTAMP 且事务内不变,MySQL 是语句时间戳,CURRENT_DATE/CURRENT_TIME 返回日期/时间 ✓ 正确答案 B NOW() 只在 MySQL 存在 C 两者都返回 NULL D CURRENT_DATE 返回时间
# 4. 日期生成函数 generate_series(start, stop, step) 在 PostgreSQL 中的用法? A generate_series(start, stop, step) 可生成整数或日期序列,step 控制步长,常用于日期维度 ✓ 正确答案 B 只能生成整数 C 不能指定步长 D 只能生成 1..n
# 5. 日期算术,date + integer、date - date、date + interval 的内部存储(自 Unix 纪元起的偏移)? A date + integer 加小时 B date 存为字符串 C date 加减整数加秒 D PostgreSQL date 存为天数偏移,date+integer 加天、date-date 返回整数天、date+interval 得 timestamp ✓ 正确答案
# 6. DATEDIFF、DATE_DIFF 函数在 MySQL/SQL Server/PostgreSQL 中的差异? A 所有数据库相同 B PostgreSQL 有 DATEDIFF C MySQL DATEDIFF 返回天数,SQL Server DATEDIFF(unit,start,end) 指定单位,PostgreSQL 无 DATEDIFF 用减法 ✓ 正确答案 D SQL Server 无单位参数
# 7. 数学函数 ROUND、CEIL、FLOOR、TRUNC 在负数与零上的处理差异? A CEIL 向负无穷 B FLOOR 向零 C FLOOR 向下取整(-1.5→-2),TRUNC 向零截断(-1.5→-1),CEIL 向上(-1.5→-1),ROUND 四舍五入 ✓ 正确答案 D TRUNC 向下
# 8. PostgreSQL 中 to_char、to_date、to_timestamp 的格式化字符串? A to_char 格式化输出,to_date/to_timestamp 解析字符串,格式模板如 YYYY-MM-DD HH24:MI:SS ✓ 正确答案 B to_date 把值格式化为字符串 C to_timestamp 格式化 D 格式模板无关
# 9. RANDOM() 在 WHERE 中使用的陷阱(每行重新计算)? A RANDOM() 在 WHERE 中只算一次 B RANDOM() 每行重算导致结果不稳定 ✓ 正确答案 C RANDOM() 是 immutable D RANDOM() 不能用于 WHERE
# 10. 三角函数 SIN、COS、TAN 的弧度制? A SIN/COS/TAN 用弧度制,角度需用 RADIANS() 转换 ✓ 正确答案 B SIN 用角度制 C 三角函数不用参数 D 三角函数已废弃
# 11. 对数函数 LOG、LN、LOG10 的差异? A LN 以 10 为底 B LN 自然对数、LOG10 以 10 为底、LOG 默认底数因数据库而异(PostgreSQL 10,MySQL e) ✓ 正确答案 C LOG 恒以 e 为底 D LOG10 自然对数
# 12. JSON 与 JSONB 在 PostgreSQL 中的存储差异,JSONB 解析为二进制,去重键排序? A JSON 按文本原样存储,JSONB 解析为二进制、去重键、按键排序、支持索引,性能更好 ✓ 正确答案 B 两者存储相同 C JSONB 保留原始顺序 D JSON 支持索引
# 13. JSON 修改函数 jsonb_set、jsonb_insert、jsonb_delete 的用法? A jsonb_set 删除键 B jsonb_delete 替换 C 三者等价 D jsonb_set 按路径替换、jsonb_insert 插入、jsonb_delete 删除,路径用数组表示 ✓ 正确答案
# 14. JSON 聚合函数 json_agg、jsonb_agg、json_object_agg 的差异? A json_agg 返回对象 B json_object_agg 返回数组 C 三者都返回数组 D json_agg/jsonb_agg 返回数组、json_object_agg 返回对象,jsonb 版本性能更好 ✓ 正确答案
# 15. JSON 路径操作符(->、->>、#>、#>>)的语义与索引支持? A -> 返回 text B 这些操作符都走 GIN C -> 与 ->> 等价 D -> 返回 json、->> 返回 text、#>/#>> 按路径访问,索引需表达式索引或 GIN ✓ 正确答案
# 16. JSONB 包含(@>)、包含于(<@)、键存在(?)、任意顶层键(?|)、所有顶层键(?&)操作符的语义? A @> 判断键存在 B ? 判断包含 C @> 包含、<@ 包含于、? 键存在、?| 任意键、?& 所有键,且 @> 与 ? 系列可走 GIN 索引 ✓ 正确答案 D @> 不能走索引
# 17. JSONB 索引(GIN on jsonb)的索引策略,jsonb_ops 与 jsonb_path_ops 的差异? A jsonb_ops 索引键和值、支持多操作符、体积大;jsonb_path_ops 只索引路径+值、体积小、@> 快但不支持 ?/?|/?& 键存在操作符 ✓ 正确答案 B 两者等价 C jsonb_path_ops 支持所有操作符 D jsonb_ops 体积最小
# 18. JSONB 路径查询(jsonb_path_query、jsonb_path_exists)的 SQL/JSON 标准支持? A 两者都返回布尔值 B jsonb_path_query 按 SQL/JSON 路径返回匹配值,jsonb_path_exists 返回布尔值,支持 $、.、[*]、?() 路径语法 ✓ 正确答案 C 两者都不支持路径 D jsonb_path_exists 返回数组
# 19. JSON_TABLE 函数(SQL:2016)在 PostgreSQL、MySQL、Oracle 中的实现差异? A 所有数据库原生支持 B PostgreSQL 原生完整支持 C Oracle/MySQL 支持 JSON_TABLE,PostgreSQL 原生不支持,需用 jsonb_to_recordset 等模拟 ✓ 正确答案 D JSON_TABLE 不是标准
# 20. 如何通过 EXPLAIN 判断 JSONB 路径查询(jsonb_path_exists、@?/@> 操作符)是否命中 GIN 索引?为什么 jsonb_path_ops 策略只能加速部分路径/包含表达式? A 无法检查 B 用 EXPLAIN 看 Index Scan/GIN 节点判断命中,jsonb_path_ops 不支持 ? 系列键存在操作符,但支持 @>、@?、@@;jsonb_path_exists 函数本身不走索引,需改写为 @? 操作符 ✓ 正确答案 C jsonb_path_ops 支持所有操作符 D 路径查询总走索引
# 21. PostgreSQL 原生并不提供 JSON_SCHEMA_VALID 函数,工程上如何借助 pg_jsonschema 扩展(jsonb_matches_schema / json_matches_schema)实现 JSON Schema 校验? A PostgreSQL 原生支持 B 无法校验 C 需安装 pg_jsonschema 扩展,用 jsonb_matches_schema/json_matches_schema 按 JSON Schema 校验 ✓ 正确答案 D 只能外部校验
# 22. JSON 与关系表的建模取舍,何时用 JSON 列、何时拆表? A JSON 列总是更好 B 灵活多变、低频查询用 JSON 列;结构化、高频查询、强约束用关系表,可混合建模 ✓ 正确答案 C 拆表总是更好 D JSON 列不能存储
# 23. SQL/JSON 标准(JSON_EXISTS/JSON_QUERY/JSON_VALUE 及 ERROR/NULL/EMPTY 错误处理子句)与 PostgreSQL 现有实现的主要兼容性差距有哪些? A PostgreSQL 完整支持标准 B PostgreSQL 用 jsonb_path_* 替代 JSON_EXISTS/QUERY/VALUE,错误处理子句(ON ERROR/ON EMPTY)支持不完整 ✓ 正确答案 C 无差距 D PostgreSQL 不支持 JSON 路径
# 24. JSONB 与 HSTORE 的取舍? A 两者等价 B JSONB 支持嵌套、数组、类型与路径查询、GIN 索引,功能强;HSTORE 是简单键值文本,功能有限 ✓ 正确答案 C HSTORE 支持嵌套 D JSONB 功能有限
# 25. JSONB 与列存储(jsonb 列存)的取舍? A 两者等价 B JSONB 行存适合检索/更新/灵活查询,列存储适合分析/列聚合/大扫描,按场景取舍 ✓ 正确答案 C 列存适合频繁更新 D JSONB 适合分析扫描
# 26. MySQL 中 JSON_EXTRACT、JSON_OBJECT、JSON_ARRAY 的方言? A JSON_EXTRACT 构造对象 B JSON_EXTRACT 提取路径值、JSON_OBJECT 构造对象、JSON_ARRAY 构造数组,-> 返回 JSON、->> 返回字符串 ✓ 正确答案 C 三者都提取 D -> 返回字符串
# 27. MySQL 中 JSON_TABLE 的实现差异? A MySQL 不支持 JSON_TABLE B JSON_TABLE 不能展开 C 与 Oracle 完全相同 D MySQL 8 的 JSON_TABLE 用 COLUMNS/PATH 定义列、支持 NESTED PATH,语法较 Oracle 简单 ✓ 正确答案
# 28. SQL Server 中 JSON_VALUE、JSON_QUERY 的差异? A 两者等价 B JSON_QUERY 返回标量 C JSON_VALUE 返回对象 D JSON_VALUE 返回标量值,JSON_QUERY 返回 JSON 对象/数组,取嵌套结构需用 JSON_QUERY ✓ 正确答案
# 29. SQL/JSON 路径语言的数值语义(基于 IEEE 754 双精度)与 JSON 数字精度限制? A 基于十进制定点 B 数值无限精确 C 基于 IEEE 754 双精度,大整数/高精度数字可能丢失精度 ✓ 正确答案 D 不支持数值运算
# 30. jsonb_path_query('$.a[*].b', jsonb) 的 SQL/JSON 路径语法? A $ 表示数组 B $ 根、.a 顶层键、[*] 数组遍历、.b 属性,返回 a 数组中每个元素的 b 值 ✓ 正确答案 C [*] 表示对象 D 路径只能访问根
# 31. 如何在 JSONB 上做部分索引(partial index)? A 部分索引无 WHERE B 部分索引带 WHERE 条件,JSONB 上可用 @>、? 等条件限定索引范围,缩小体积 ✓ 正确答案 C 部分索引只用于普通列 D JSONB 不能建部分索引
# 32. jsonb_path_query/jsonb_path_exists 的 lax 与 strict 模式在路径缺失、类型不匹配时的行为差异是什么? A 两者等价 B lax 宽松容错(缺失键/类型不匹配自动处理),strict 严格校验(不匹配报错),默认 lax ✓ 正确答案 C strict 容错 D 默认 strict
# 33. PostgreSQL 全文检索的两种类型,tsvector 与 tsquery 的生成与匹配? A tsvector 是文档分词向量、tsquery 是查询,用 @@ 匹配,to_tsvector/to_tsquery 生成 ✓ 正确答案 B tsvector 是查询 C 两者用 = 匹配 D tsquery 是文档
# 34. 全文检索的权重(A、B、C、D)设置与排序,ts_rank 函数? A tsvector 词素可带 A/B/C/D 权重(A 最高),ts_rank 计算相关度用于排序,可调整权重系数 ✓ 正确答案 B 权重 A 最低 C ts_rank 返回布尔值 D 权重不影响排序
# 35. 全文检索的索引选择,GIN on tsvector 与 GIN on to_tsvector(col) 的差异? A 两者等价 B 表达式索引不能用于全文 C tsvector 列直接 GIN 索引,text 列需表达式索引 GIN on to_tsvector(col),查询需用相同表达式命中 ✓ 正确答案 D text 列无法建索引
# 36. 字典(text search dictionary)的语言支持,simple、english、chinese_zh 的差异? A simple 做词干化 B 中文用 simple 即可 C english 不分词 D simple 不做处理、english 词干化+停用词、中文需专用分词字典(chinese_zh) ✓ 正确答案
# 37. 高亮(ts_headline)函数的使用与性能? A ts_headline 返回布尔值 B ts_headline 返回高亮匹配词的片段,性能开销较高,建议在结果集较小处调用 ✓ 正确答案 C ts_headline 用于分词 D ts_headline 无性能问题
# 38. MySQL FULLTEXT 索引与 PostgreSQL GIN 的差异? A 两者语法相同 B PostgreSQL 无全文检索 C MySQL FULLTEXT 用 MATCH AGAINST,PostgreSQL 用 GIN on tsvector + @@,分词与扩展性不同 ✓ 正确答案 D MySQL 支持中文分词
# 39. PostgreSQL 中 pg_trgm 扩展的模糊匹配与全文检索的取舍? A pg_trgm 适合语义检索 B 两者等价 C 全文检索适合近似匹配 D pg_trgm 适合近似/子串匹配,全文检索适合关键词/语义检索,中文用全文检索分词更合适 ✓ 正确答案
# 40. 中文分词的 jieba、HanLP、IK 在 PostgreSQL 中的集成? A PostgreSQL 原生支持中文分词 B 通过 zhparser/pg_jieba 等扩展集成 jieba 等分词库,配置为中文分词器 ✓ 正确答案 C 中文无法分词 D 用 simple 字典即可
# 41. GIN 与 GiST 索引在全文检索中的取舍? A GIN 查询快但体积大、构建慢,GiST 体积小、构建快但查询慢且 lossy,查询优先用 GIN ✓ 正确答案 B GIN 体积小 C GiST 查询快 D 两者相同
# 42. MySQL 中 MATCH AGAINST 的语法? A MATCH AGAINST 无需索引 B 只支持布尔模式 C MATCH(cols) AGAINST(expr) 支持自然语言/布尔/查询扩展模式,需 FULLTEXT 索引 ✓ 正确答案 D 语法是 CONTAINS
# 43. PostgreSQL 中如何配置自定义字典? A PostgreSQL 不能自定义字典 B 用 CREATE TEXT SEARCH DICTIONARY 创建同义词/停用词/Ispell 字典,再组合成 TS CONFIGURATION ✓ 正确答案 C 只能内置 D 字典配置不影响分词
# 44. tsquery 的 to_tsquery、plainto_tsquery、phraseto_tsquery 三种构造差异? A 三者等价 B phraseto_tsquery 用 OR C plainto_tsquery 支持布尔 D to_tsquery 支持布尔运算符、plainto_tsquery 用 AND 连接词、phraseto_tsquery 短语顺序匹配 ✓ 正确答案
# 45. websearch_to_tsquery 的语法(PostgreSQL 11+)? A 它不支持引号 B 它是 PostgreSQL 6 特性 C 它只支持单词 D 它支持网页风格语法:词 AND、引号短语、- 排除、OR 或,适合用户输入 ✓ 正确答案
# 46. EXTRACT(YEAR FROM ts)、EXTRACT(EPOCH FROM ts) 的语法与返回值类型? A EXTRACT(YEAR FROM ts) 返回年份、EXTRACT(EPOCH FROM ts) 返回 Unix 纪元秒数,返回 numeric ✓ 正确答案 B EXTRACT(YEAR FROM ts) 返回时间戳 C EPOCH 返回月份 D 返回 text
# 47. 年龄计算 AGE(timestamp, timestamp) 与 EXTRACT(YEAR FROM age) 的语义? A AGE 返回整数 B AGE 无参数 C EXTRACT 返回 interval D AGE 返回 interval(年/月/日),EXTRACT(YEAR FROM age) 提取年数用于算整岁 ✓ 正确答案
# 48. 时区处理,TIMESTAMP 与 TIMESTAMPTZ 的存储与转换规则?AT TIME ZONE 子句的语义? A TIMESTAMPTZ 存墙钟时间 B TIMESTAMP 涉及时区 C 两者等价 D TIMESTAMP 存墙钟时间,TIMESTAMPTZ 存 UTC 显示按会话时区,AT TIME ZONE 做时区转换 ✓ 正确答案
# 49. RANDOM()、gen_random_uuid() 的用法与性能? A RANDOM() 返回 UUID B 两者等价 C gen_random_uuid() 返回浮点 D RANDOM() 返回随机浮点、gen_random_uuid() 返回随机 UUID,随机 UUID 作主键会碎片化不如自增 ✓ 正确答案
# 50. CURRENT_TIMESTAMP 与 LOCALTIMESTAMP 的差异? A CURRENT_TIMESTAMP 返回 timestamptz(含时区),LOCALTIMESTAMP 返回 timestamp(无时区) ✓ 正确答案 B 两者等价 C LOCAL 返回带时区 D 两者都无时区
# 51. TIMESTAMP 字面量与 TIMESTAMPTZ 的差异? A 两者等价 B TIMESTAMPTZ 无时区 C 两者都存 UTC D TIMESTAMP 字面量无时区,TIMESTAMPTZ 字面量含时区偏移存 UTC ✓ 正确答案
# 52. 时区转换 AT TIME ZONE 'Asia/Shanghai' 的语义? A 它总是返回 timestamp B 它不做转换 C 它总是返回 timestamptz D timestamp AT TIME ZONE 解释为指定时区转 UTC(返回 timestamptz),timestamptz AT TIME ZONE 显示指定时区(返回 timestamp) ✓ 正确答案
# 53. jsonb_array_elements 的用法(展开数组)? A jsonb_array_elements 把 JSONB 数组展开为多行,每行一个 jsonb 元素 ✓ 正确答案 B 它把数组聚合成一行 C 它返回 text D 它只能用于 WHERE
# 54. ABS(-5) 的返回值?SIGN(-5) 的返回值? A SIGN 返回绝对值 B ABS(-5)=-5,SIGN(-5)=1 C 两者都返回 5 D ABS(-5)=5,SIGN(-5)=-1 ✓ 正确答案
# 55. DATE 字面量的语法(如 DATE 'YYYY-MM-DD')? A 语法是 DATE 'YYYY-MM-DD' ✓ 正确答案 B 语法是 DATE "YYYY-MM-DD" C 语法是 DATE(YYYY-MM-DD) D 无字面量语法
# 56. EXTRACT(DOW FROM date) 的返回(0=Sunday)? A 1=Sunday B 0=Monday C 0=Sunday,1=Monday,...,6=Saturday ✓ 正确答案 D 返回英文星期名
# 57. POWER(2, 10) 的返回值?SQRT(2) 的浮点精度? A POWER(2,10)=20 B POWER(2,10)=1024,SQRT(2) 是浮点近似值有精度误差 ✓ 正确答案 C SQRT(2) 精确 D 两者都返回整数
# 58. 生成序列 generate_series(1, 10) 与 generate_series(1, 10, 2) 的差异? A 前者步长 1 生成 1..10,后者步长 2 生成 1,3,5,7,9 ✓ 正确答案 B 两者等价 C 后者步长 1 D 两者都生成偶数
# 59. jsonb_each_text 的展开用法? A 它把数组展开 B jsonb_each_text 把 JSONB 对象展开为 (key, value) 两列多行,value 为 text ✓ 正确答案 C 它返回单行 D 它聚合对象
# 60. to_tsvector('english', 'hello world') 的返回值? A 返回 text B 返回 tsvector,含词素与位置(如 'hello':1 'world':2) ✓ 正确答案 C 返回数组 D 返回布尔值
# 63. NOW() 返回的事务时间戳特性? A NOW() 是实时时钟 B NOW() 每次调用都不同 C NOW() 是事务开始时间戳,事务内不变 ✓ 正确答案 D NOW() 与 clock_timestamp() 等价
# 65. jsonb_pretty 函数的作用? A 它返回 jsonb B 它压缩 JSON C jsonb_pretty 把 JSONB 格式化为缩进美观的 text,用于调试显示 ✓ 正确答案 D 它删除键
# 66. ts_rank 的参数含义? A ts_rank 只有一个参数 B weights 是布尔值 C ts_rank(vector, query, weights) 计算相关度,weights 是 A/B/C/D 权重系数数组 ✓ 正确答案 D ts_rank 返回布尔值
# 67. tsvector 的更新触发器模式? A 触发器用于删除 B 用 BEFORE INSERT OR UPDATE 触发器自动更新 tsvector 列,查询直接使用,避免每次分词 ✓ 正确答案 C tsvector 不能存列 D 触发器无意义