227 次浏览
问题:解释 DB2 优化器使用的多索引访问和仅索引访问路径之间的区别。分别提供一个示例。解决方案索引仅访问和多索引访问是 DB2 优化器为获取查询结果而选择的访问路径类型。当 SELECT 查询中给出的所有列都存在于索引中时,将使用索引仅访问路径。在这种情况下,优化器不必转到数据页来获取结果,所有数据都可以在索引页中找到。例如,ORDERS 表的主键为 ORDER_ID ... 阅读更多
2K+ 次浏览
DB2 中的 UNION 用于合并两个或多个 SELECT 语句。SELECT 语句可以作用于单个表或多个表。每个 SELECT 语句都单独处理,并将它们的结果组合起来以提供最终的结果行。UNION 语句将消除作为 SELECT 语句结果出现的重复行。如果我们想要保留重复行,则可以使用 UNION ALL 语句。例如,如果我们想要提取 ORDERS 和 ORDERS_HIST 表中 ORDER_TOTAL 大于 1000 的所有 ORDER_ID,则可以使用以下带有 ... 的查询 ... 阅读更多
151 次浏览
EXECUTE IMMEDIATE 和带有 PREPARE 的 EXECUTE 不能用于 SELECT 查询。对于 SELECT 查询,我们有一个固定列表 SELECT,其中要获取的列保持固定,并且不能更改。例如,如果我们想要选择 2020-08-14 下达的订单。然后我们可以使用如下所示的动态 SQL:示例MOVE ‘SELECT ORDER_ID FROM ORDERS WHERE ORDER_DATE=?’ TO WS-SQL-QUERY EXEC SQL DECLARE ORDER-CUR CURSOR FOR SELQUERY END-EXEC EXEC SQL PREPARE SELQUERY FROM :WS-SQL-QUERY END-EXEC MOVE ‘14-08-2020’ TO WS-ORDER-DATE EXEC SQL OPEN ORDER-CUR USING :WS-ORDER-DATE END-EXEC PERFORM UNTIL SQLCODE = +100 ... 阅读更多
671 次浏览
EXECUTE IMMEDIATE 和 EXECUTE PREPARE 是动态 SQL 的形式。在 EXECUTE immediate 的情况下,我们可以在主机变量中给出 SQL 语句,并将此主机变量传递到 EXECUTE IMMEDIATE 中。以下示例演示了这些形式。示例01 WS-SQL-DECLARE 05 WS-SQL-LEN PIC S9(04) COMP。 05 WS-SQL-QUERY PIC X(70)。 MOVE +80 TO WS-SQL-LEN MOVE “UPDATE ORDERS SET ORDER_PAID = ‘YES’ WHERE ORDER_DATE = ‘14-08-2020’” TO WS-SQL-QUERY EXEC SQL EXECUTE IMMEDIATE :WS-SQL-DECLARE END-EXEC在 EXECUTE PREPARE 的情况下,SQL 语句首先被准备,然后执行。我们可以使用这种形式的动态 SQL ... 阅读更多
1K+ 次浏览
静态 SQL 在 COBOL-DB2 程序中是硬编码的,并且 SQL 查询在程序执行期间不能更改。我们只能更改主机变量的值。在动态 SQL 的情况下,我们可以在运行时更改 COBOL-DB2 程序中的列、表和谓词。例如,根据当前日期,我们可以更新 ORDERS 或 ORDERS_HIST 表。此查询可以使用包含 ORDERS 表或 ORDER_HIST 表的动态 SQL 构建。动态 SQL 的主要优点在于其灵活性。我们可以根据业务逻辑添加列或更改表/谓词。在其他 ... 阅读更多
122 次浏览
PLAN_TABLE 的 QBLOCK_TYPE 列主要提供有关查询类型的信息。它可以具有 CORSUB 值,表示查询是相关子查询,NCOSUB 表示查询是非相关子查询。JOIN_TYPE 列指示查询中使用的联接类型。此列可以根据下表获取值。列值解释BLANK内部联接/无联接FFULL 外部联接L左外部联接R右外部联接
485 次浏览
DB2 中的 PLAN_TABLE 包含优化器从 EXPLAIN 语句中使用的访问路径的详细信息。此表提供了许多有关具有 DB2 SQL 语句的 PLAN 的信息。ACCESSTYPE 是 PLAN_TABLE 的列之一,它提供有关访问类型的详细信息。此列中可能存在的值及其解释如下所示。列值解释I索引访问RTablespace 扫描MMultiple 索引扫描N谓词中存在的索引访问INDEXONLY 列可以取值为“Y”,表示优化器只需要读取索引空间即可获取查询的数据。
285 次浏览
序列用于自动生成唯一 ID。我们可以在 DB2 表中将一列定义为 SEQUENCE 类型。这将使 DB2 能够自动为插入到表中的每一行生成一个唯一的 ID。DB2 生成的自动 ID 在整个数据库中保持唯一。例如,SEQUENCE 的实际实现出现在为每个区域(北、东、西和南)分配了单独的 ORDERS 表的情况下,然后我们可以将 ORDER_ID 声明为 SEQUENCE。这将始终为 ORDER_ID 生成唯一值,无论分配给北、东、... 的 ORDER 表如何。 阅读更多
3K+ 次浏览
子查询是嵌套查询。当此子查询仅执行一次,并且此子查询的结果用于提取主查询中的数据时,则此类型的子查询称为非相关子查询。另一方面,当子查询在每次执行时都引用主查询时,则子查询称为相关子查询。例如,如果我们想要从 ORDERS 表中提取所有 ORDER_TOTAL 超过总体平均值的订单,则可以使用以下非相关子查询。示例SELECT ORDER_ID FROM ORDERS WHERE ORDER_TOTAL > (SELECT AVG(ORDER_TOTAL) FROM ORDERS)有 ... 阅读更多
5K+ 次浏览
问题:如何通过 ORDERS 和 TRANSACTION DB2 表上的示例来解释内部联接和外部联接。解决方案JOIN 用于组合 DB2 中一个或多个表中的数据。JOIN 主要有两种类型——内部联接和外部联接。它们之间的基本区别在于,内部联接是两个或多个表的交集,而外部联接是两个或多个表的并集。基本上,内部联接用于使用相等列值组合多个表中的数据,另一方面,在外部联接的情况下,如果 ... 阅读更多