XML、数组、图查询(SQL/PGQ)与排序规则

共 47 题
#

1. PostgreSQL 数组类型,ARRAY[1,2,3]、array_cat、array_append 的函数?

A ARRAY[1,2,3] 构造数组,array_cat 连接数组,array_append 追加元素 ✓ 正确答案
B array_cat 追加元素
C 数组不支持
D 只能用文本数组
#

2. array_agg、array_agg(DISTINCT col)、array_agg(col ORDER BY col) 的差异?

A 三者等价
B array_agg 聚合数组,DISTINCT 去重、ORDER BY 排序,可组合 ✓ 正确答案
C ORDER BY 不去重
D DISTINCT 排序
#

3. unnest 函数将数组展开为行的用法?

A unnest 把多行聚合为数组
B unnest 只能单列
C unnest 把数组展开为多行,可用 FROM 或 SELECT ✓ 正确答案
D unnest 删除数组
#

4. 数组的索引(GIN on array)与查询操作符(&&、@>、<@、=any)的语义?

A && 表示包含
B @> 表示交集
C && 交集、@> 包含、<@ 包含于,数组 GIN 索引加速这些操作 ✓ 正确答案
D <@ 表示包含
#

5. JSONB 与数组的建模取舍?

A 两者等价
B JSONB 适合简单集合
C 数组适合嵌套
D 数组适合同质集合、元素匹配,JSONB 适合复杂嵌套多变结构,按数据特性取舍 ✓ 正确答案
#

6. PostgreSQL 中数组元素的可空性?

A 数组元素不能为 NULL
B 元素 NULL 被自动删除
C 数组整体不能为 NULL
D 数组元素可为 NULL,数组整体也可为 NULL,两者不同 ✓ 正确答案
#

7. SELECT ARRAY[1,2,3] 的字面量构造?

A 返回 text
B 报错
C 返回单行
D 返回 integer[] 数组 {1,2,3} ✓ 正确答案
#

8. 数组与子查询的转换,ARRAY(SELECT col FROM t)?

A 它把数组转行
B 它用于删除
C 子查询必须多列
D 它把单列子查询转成数组 ✓ 正确答案
#

9. 递归 CTE 在图查询中的等价应用?

A 递归 CTE 不能做图查询
B 递归 CTE 只能遍历树
C 图查询必须用 SQL/PGQ
D 递归 CTE 沿边遍历实现可达性/路径查询,是 SQL 中的图查询方式 ✓ 正确答案
#

10. PostgreSQL 中如何用 ltree 扩展模拟树形结构?

A ltree 用点分隔路径表示树节点,支持祖先/后代查询,配 GIST 索引 ✓ 正确答案
B ltree 是数字类型
C ltree 不能建索引
D ltree 与数组无关
#

11. PostgreSQL 中 Apache AGE 扩展的图查询支持?

A AGE 是 PostgreSQL 图扩展,支持 Cypher 语法与 SQL 混合做属性图查询 ✓ 正确答案
B AGE 是全文检索扩展
C AGE 不能建图
D AGE 只支持关系表
#

12. 排序规则(Collation)如何分别影响 ORDER BY 顺序、等值比较与范围扫描?为什么 ci(大小写不敏感)规则下 'A' 与 'a' 相等会让 DISTINCT/GROUP BY 只保留一行?

A Collation 只影响排序
B ci 下 'A' 与 'a' 不同
C 等值比较不受影响
D Collation 影响 ORDER BY 顺序、等值比较与范围扫描,ci 下 'A'='a' 使 DISTINCT/GROUP BY 合并为一行 ✓ 正确答案
#

13. MySQL 的 utf8mb4_general_ci 与 utf8mb4_0900_ai_ci 在权重规则上有何差异(简化规则 vs 基于 UCA 9.0.0、ai 表示重音不敏感)?为什么 general_ci 对部分字符的比较不符合语言习惯?

A 两者等价
B 0900_ai_ci 更简化
C general_ci 简化规则、部分字符比较不符合语言习惯;0900_ai_ci 基于 UCA 9.0.0、重音不敏感、更符合语言习惯 ✓ 正确答案
D general_ci 基于 UCA
#

