

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Clean Rooms 加密计算进行查询
<a name="crypto-computing-queries"></a>

本主题提供有关编写查询的信息，这些查询使用已使用 Clean Rooms 加密计算加密的数据表。

**Topics**
+ [在 NULL 上分支的查询](#queries-branch-on-null)
+ [将一个源列映射到多个目标列](#queries-mapping)
+ [在 JOIN 和 SELECT 查询中使用相同的数据](#queries-using-same-data)

## 在 NULL 上分支的查询
<a name="queries-branch-on-null"></a>

要在 NULL 语句上设置查询分支，需要使用 `IF x IS NULL THEN 0 ELSE 1` 这样的语法。

查询总是可以在 cleartext 列中的 NULL 语句上分支。

只有当**保留 NULL 值**参数 (`preserveNulls`) 的值设置为 `true` 时，查询才能在 sealed 列和 fingerprint 列中的 NULL 语句上分支。

违反这些限制条件的查询可能会生成不正确的结果。

## 将一个源列映射到多个目标列
<a name="queries-mapping"></a>

将一个源列映射到多个目标列。例如，您可能希望在一列上同时进行 JOIN 和 SELECT。

有关更多信息，请参阅 [在 JOIN 和 SELECT 查询中使用相同的数据](#queries-using-same-data)。

## 在 JOIN 和 SELECT 查询中使用相同的数据
<a name="queries-using-same-data"></a>

如果列中的数据不敏感，则它可以出现在 cleartext 目标列中，这样就可以用于任何目的。

如果列中的数据很敏感，必须同时用于 JOIN 和 SELECT 查询，则应将该源列映射到输出文件中的两个目标列。一列作为 fingerprint 列进行 `type` 加密，一列作为密封列进行 `type` 加密。C3R 加密客户端的交互式架构生成建议标题后缀为 `_fingerprint` 和 `_sealed`。这些标题后缀可以成为快速区分此类列的有用惯例。