14. 列级、表达式级(COLLATE 子句)与数据库级排序规则的优先级如何裁决?JOIN 或 UNION 两侧 collation 冲突时报 Illegal mix of collations 应如何解决?

A 数据库级优先级最高
B COLLATE 子句 > 列级 > 表级 > 数据库级,冲突时用显式 COLLATE 或统一列 collation 解决 ✓ 正确答案
C 列级优先级最高
D 冲突可忽略
#

15. PostgreSQL 为什么要跟踪 ICU collation 版本(pg_database_collation_actual_version、ALTER COLLATION ... REFRESH VERSION)?glibc/ICU 升级后不刷新会给 B-Tree 索引正确性带来什么风险?

A ICU/glibc 升级改变排序规则,不刷新会令 B-Tree 索引顺序与比较不一致,可能导致错误,需 REFRESH VERSION 并重建索引 ✓ 正确答案
B collation 版本与索引无关
C 无需跟踪
D 升级不影响 collation
#

16. 为什么默认 collation 下的 B-Tree 索引不能加速 LIKE 'abc%'?text_pattern_ops 索引或 C/POSIX collation 列如何解决前缀匹配走索引?

A 默认 collation 下 LIKE 前缀总能走索引
B 语言排序与 LIKE 前缀顺序不一致致索引失效,text_pattern_ops 或 C/POSIX collation 可解决 ✓ 正确答案
C text_pattern_ops 无作用
D 与 collation 无关
#

17. 二进制排序(utf8mb4_bin、C/POSIX)与语言学排序在比较结果、索引顺序与性能上的本质差异是什么?为什么二进制排序最快但顺序“不自然”?

A 两者等价
B 二进制符合语言习惯
C 语言学排序更快
D 二进制按字节码比较、最快但大小写/重音不归组顺序不自然;语言学按权重符合语言习惯但慢 ✓ 正确答案
#

18. PostgreSQL 的 citext 扩展与“COLLATE + LOWER() 表达式索引”实现大小写不敏感查询时,在实现原理、可组合性与性能上有何差异?

A citext 类型层自动忽略大小写,LOWER() 表达式索引需显式 LOWER(col) 且写法需一致,实现路径不同 ✓ 正确答案
B 两者等价
C citext 需要显式 LOWER
D 表达式索引更简单
#

19. MySQL 中 utf8mb3 与 utf8mb4 表关联时,为什么隐式字符集/排序规则转换可能导致索引失效?如何在 EXPLAIN 中识别 using where; Using temporary 与 convert()?

A 隐式转换使列被 convert() 包裹导致索引失效,EXPLAIN 可看到 Using where/Using temporary/convert() 等迹象 ✓ 正确答案
B 隐式转换不影响索引
C utf8mb4 是 utf8mb3 子集
D 无法识别
#

20. 什么是非确定性排序规则(nondeterministic collation,PostgreSQL 12+)?它对 LIKE、模式匹配与索引使用有哪些限制?

A 它无限制
B 它不能忽略大小写
C 非确定性 collation 大小写/重音不敏感,但 LIKE/模式匹配与 B-Tree 索引使用受限 ✓ 正确答案
D 它对索引无影响
#

21. SQL Server 的 PIVOT(如 SUM(amount) FOR quarter IN ([Q1],[Q2],[Q3],[Q4]))如何工作?它对聚合函数单一性与 IN 列必须静态列出有哪些限制?

A PIVOT 支持多个聚合函数
B IN 列表可动态
C PIVOT 用单聚合函数 FOR 列 IN 静态列表行转列,限制是单聚合、IN 列必须静态列出 ✓ 正确答案
D PIVOT 无限制
#

22. 如何用条件聚合(SUM(CASE WHEN quarter='Q1' THEN amount END) + GROUP BY)实现与 PIVOT 等价的行转列?为什么这是跨数据库最可移植的方案?

A 它不可移植
B 它需 PIVOT
C 它只能用于 SQL Server
D SUM(CASE WHEN ... THEN ... END) + GROUP BY 实现行转列,因 CASE 是标准语法,跨数据库最可移植 ✓ 正确答案
#

23. PostgreSQL tablefunc 扩展的 crosstab(sql, categories_sql) 如何行转列?为什么必须用 AS (row_name text, q1 int, ...) 预先声明输出结构?

A 无需声明输出结构
B crosstab 源 SQL 返回 row_name/category/value,必须用 AS 预先声明输出列结构,因列数/类型无法自动推断 ✓ 正确答案
C 输出结构自动推断
D crosstab 不能行转列
#

24. 列转行(UNPIVOT)在 SQL Server/Oracle(UNPIVOT 子句)与 PostgreSQL(LATERAL + VALUES 或 unnest)中分别如何实现?

A SQL Server/Oracle 用 UNPIVOT,PostgreSQL 用 LATERAL + VALUES 或 unnest 实现列转行 ✓ 正确答案
B 所有数据库用 UNPIVOT
C PostgreSQL 有 UNPIVOT
D 无法列转行
#

25. 列数动态未知时,行转列有哪些方案(拼接动态 SQL vs 聚合为 JSON/数组输出)?二者在类型安全与客户端处理上的取舍是什么?

A 动态 SQL 列名运行时确定(类型安全差)或聚合为 JSON/数组(类型安全、灵活),按客户端需求取舍 ✓ 正确答案
B 只能动态 SQL
C 只能 JSON
D 动态 SQL 类型安全
#

26. UNPIVOT 默认会丢弃值为 NULL 的行,INCLUDE NULLS 与 EXCLUDE NULLS 的语义差异是什么?用 LATERAL VALUES 模拟时如何保留 NULL?

A UNPIVOT 保留 NULL 行
B LATERAL 丢弃 NULL
C INCLUDE NULLS 丢弃
D UNPIVOT 默认丢弃 NULL 行,INCLUDE NULLS 保留;LATERAL VALUES 天然保留 NULL ✓ 正确答案
#

27. 如何用 FILTER (WHERE ...) + GROUP BY 或 JSON_OBJECTAGG/JSONB_OBJECT_AGG 实现行转列聚合?与固定列 PIVOT 在结果形态上有何不同?

A 两者结果形态相同
B FILTER 条件聚合生成固定列表,JSON_OBJECTAGG 生成 JSON 对象(键值对),结果形态不同 ✓ 正确答案
C FILTER 生成 JSON
D JSON_OBJECTAGG 生成固定列
#

28. crosstab 对源 SQL 的输出顺序(row_name, category, value)有什么要求?某行缺少某个 category 时结果如何填充?

A 无需排序
B 顺序任意
C 缺失 category 报错
D 源 SQL 返回 row_name/category/value 且按 row_name 排序,缺失 category 填 NULL ✓ 正确答案
#

29. Oracle 的 PIVOT XML 如何通过 ANY 支持动态列名?普通 PIVOT 的 IN 列表为什么不允许使用表达式或子查询?

A 普通 PIVOT 支持动态列
B PIVOT XML 输出固定列
C 普通 PIVOT IN 列表必须静态(列名编译期固定),PIVOT XML 用 ANY/子查询支持动态列并输出 XML ✓ 正确答案
D IN 列表可用子查询
#

30. 多维数组的支持,matrix[[1,2],[3,4]] 的访问与限制?

A 多维数组维度可任意
B 下标从 0 开始
C 支持锯齿数组
D matrix[[1,2],[3,4]] 是二维数组,用双下标访问,维度必须规则(不能锯齿) ✓ 正确答案
#

31. ANY(array) 与 ALL(array) 的用法?

A 两者等价
B ANY 全部满足
C ANY 存在一个满足、ALL 全部满足,x > ANY 大于最小、x > ALL 大于最大 ✓ 正确答案
D ALL 存在一个满足
#

32. array_length 与 array_dims 的差异?

A array_length 返回指定维度整数长度,array_dims 返回维度边界字符串 ✓ 正确答案
B array_length 返回字符串
C 两者等价
D array_dims 返回整数
#

33. array_to_string 的分隔符参数?

A 无分隔符参数
B 它返回数组
C NULL 元素保留空串
D array_to_string(array, delimiter) 用分隔符连接元素,NULL 元素默认跳过,可指定 null_string ✓ 正确答案
#

34. unnest 在 FROM 子句中的使用(LATERAL 隐式)?

A unnest 不能用于 FROM
B unnest 作表函数在 FROM 中隐式 LATERAL,可引用左侧列展开数组列 ✓ 正确答案
C 无 LATERAL
D 只能引用自身
#

35. GRAPH_TABLE、MATCH 子句、路径模式(-/-、-/-/->)的语法?

A GRAPH_TABLE + MATCH 定义路径模式,- 无向边、-> 有向边、-/-/-> 有向路径 ✓ 正确答案
B -> 表示无向边
C - 表示有向边
D MATCH 在 WHERE 中
#

36. SQL/PGQ 的属性图(Property Graph)定义(CREATE PROPERTY GRAPH)?

A 它只定义顶点
B 它定义关系表
C CREATE PROPERTY GRAPH 用 VERTEX TABLES 定义顶点、EDGE TABLES 定义边(含 SOURCE/DESTINATION 键) ✓ 正确答案
D 不能定义标签
#

37. 图查询与图数据库(Neo4j、TigerGraph)的取舍,哪些图计算适合 SQL?

A 图数据库适合简单遍历
B SQL 适合简单路径/邻接/有限遍历,图数据库适合大规模复杂图算法,按规模与复杂度取舍 ✓ 正确答案
C SQL 适合 PageRank
D 两者等价
#

38. XML 数据类型在 PostgreSQL、SQL Server、Oracle 中的支持差异?

A 三者功能相同
B 各有不同但 PostgreSQL 最强
C PostgreSQL 功能最完整
D Oracle/SQL Server XML 功能完整(XQuery/XMLTABLE),PostgreSQL 支持较基础 ✓ 正确答案
#

39. XMLTABLE 函数(SQL:2003)将 XML 转为关系行的用法?

A 它把关系转 XML
B 它不能转行
C XMLTABLE 按 XPath 展开 XML 并定义 COLUMNS 转成关系行 ✓ 正确答案
D 它只用于存储
#

40. XPath 查询在 PostgreSQL(xpath 函数)中的语法?

A xpath(xpath_expr, xml, namespaces) 按 XPath 提取节点,返回 xml 数组 ✓ 正确答案
B xpath 返回 text
C 它聚合 XML
D 它不支持 XPath
#

41. XMLNAMESPACES 子句的用法?

A 它删除命名空间
B 它声明 XML 命名空间供 XPath/XMLTABLE 使用 ✓ 正确答案
C 它用于 XML 存储
D 它聚合节点
#

42. 图遍历的最短路径算法在 SQL 中的实现?

A 用 ORDER BY 求最短
B 用递归 CTE 做 BFS 逐层扩展,首次到达目标即最短路径 ✓ 正确答案
C 用 MIN 求最短
D 无法实现
#

43. MATCH (n:Person)-[r:KNOWS]->(m:Person) 在 SQL/PGQ 中的翻译?

A Cypher 的 MATCH 路径模式放入 SQL/PGQ 的 GRAPH_TABLE MATCH 子句实现 ✓ 正确答案
B Cypher 不能翻译到 SQL
C 两者语法相同
D SQL/PGQ 用 Cypher 语法
#

44. SQL/PGQ 与 GQL(Graph Query Language)的标准化关系?

A 两者无关
B SQL/PGQ 是 SQL 内嵌图查询标准,GQL 是独立图查询语言标准,共享属性图模型 ✓ 正确答案
C GQL 是 SQL 扩展
D SQL/PGQ 是独立语言
#

45. ltree 的路径查询操作符(~、?、@)的语义?

A ? 表示祖先
B @> 表示后代
C <@ 表示祖先
D ~ 匹配 lquery 模式、@> 祖先、<@ 后代 ✓ 正确答案
#

46. SQL/PGQ(Property Graph Queries,SQL:2023)的核心概念,节点、边、路径模式?

A 只有节点
B 无路径模式
C SQL/PGQ 核心概念是节点、边、路径模式,用 GRAPH_TABLE + MATCH 查询 ✓ 正确答案
D 只有边
#

47. 图数据库 vs 关系数据库的选型依据?

A 图库适合复杂关系/多跳遍历/图算法,关系库适合结构化/事务/聚合报表,按关系复杂度与查询类型选型 ✓ 正确答案
B 关系库适合复杂图遍历
C 图库适合事务
D 两者等价